Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

FAQ «Эхо-бот» для Telegram на Python за 30 минут

Oleg Polikhronidi

Изучающий
Пользователь
Регистрация
3 Июн 2019
Сообщения
224
Лучшие ответы
3
Репутация
68
Всем привет, сегодня продолжим заниматься строением ботов на Python, используя библиотеку Telebot! Сегодня мы с Вами будем делать бота, который будет возвращать всё то, что Вы напишете ему в чате. Звучит хайпово, да?) Поехали!

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

Что нужно для создания бота?

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

Первое, это мы создадим папку py_bot, в которой создадим echo_bot.py и откроем в редакторе кода.
Теперь мы поставим себе библиотеку python-telegram-bot с помощью следующей команды, введя ее в cmd.exe.
Вводим в консоль (cmd):
pip install python-telegram-bot --upgrade

Теперь приступим непосредственно к самому написанию нашего кода.
Будем импортировать из нашего модуля telegram.ext файлы: Updater, CommandHandler, MessageHandler, Filters.
Python:
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
Что это за модули? Вот, описание к ним:

  • Updater получает обновления от Telegram и доставляет их диспетчеру.
  • CommandHandler обрабатывает команды Telegram'а.
  • MessageHandler обрабатывает сообщения Telegram'а.
  • Filters помогает фильтровать сообщения MessageHandler'a.
Напишем функцию start(), которая выведет сообщение «Привет! Я Эхо-Бот, повторяю всё то, что ты мне напишешь! :)»
Она будет использоваться для того, чтобы отправить ответное сообщение команде /start.

Python:
def start(update, context):
update.message.reply_text('Привет! Я Эхо-Бот, повторяю всё то, что ты мне напишешь! :-)')
Для закрепления навыков, создадим похожую функцию, которая при команде/help, отправит команду « Помогите » в ответ!
Python:
def help_command(update, context):
update.message.reply_text('Help!')
Затем реализуем основную и ключевую функцию, которая будет повторять отправленный текст пользователя и дублировать его.
Python:
def echo(update, context):
update.message.reply_text(update.message.text)
Теперь нам нужно связать все эти непонятные для многих функции, не так ли? Let`s Go!

Давайте теперь реализуем функцию main(), в которой:

  • Диспетчер сможет получать наши обработчики (handlers) dp = updater.dispatcher,
  • Добавим новый класс updater = Updater('ваш токен', use_context=True),
  • Реализуем новые обработчики 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(), чтобы наш код « Застыл » в ожидании действий пользователя до тех пор, пока мы сами не выключим его.
Python:
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 и запустим её:
Python:
if __name__ == '__main__':
main()
Ну вот и всё, вот у нас и получился наш бот! А тем, кто хочет заняться разработкой Telegram-ботов, посоветую Вам начать с изучения своего кода, который мы написали выше, я бы скинул всю документацию к Telegram Bot API, но правилами форума запрещено. До новых встреч, друзья! :)

Вот полный код, который у нас должен получиться:
Python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

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

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

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

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

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()

if __name__ == '__main__':
    main()
 
Последнее редактирование:
Сверху Снизу