Найти в Дзене
proger ЧАЙНИК

Эхо Telegram-бот на Python. Для новичков

Эхо бот для Telegram
Эхо бот для Telegram

И снова здравствуйте! Сегодня продолжим заниматься нашим ботом. А попробуем мы сделать следующее: бот будет возвращать всё то, что вы напишете ему в чате. Клёво? Тогда поехали. ;)

Для тех, кто не создал бота в BotFather, советую почитать тут. Если вы не знакомы с языком программирования, советую вам пройти курс на JetBrains Academy, тут статья-описание данного курса.

Что нам понадобится:

  • Установленный Python на компьютере версией 3.5 и выше,
  • Среда разработки или любой редактор кода, в котором будем писать код для бота,
  • Созданный бот в BotFather,
  • Немножко смекалки и сообразительности

Я буду использовать PyCharm в качестве среды разработки и библиотеку python-telegram-bot, предоставляющая чистый Python-интерфейс для Telegram Bot API. Пример кода будет в конце статьи.

Давайте для начала создадим папку py_bot, в которой создадим файл echo_bot.py и откроем в редакторе кода.

Установим библиотеку python-telegram-bot с помощью следующей команды, введя ее в терминал (командную строку), предварительно открыв в нем папку проекта :

pip install python-telegram-bot --upgrade

Теперь приступим непосредственно к самому коду. Импортируем из модуля telegram.ext Updater, CommandHandler, MessageHandler, Filters.

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

Updater получает обновления от Telegram и доставляет их диспетчеру. CommandHandler обрабатывает команды Telegram'а, MessageHandler обрабатывает сообщения Telegram'а, Filters помогает фильтровать сообщения MessageHandler'a.

Напишем функцию start(), которая выведет сообщение "Привет! Я бот, повторяющий слова, написанные тобой в чате.". Она будет использоваться для того, чтобы отправить ответное сообщение команде /start.

def start(update, context):
update.message.reply_text(
'Привет! Я бот, повторяющий слова, написанные тобой в чате.')

Чтобы закрепить то, чему мы научились, создадим похожую функцию, которая при команде /help отправит сообщение "Помогите".

def help_command(update, context):
update.message.reply_text(
'Help!')

Затем напишем нашу ключевую функцию, которая будет повторять отправленный текст пользователя и отправлять в ответ.

def echo(update, context):
update.message.reply_text(update.message.text)

Теперь нам нужно связать все эти разрозненные функции, не так ли? Let's do that!

Напишем функцию main(), в которой:

  • создадим экземпляр класса updater = Updater('ваш токен', use_context=True),
  • дадим диспетчеру регистрировать наши обработчики (handlers) dp = updater.dispatcher,
  • добавим обработчики CommandHandler /start и /hel. dp.add_handler(CommandHandler("start", start)) dp.add_handler(CommandHandler("help", help_command)),
  • добавим обработчик MessageHandler, который первым аргументом примет фильтры Filter.text и ~Filters.command, где символ ~ означает "не", то есть в нашем случае разрешай текст и не разрешай реагировать на команды. Вторым аргументом принимается коллбэк функция, у нас это функция echo(). dp.add_handler(MessageHandler(Filters.text & ~Filters.command, echo)),
  • запустим запрашивание обновлений от Telegram. updater.start_polling(),
  • чтобы код после запуска сразу же не отключился, добавим updater.idle(), чтобы наш код "застыл" в ожидании действий пользователя до тех пор, пока мы сами не выключим его.
def main():
updater = Updater(
"1173900008:AAEH1M8St4toafkR0KX-KiREt4bGjMKInpc", use_context=True)

dp = updater.dispatcher

dp.add_handler(CommandHandler(
"start", start))
dp.add_handler(CommandHandler(
"help", help_command))

dp.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))

updater.start_polling()

updater.idle()

Теперь, чтобы запустить наш код, добавим и нажмем на кнопку Run :

if __name__ == '__main__':
main()

В итоге у нас получилось

Эхо-бот
Эхо-бот

Весь код для бота:

Спасибо за внимания! Увидимся в следующей статье.