Telegram Бот не обрабатывает второй Handler

Бот обрабатывает 1-ый Handler на сообщение, но на второй просто не реагирует, в консоли логов никаких нет, подскажите, в чём проблема? код: https://pastebin.com/sveT081h


Ответы (1 шт):

Автор решения: mrEvgenX

Код так работает потому, что так устроен telebot, когда он нашел первый подходящий message_handler, он его выполняет и на этом успокаивается. Если порыться в исходниках, можно в этом убедиться.

Можно все решить двумя способами. Объединить обработчики в один и в if проверять содержание сообщение и исполнять нужный код. Но можно и по-другому.

В readme в репозитории на гитхабе, который скинул - там упомянуто, что декоратор message_handler может принимать параметр `func, туда передается функция, принимающая аргумент message, а возвращающая True/False.

В таком случае можно проверять условие срабатывания прямо в декораторе.

@bot.message_handler(content_types=['text'], func=lambda message: message.text.lower() == "проверить подписку")
def check(message):
    for chri in statuses:
        # ...

@bot.message_handler(content_types=['text'], func=lambda message: message.text.lower() == "получить ключ")
def key(message):
    # ...

Должно сработать.

→ Ссылка