Создание Telegram-бота с помощью Python

В этой статье мы рассмотрим, как создать телеграм-бота с помощью Python.

В последнее время Telegram стал одной из наиболее часто используемых платформ для обмена сообщениями и контентом, у него нет ограничений на обмен файлами, как у Whatsapp, и он поставляется с некоторыми предустановленными ботами, которые можно использовать в любых каналах (группах в случае WhatsApp) для контроля поведения или фильтрации спам-сообщений, отправленных пользователями.

Требования

  • Аккаунт в Telegram: Если у вас не установлено приложение Telegram, просто загрузите его из Play Маркета. После скачивания создайте аккаунт с использованием номера мобильного телефона, как в WhatsApp.
  • Модуль python-telegram-bot: Здесь нам понадобится модуль под названием python-telegram-bot, Эта библиотека предоставляет чистый интерфейс Python для Telegram Bot API. Он совместим с Python версии 3.6.8+. В дополнение к чистой реализации API, эта библиотека включает в себя ряд высокоуровневых классов, которые делают разработку ботов простой и понятной. Эти классы содержатся в подмодуле «telegram.ext». Для получения дополнительной информации вы можете проверить их официальный репозиторий GitHub.

Установка модуля

Мы можем установить этот модуль через pip и conda с помощью приведенной ниже команды.

# installing via pip
pip install python-telegram-bot

# installing via conda
conda install -c conda-forge python-telegram-bot

Шаги для создания своего первого бота

Шаг 1: После открытия аккаунта в Telegram, в строке поиска вверху введите в строке поиска «BotFather»

Шаг 2: Нажмите на ‘BotFather’ (первый результат) и введите /newbot

Шаг 3: Присвойте боту уникальное имя. После присвоения имени Botfather запросит его имя пользователя. Затем также дайте уникальное имя, НО помните, что имя пользователя вашего бота должно заканчиваться на бота, например, my_bot, hellobot и т. д.

Шаг 4: После присвоения уникального имени и если оно будет принято, вы получите сообщение примерно такого содержания:

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

Поэтапное внедрение

Шаг 1: Импорт необходимых библиотек

  • Python3
fromtelegram.ext.updater importUpdater fromtelegram.update importUpdate fromtelegram.ext.callbackcontext importCallbackContext fromtelegram.ext.commandhandler importCommandHandler fromtelegram.ext.messagehandler importMessageHandler fromtelegram.ext.filters importFilters

Краткое описание импортируемых нами функций:

  • Обновления: Он будет содержать ключ API, который мы получили от BotFather, чтобы указать, в какого боте мы добавляем функционал с помощью нашего кода на Python.
  • Обновлять: Это будет вызываться каждый раз, когда бот получает обновление, т.е. сообщение или команду, и отправляет сообщение пользователю.
  • Контекст обратного вызова: Мы не будем использовать его функционал непосредственно в нашем коде, но когда мы будем добавлять диспетчера, он необходим (и он будет работать внутренне)
  • Обработчик команды: Этот класс Handler используется для обработки любой команды, отправленной пользователем боту, команда всегда начинается с «/», т.е. «/start»,»/help» и т.д.
  • Обработчик сообщений: Этот класс Handler используется для обработки любого обычного сообщения, отправляемого пользователем боту,
  • Фильтры: Это отфильтрует обычный текст, команды, изображения и т.д. из отправленного сообщения.

Шаг 2: Определите функции для работы

Функция запуска: Он отобразит первый разговор, вы можете назвать его как-то иначе, но сообщение внутри него будет отправлено пользователю всякий раз, когда он нажимает «начать» в самом начале.

  • Python3
updater =Updater("your_own_API_Token got from BotFather",                   use_context=True)   defstart(update: Update, context: CallbackContext):     update.message.reply_text(         "Enter the text you want to show to the user whenever they start the bot")

В основном, в стартовом сообщении вы должны добавить что-то вроде «Здравствуйте, добро пожаловать в бот» и т.д.

Функция помощи: Именно в эту функцию вы должны добавить любую помощь, которая может понадобиться пользователю, т.е. все команды, которые понимает ваш бот, информацию, относящуюся к боту и т.д.)

  • Python3
defhelp(update: Update, context: CallbackContext):     update.message.reply_text("Your Message")

Добавляем еще несколько функционалов в бота.

  • Python3
