Exemple #1
0
    def process_new_messages(self, new_messages):
        result = []
        for new_message in new_messages:
            if new_message.date < time.time() - 180:
                continue
            result.append(new_message)

        if result:
            TeleBot.process_new_messages(self, result)
Exemple #2
0
class DoorAlertBot:
    def __init__(self, config_provider: TokenProvider,
                 telegram_bot_message_handler: BotMessageHandler):
        self._config_provider = config_provider
        self._message_handler = telegram_bot_message_handler
        self._bot = None

    def init_bot(self):
        token = self._config_provider.get_token()
        self._bot = TeleBot(token=token)

    def contains_chat(self, chat_id):
        return self._message_handler.contains_chat(chat_id)

    def get_chat(self, chat_id):
        self._check_bot_initialized()
        return self._bot.get_chat(chat_id)

    def get_chat_administrators(self, chat_id):
        self._check_bot_initialized()
        return self._bot.get_chat_administrators(chat_id)

    def process_new_messages(self, messages: list):
        self._check_bot_initialized()
        self._bot.process_new_messages(messages)

    def _check_bot_initialized(self):
        bot = self._bot
        if bot is None:
            msg = 'Bot is not initialized.'
            logger.critical(msg)
            raise DoorAlertBotException(msg)

    def init_handlers(self):
        self._check_bot_initialized()
        bot = self._bot
        bot_message_handler = self._message_handler

        @bot.message_handler(commands=['start', 'welcome'])
        @log
        def send_welcome(message):
            bot_message_handler.handle_welcome(bot, message)

        @bot.message_handler(commands=['help'])
        @log
        def send_help(message):
            bot_message_handler.handle_help(bot, message)

        @bot.message_handler(commands=['subscribe'])
        @log
        def subscribe_chat(message):
            bot_message_handler.handle_subscribe_chat(bot, message)

        @bot.message_handler(commands=['subscriptions'])
        @log
        def get_subscriptions(message):
            bot_message_handler.handle_get_subscriptions(bot, message)

        @bot.message_handler(commands=['unsubscribe'])
        @log
        def unsubscribe_chat(message):
            bot_message_handler.handle_unsubscribe_chat(bot, message)

        #### Just some test
        def find_at(msg):
            for text in msg:
                if '@' in text:
                    return text

        @bot.message_handler(
            func=lambda msg: msg.text is not None and '@' in msg.text)
        @log
        def at_answer(message):
            texts = message.text.split()
            at_text = find_at(texts)
            bot.reply_to(message,
                         'https://instagram.com/{}'.format(at_text[1:]))

        #### End

    def polling(self, *args, **kwargs):
        logger.info("Start polling...")
        self._bot.polling(*args, **kwargs)
        logger.info("Polling ended.")