Exemplo n.º 1
0
def keyboard_callback(update: telegram.Update, context: CallbackContext):
    state = Storage.get_user_state(update.effective_user.id)
    if state is None:
        raise errors.UserHaveNoActiveGroup
    query = update.callback_query
    new_state = bool(int(query.data))
    if not state ^ new_state:
        return
    Storage.set_user_state(update.effective_user.id, new_state)
    if new_state:
        query.edit_message_text(text=f'Ok! Now you *understanding*!',
                                reply_markup=stop_understand_keyboard,
                                parse_mode=telegram.ParseMode.MARKDOWN)
    else:
        query.edit_message_text(text=f'Ok! Now you *not understanding* :(',
                                reply_markup=start_understand_keyboard,
                                parse_mode=telegram.ParseMode.MARKDOWN)
Exemplo n.º 2
0
def create(config: StorageConfiguration) -> Storage:
    storage = Storage(
        JsonFormattedHostStorage(FileStorage(config.hosts_filename)),
        JsonFormattedUserAccountStorage(
            FileStorage(config.user_accounts_filename)),
        JsonFormattedUnixAccountStorage(
            FileStorage(config.unix_accounts_filename)),
        UserAccountActivationInMemoryStorage())
    return storage
Exemplo n.º 3
0
def join_group(update: telegram.Update, context: CallbackContext):
    if len(context.args) < 1:
        raise errors.JoinNotEnoghtArgument
    group_id: str = context.args[0].strip().upper()
    if not group_id.isalnum():
        raise errors.InvalidGroupId
    if not Storage.add_user_to_group(group_id, update.effective_user.id):
        raise errors.GroupNotFound
    update.message.reply_text(f'Ok! Now you *understanding*!',
                              reply_markup=stop_understand_keyboard,
                              parse_mode=telegram.ParseMode.MARKDOWN)
Exemplo n.º 4
0
 def task_generator(self):
     self.visited = []
     self.storage = Storage()
     url_result = self.storage.urls.get()
     for element in url_result:
         url = element.get_url()
         if url in self.visited:
             continue
         g = Grab()
         g.setup(url=url, headers=element.headers)
         self.visited.append(url)
         yield Task('history_element', grab=g, visit_deep=False)
Exemplo n.º 5
0
    def __init__(self, parent=None):
        super(Application, self).__init__(parent)

        self.available_browsers = webbrowser._browsers
        self.storage = Storage()
        self.spider = self.create_spider()
        self.spider.task_interval = self.storage.options.get(
            'task_interval', 1)
        self.spider_process = Process(target=self.spider.run)
        self.spider_object = SpiderObject(self)
        self.urls_object = UrlsObject(self)
        self.force_compile = True
        self.queue = Queue()
        self.setup_ui()
def test_add_group():
    group_id = utils.generate_group_id()
    assert Storage.get_group_members(group_id) is None
    assert Storage.get_group_not_understand_members(group_id) is None
    assert group_id not in Storage.get_all_groups()

    user = generate_user()
    assert Storage.add_user_to_group(group_id, user) is False

    assert Storage.add_group(group_id)
    assert group_id in Storage.get_all_groups()

    assert not Storage.add_group(group_id)
Exemplo n.º 7
0
def main():
    """Run bot."""
    assert config.BOT_TOKEN
    updater = Updater(config.BOT_TOKEN, use_context=True)

    Storage.init()

    dispatcher = updater.dispatcher
    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(CommandHandler("help", start))
    dispatcher.add_handler(
        CommandHandler("join", join_group, pass_args=True,
                       pass_chat_data=True))
    dispatcher.add_handler(
        CommandHandler("new", new_group, pass_args=True, pass_chat_data=True))
    updater.dispatcher.add_handler(CallbackQueryHandler(keyboard_callback))
    dispatcher.add_error_handler(error)

    log.info('Bot started')
    updater.start_polling()

    updater.idle()
    log.info(f'Bot shutdown...')
    Storage.close()
def storage():
    Storage.init()
    yield
    Storage.close()
def test_user_state(group):
    user = generate_user()
    Storage.add_user_to_group(group, user)

    assert Storage.get_group_members(group) == {user}
    assert user not in Storage.get_group_not_understand_members(group)
    assert Storage.get_user_state(user) is True

    assert Storage.set_user_state(user, False)
    assert user in Storage.get_group_not_understand_members(group)
    assert Storage.get_user_state(user) is False

    assert Storage.set_user_state(user, True)
    assert user not in Storage.get_group_not_understand_members(group)
    assert Storage.get_user_state(user) is True

    user_2 = generate_user()
    assert Storage.set_user_state(user_2, False) is False
    assert Storage.get_user_state(user_2) is None

    Storage._redis.set(Storage.Keys.user_group(user_2),
                       utils.generate_group_id())
    assert Storage.set_user_state(user_2, False) is False
    assert Storage.get_user_state(user_2) is None

    Storage._redis.set(Storage.Keys.user_group(user_2), group)
    assert Storage.set_user_state(user_2, False) is False
    assert Storage.get_user_state(user_2) is None
Exemplo n.º 10
0
def test_group_members(group):
    assert Storage.get_group_members(group) == set()
    assert Storage.get_group_not_understand_members(group) == set()
    user_1 = generate_user()
    Storage.add_user_to_group(group, user_1)

    assert Storage.get_user_group(user_1) == group
    assert Storage.get_group_members(group) == {user_1}
    assert user_1 not in Storage.get_group_not_understand_members(group)

    user_2 = generate_user()
    Storage.add_user_to_group(group, user_2)

    assert Storage.get_user_group(user_2) == group
    assert Storage.get_group_members(group) == {user_1, user_2}
    assert user_1 not in Storage.get_group_not_understand_members(group)
Exemplo n.º 11
0
def group():
    group_id = utils.generate_group_id()
    Storage.add_group(group_id)
    yield group_id
Exemplo n.º 12
0
 def new(cls, author_id: int):
     group = cls(author_id)
     Storage.add_group(group.id)
     return group