Урок №5. Отправка и получение разных файлов пользователю

В этом уроке мы научимся отвечать и отправлять различные файлы пользователю.

Получение и ответ на файлы пользователя.

В прошлых уроках мы научились отслеживать команды, а также текст. Но что делать если вдруг пользователь отправит нам некий файл(видео, фото, аудио и т.д.)? Для этого по сути используется тот же самый принцип, как и для отслеживания команд и текста. Мы создаем с вами декоратор @bot.message_handler(), но теперь вместо commands мы будем обращаться к content_types и внутри мы говорим какой тип файла мы ожидаем(т.е. этот метод сработает только в том случае, если самому коду будет отправлен определенный файл с конкретным разрешением). Сейчас мы можем указать любой тип файла(это может быть: 'audio', 'video', 'photo'). Также данный метод, как и с отслеживаниями команд может срабатывать на несколько типов файлов, если указать их через запятую(Например:content_types = 'photo', 'video').

Давайте будем обрабатывать изображения. Для этого напишем в content_types наш тип данных ('photo'). Далее мы создаем функцию, которую назовем get_file. Он также принимает параметр message. Внутри же функции мы будем выполнять ответ на предыдущее сообщение. Для этого мы пишем bot.reply_to(), потом в качестве первого параметра мы указываем message, который указывали в функции. Потом в качестве второго параметра мы указываем текст, который будет отправляться нашему пользователю после того, как он отправит нам файл. В моем случае я буду отправлять: 'Великолепная фотография'.

Теперь давайте запустим программу и посмотри что получилось.

Урок №5. Отправка и получение разных файлов пользователю
Урок №5. Отправка и получение разных файлов пользователю

Таким образом можно обрабатывать получения различных типов объектов и в зависимости от того, что пользователь вам отправляет, вы можете выполнять абсолютно любой код!

Отправка различных файлов.

Мы уже умеем отправлять нашему пользователю различный текст, но как же нам отправлять ему разный типы файлов?

Давайте для начала научимся отправлять пользователю некое изображение. Будем при получении команды /photo, отправлять ему изображение. Для этого мы пишем декоратор @bot.message_handler() в котором обращаемся к commands и обращаемся к команде 'photo'. Далее создаем функцию, например, send_ph и указываем параметр message. Теперь важно чтобы ваш проект и файл находились в одной папке, иначе вам придётся в программе указывать путь до вашего файла! Далее мы с вами открываем этот файл.

Для этого мы с вами обращаемся к методу open. Потом мы говорим, что конкретно мы хотим открыть. По сути мы обращаемся к текущей папке и нахожу в ней наше изображение. Также нам надо указать формат открытия файла. Тут мы указываем что открываем его на чтение('rb'). После того как мы все это сделали, обращаемся к боту и к методу под названием send_photo(). По сути этот метод работает также, как работал метод send_message. Разница только в том, что вместо теста мы отправляем с вами изображение. Чтобы нам это сделать, то в качестве первого параметр мы указываем также message.chat.id, а вторым параметром указываем какой файл мы будем отправлять. Также дополнительно вы можете с помощью метода send.message вы можете дополнять отправленное сообщение текстом.

Давайте проверим, что у нас получилось.

Урок №5. Отправка и получение разных файлов пользователю
Урок №5. Отправка и получение разных файлов пользователю

Если же мы хотим отправить пользователю какой-либо аудио файл, то в таком случае вы делайте то же самое, только указываете вместо изображения ваше некое аудио, а также вместо send_photo указываете send_audio. Остальное будет не изменяться. Также в случае видео вы указываете ваше изображение и указывает send_video.

Урок №5. Отправка и получение разных файлов пользователю
Урок №5. Отправка и получение разных файлов пользователю

Также после каждого урока вы можете заходить на моего telegram бота, чтобы посмотреть результат работы, после каждого урока: http://t.me/pythonte1egram_bot.

А также вы можете подписаться на telegram канала, где будут выкладываться все коды с моих уроков, а также сами уроки: https://t.me/pythotelegram.

66
1 комментарий

Когда ты открываешь файл без контекста, любой эксепшн рушит твою программу. Делать надо через with open(...) as f:

1