Найти тему
#<Код своими руками!>

Telegram-bot с нуля, обработчики сообщений. Урок 4

Оглавление

Доброго времени суток, программисты,
В
прошлом уроке мы поработали немного с браузером, используя адресную строку, и написали небольшой код - эхо-бота.

В этом уроке мы разберём обработчики сообщений(Хэндлеры) и добавим их в наш код.

Итак, приступим.

Message handlers - обработчики сообщений

Определения, что же такое обработчики сообщений, я думаю не надо
и так понятно, что они обрабатывают сообщения.

Когда наш код принимает входящее сообщение от пользователя,
программа идёт
сверху вниз и ищет к какому хэндлеру подходит тип данного входящего сообщения, подчёркнуто "сверху вниз" к тому, что
может быть ситуация, когда программа не доходит до вашего хэндлера или вовсе не обрабатывает сообщения в нём, часто ошибкой может быть, что вышестоящий хэндлер берёт эту работу на себя.
Поэтому хэндлеры стоит располагать
правильно!

Сегодня рассмотрим основные хэндлеры: text, audio, video, document.
Но их гораздо больше.

С этим хэндлером "content_types=["text"]" мы уже встречались в прошлой статье,
в нём я лишь напишу, чтобы он отправлял нам сообщение "Текст.".
И в следующий хэндлерах тоже будут соответсвующие ответы по типу сообщения.

Начнём, напишем сразу все хендлеры в одной программе,
убедимся, что они "Понимают" тип сообщения и что хэндлер который не принимает тип сообщения, пропускает сообщение дальше по коду.

КОД:

<<
import telebot
import config

bot = telebot.TeleBot(config.TOKEN)
@bot.message_handler(commands=['start'])
def welcome(message):
bot.send_message(message.chat.id, "Привет,{0.first_name}!".format(message.from_user, bot.get_me()))

@bot.message_handler(content_types=["text"])
def first(message):
bot.send_message(message.chat.id, "Текст.")

@bot.message_handler(content_types=["audio"])
def second(message):
bot.send_message(message.chat.id, "Аудио.")

@bot.message_handler(content_types=["video"])
def third(message):
bot.send_message(message.chat.id, "Видео.")

@bot.message_handler(content_types=["document"])
def fourth(message):
bot.send_message(message.chat.id, "Документ.")

bot.polling(none_stop=True)
>>

Тестирование в telegram

-2
-3

Для наглядности, думаю, понятно.
К сведению, если загрузить фотографию как картинку, то он её не обработает, т.к. у нас нет хэндлера "
content_type=["photo"]", но добавить его очень просто.
Также если добавить фотографию как документ, то он её и примет как документ, а не как фото.

Полезная информация:
Хэндлер может принимать по типу несколько аргументов(максимум не проверял).
Это значит, что вы спокойно можете принимать одним хэндлером, к примеру, и текст и аудио.
Пример:
content_type=["text","audio"].

P.s. сам лично проверял, всё так работает.

Все возможные типы content type: text, audio, document, photo, sticker, video, video_note, voice, location, contact, new_chat_members, left_chat_member, new_chat_title, new_chat_photo, delete_chat_photo, group_chat_created, supergroup_chat_created, channel_chat_created, migrate_to_chat_id, migrate_from_chat_id, pinned_message.
Так что их много.)

__________________________________________________________________________________________

-Спасибо, что дочитали данную статью до конца, она получилась совсем не длинной, Надеюсь, она была вам полезна. Также если что-то осталось не разобранным и непонятным - пишите в комментарии. Подписывайтесь, дальше будет ещё интереснее. и ждите уже совсем скоро продолжения по телеграм боту:)