Обработка файлов
Для обработки файлов, отправленных пользователем (фото, видео, аудио и др.), используется декоратор content_types. Вместо command указываем ожидаемый тип файла:
@bot.message_handler(content_types=['photo'])
def get_photo(message):
# ... код обработки фотографии ...
Этот метод срабатывает только при отправке файла соответствующего типа. Можно указать несколько типов, например: [‘photo’, ‘audio’, ‘video’]. В примере обрабатывается фотография, и бот отвечает:
bot.reply_to(message, "Какое красивое фото!")
Кнопки
Существуют два типа кнопок: inline (рядом с сообщением) и кнопки в нижней части чата (reply).
Inline-кнопки
Для создания inline-кнопок используется объект markup:
from bot import types
markup = types.InlineKeyboardMarkup()
Кнопки добавляются методом add():
markup.add(types.InlineKeyboardButton(text="Перейти на сайт", url="https://google.com"))
Эта кнопка ведет на Google. Кнопка с коллбэком:
markup.add(types.InlineKeyboardButton(text="Удалить фото", callback_data="delete"))
markup.add(types.InlineKeyboardButton(text="Изменить текст", callback_data="edit"))
Кнопки выводятся с сообщением, используя параметр reply_markup:
bot.reply_to(message, "Текст сообщения", reply_markup=markup)
Для изменения расположения кнопок, создаются ряды:
button1 = types.InlineKeyboardButton(text="Кнопка 1", url="https://google.com")
button2 = types.InlineKeyboardButton(text="Кнопка 2", callback_data="delete")
button3 = types.InlineKeyboardButton(text="Кнопка 3", callback_data="edit")
markup.row(button1)
markup.row(button2, button3)
Кнопки теперь расположены в два ряда.
Обработка коллбэков
Обработка нажатия на inline-кнопки с коллбэком осуществляется декоратором callback_query_handler:
@bot.callback_query_handler(func=lambda call: True)
def message_handler(call):
# ... код обработки коллбэка ...
Внутри функции проверяется callback_data:
if call.data == "delete":
bot.delete_message(call.message.chat.id, call.message.message_id - 1)
elif call.data == "edit":
bot.edit_message_text("Edit Text", call.message.chat.id, call.message.message_id)
Первый случай удаляет предпоследнее сообщение, второй изменяет текст сообщения.
Кнопки в нижней части чата (reply кнопки)
Для кнопок в нижней части чата используется ReplyKeyboardMarkup:
markup = types.ReplyKeyboardMarkup()
markup.add("Перейти на сайт", "Удалить фото")
Используется reply_markup при отправке сообщения:
bot.reply_to(message, "Привет", reply_markup=markup)
Обработка нажатия на эти кнопки происходит через message_handler и register_next_step_handler:
@bot.message_handler(commands=['start'])
def start(message):
# ... код отправки сообщения и кнопок ...
bot.register_next_step_handler(message, onclick)
def onclick(message):
if message.text == "Перейти на сайт":
bot.reply_to(message, "Веб-сайт из Open")
elif message.text == "Удалить фото":
bot.reply_to(message, "Delete")
Отправка файлов пользователю
Для отправки файлов используются методы send_photo, send_audio, send_video. Пример отправки фотографии:
with open('photo.jpg', 'rb') as f:
bot.send_photo(message.chat.id, f, reply_markup=markup)
Аналогично работают send_audio и send_video. Эмодзи добавляются непосредственно в текст сообщения.
Рассмотрены основные функции для создания Telegram-бота: обработка файлов, создание и обработка inline и reply кнопок, а также отправка файлов пользователю. Это позволяет создавать интерактивных и функциональных ботов.