SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Веб-разработка

Декораторы 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 без изменения модели вызовов. Храните токен вне исходников и проверяйте каждый тип события отдельно.

Документация