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)
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
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)
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)
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)
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
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)
def group(): group_id = utils.generate_group_id() Storage.add_group(group_id) yield group_id
def new(cls, author_id: int): group = cls(author_id) Storage.add_group(group.id) return group