Декораторы TeleBot: сообщения, кнопки и inline-запросы
В pyTelegramBotAPI объект TeleBot регистрирует обработчики с помощью декораторов. Декоратор вызывается при определении функции и связывает её с фильтром события; он не запускает функцию немедленно.
Сообщения
import os
import telebot
bot = telebot.TeleBot(os.environ["BOT_TOKEN"])
@bot.message_handler(commands=["start"])
def start(message):
bot.reply_to(message, "Здравствуйте!")
@bot.message_handler(content_types=["text"])
def text(message):
bot.reply_to(message, message.text)Размещайте специализированные обработчики до общего текстового: порядок и фильтры влияют на то, какой обработчик получит сообщение.
Нажатия кнопок
@bot.callback_query_handler(func=lambda call: call.data == "button1")
def button(call):
bot.answer_callback_query(call.id, "Принято")Фильтр проверяет callback_data, а не видимый текст кнопки. answer_callback_query завершает ожидание действия в клиенте. Само сообщение от нажатия не становится обычным текстовым update.
Inline-режим
@bot.inline_handler(func=lambda query: query.query == "search")
def inline_search(query):
bot.answer_inline_query(query.id, [], cache_time=1)
bot.infinity_polling()Inline-запрос появляется при обращении к боту из поля ввода другого чата; режим требуется включить для бота. Пустой список здесь намеренно показывает форму ответа без фиктивных результатов. Для реальной выдачи создайте допустимые InlineQueryResult.
Пример использует синхронный TeleBot. Не смешивайте его с AsyncTeleBot без изменения модели вызовов. Храните токен вне исходников и проверяйте каждый тип события отдельно.