Как создать телеграмм бота? (часть 2)

Как создать телеграмм бота? (часть 2)

Берлога Программистов👨‍💻


Продолжим создавать нашего первого телеграмм бота на Python и добавим ему новых функций.

В прошлой части мы создали первого бота и научили его отправлять сообщение при команде /start

Сегодня мы добавим фунционала, научим его отвечать на голосовые сообщения, фотографии и поработаем с этими типами. Вот такой в конце получим результат:

Результат

Ну что, приступим!

Шаг 1: Обрабатываем голосовое сообщение

Мы уже умеем обрабатывать команду /start, для отслеживания голосового сообщения мы будем использовать похожий принцип. Пишем такой код:

@bot.message_handler(content_types=['voice'])

В content_types мы передаем тип 'voice', что означает голосове сообщение. Подробнее про типы можете прочитать в документации, а мы переходим к написанию функции.

def send_audio_duration(message):
    voice_duration = "Аудио длится: " + str(message.voice.duration) + " сек."
    bot.reply_to(message, voice_duration)

Разберем каждую строчку.

  1. Определяем функцию и называем ее как хотим, в это случае send_audio_duration
  2. Записвыаем длину сообщения, к строке "Аудио длится: " мы добавляем длину аудио и тут чуть чуть по подробнее. Сначало мы обращаемся к отправленному сообщению message, после в документации видим, что у message есть атрибут voice, а у самого voice есть атрибут duration, которое возвращает продолжительность голосового сообщения в секундах
  3. в последней строчке используем метод reply_to, который очень похож на ранее изученный send_message, но вместо простой отправки, отвечает на полученное сообщение.

Вот что получилось в итоге:

@bot.message_handler(content_types=['voice'])
def send_audio_duration(message):
    voice_duration = "Аудио длится: " + str(message.voice.duration) + " сек."
    bot.reply_to(message, voice_duration)


Шаг 2: Обрабатываем полученное фото

Начинаем так же как и в шаге №1, но вместо типа 'voice' передаем 'photo'.

@bot.message_handler(content_types=['photo'])

После приступаем к написанию функции, сначала просто определяем ее.

def send_photo(message):

Теперь нам нужно получить само фото, для этого обратимся к нему через атрибут photo, но в документации мы уже увидели, что атрибут photo возвращает список версий фотографии (разных размеров), [-1] используется для выбора самой большой (наиболее высокого разрешения) версии.

photo = message.photo[-1]

В следующих строках нужно будет загрузить само изображение, что бы в будущем его отправить:

file_info = bot.get_file(photo.file_id)
downloaded_file = bot.download_file(file_info.file_path)

В первой строке получается дополнительная информация о фотографии с использованием ее file_id.

Во второй эта строка загружает сам файл фотографии, используя путь к файлу, полученный ранее. Полученный файл представляется в виде байтового объекта.


Как все загружено мы уже просто отправляем фото и текст:

bot.reply_to(message, "Вы прислали фото:")
bot.send_photo(message.chat.id, downloaded_file)

Первая строчка нам уже знакома, а во втрой все тоже самое что и в send_message, но вместо текста изображение


Шаг 3: Тестируем

Как видите все прекрасно получилось и мы уже имеем бота с хорошим функционалом.

Подписывайтесь на телеграмм канал Берлога Программистов👨‍💻, что бы не пропустить следующие части!


Полный код:

import telebot

token = 'ваш токен'
bot = telebot.TeleBot(token)


@bot.message_handler(commands=['start'])
def say_hi(message):
    text = 'Привет, Мир!'
    bot.send_message(message.chat.id, text)


@bot.message_handler(content_types=['voice'])
def send_audio_duration(message):
    voice_duration = "Аудио длится: " + str(message.voice.duration) + " сек."
    bot.reply_to(message, voice_duration)


@bot.message_handler(content_types=['photo'])
def send_photo(message):
    photo = message.photo[-1]
    file_info = bot.get_file(photo.file_id)
    downloaded_file = bot.download_file(file_info.file_path)

    bot.reply_to(message, "Вы прислали фото:")
    bot.send_photo(message.chat.id, downloaded_file)


bot.polling()


https://t.me/sitesurfers

Report Page