defgmail_url(update: Update, context: CallbackContext):     update.message.reply_text("gmail link here")   defyoutube_url(update: Update, context: CallbackContext):     update.message.reply_text("youtube link")   deflinkedIn_url(update: Update, context: CallbackContext):     update.message.reply_text("Your linkedin profile url")   defgeeks_url(update: Update, context: CallbackContext):     update.message.reply_text("GeeksforGeeks url here")   defunknown_text(update: Update, context: CallbackContext):     update.message.reply_text(         "Sorry I can't recognize you , you said '%s'"%update.message.text)   defunknown(update: Update, context: CallbackContext):     update.message.reply_text(         "Sorry '%s' is not a valid command"%update.message.text)

Здесь мы добавили 4 функции: одну для открытия Gmail, одну для YouTube, одну для LinkedIn и последнюю для GeeksforGeeks. Это не ОБЯЗАТЕЛЬНЫЕ функции, вы можете добавлять любые виды функций и их reply_text как хотите, это просто для демонстрации. Здесь функция unknown_text будет отправлять сообщение, написанное внутри нее, всякий раз, когда она получает какие-либо неизвестные сообщения, а функция unknown отфильтрует все неизвестные команды, отправленные пользователем, и ответит на сообщение, написанное внутри нее.

Шаг 3: Добавление обработчиков для обработки наших сообщений и команд

  • Python3
updater.dispatcher.add_handler(CommandHandler('start', start)) updater.dispatcher.add_handler(CommandHandler('youtube', youtube_url)) updater.dispatcher.add_handler(CommandHandler('help', help)) updater.dispatcher.add_handler(CommandHandler('linkedin', linkedIn_url)) updater.dispatcher.add_handler(CommandHandler('gmail', gmail_url)) updater.dispatcher.add_handler(CommandHandler('geeks', geeks_url)) updater.dispatcher.add_handler(MessageHandler(Filters.text, unknown)) updater.dispatcher.add_handler(MessageHandler(     # Filters out unknown commands     Filters.command, unknown))  # Filters out unknown messages. updater.dispatcher.add_handler(MessageHandler(Filters.text, unknown_text))

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

Шаг 4: Запуск бота

  • Python3
updater.start_polling()

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

Ниже приведена полная реализация:

  • Python3
fromtelegram.ext.updater importUpdater fromtelegram.update importUpdate fromtelegram.ext.callbackcontext importCallbackContext fromtelegram.ext.commandhandler importCommandHandler fromtelegram.ext.messagehandler importMessageHandler fromtelegram.ext.filters importFilters  updater =Updater("your_own_API_Token got from BotFather",                   use_context=True)   defstart(update: Update, context: CallbackContext):     update.message.reply_text(         "Hello sir, Welcome to the Bot.Please write\         /helpto see the commands available.")  defhelp(update: Update, context: CallbackContext):     update.message.reply_text("""Available Commands :-     /youtube - To get the youtube URL     /linkedin - To get the LinkedIn profile URL     /gmail - To get gmail URL     /geeks - To get the GeeksforGeeks URL""")   defgmail_url(update: Update, context: CallbackContext):     update.message.reply_text(         "Your gmail link here (I am not\         giving mine one forsecurity reasons)")   defyoutube_url(update: Update, context: CallbackContext):     update.message.reply_text("Youtube Link =>\     https://www.youtube.com/")   deflinkedIn_url(update: Update, context: CallbackContext):     update.message.reply_text(         "LinkedIn URL => \         https://www.linkedin.com/in/dwaipayan-bandyopadhyay-007a/")   defgeeks_url(update: Update, context: CallbackContext):     update.message.reply_text(         "GeeksforGeeks URL => https://www.geeksforgeeks.org/")   defunknown(update: Update, context: CallbackContext):     update.message.reply_text(         "Sorry '%s' is not a valid command"%update.message.text)   defunknown_text(update: Update, context: CallbackContext):     update.message.reply_text(         "Sorry I can't recognize you , you said '%s'"%update.message.text)   updater.dispatcher.add_handler(CommandHandler('start', start)) updater.dispatcher.add_handler(CommandHandler('youtube', youtube_url)) updater.dispatcher.add_handler(CommandHandler('help', help)) updater.dispatcher.add_handler(CommandHandler('linkedin', linkedIn_url)) updater.dispatcher.add_handler(CommandHandler('gmail', gmail_url)) updater.dispatcher.add_handler(CommandHandler('geeks', geeks_url)) updater.dispatcher.add_handler(MessageHandler(Filters.text, unknown)) updater.dispatcher.add_handler(MessageHandler(     Filters.command, unknown))  # Filters out unknown commands  # Filters out unknown messages. updater.dispatcher.add_handler(MessageHandler(Filters.text, unknown_text))  updater.start_polling()

Выпуск: