Telegram-бот на Python: обработка файлов

Обработка файлов

Для обработки файлов, отправленных пользователем (фото, видео, аудио и др.), используется декоратор 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 кнопок, а также отправка файлов пользователю. Это позволяет создавать интерактивных и функциональных ботов.

Что будем искать? Например,программа