В этой статье мы рассмотрим, как создать телеграм-бота с помощью 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
from telegram.ext.updater import Updater from telegram.update import Update from telegram.ext.callbackcontext import CallbackContext from telegram.ext.commandhandler import CommandHandler from telegram.ext.messagehandler import MessageHandler from telegram.ext.filters import Filters |
Краткое описание импортируемых нами функций:
- Обновления: Он будет содержать ключ API, который мы получили от BotFather, чтобы указать, в какого боте мы добавляем функционал с помощью нашего кода на Python.
- Обновлять: Это будет вызываться каждый раз, когда бот получает обновление, т.е. сообщение или команду, и отправляет сообщение пользователю.
- Контекст обратного вызова: Мы не будем использовать его функционал непосредственно в нашем коде, но когда мы будем добавлять диспетчера, он необходим (и он будет работать внутренне)
- Обработчик команды: Этот класс Handler используется для обработки любой команды, отправленной пользователем боту, команда всегда начинается с «/», т.е. «/start»,»/help» и т.д.
- Обработчик сообщений: Этот класс Handler используется для обработки любого обычного сообщения, отправляемого пользователем боту,
- Фильтры: Это отфильтрует обычный текст, команды, изображения и т.д. из отправленного сообщения.
Шаг 2: Определите функции для работы
Функция запуска: Он отобразит первый разговор, вы можете назвать его как-то иначе, но сообщение внутри него будет отправлено пользователю всякий раз, когда он нажимает «начать» в самом начале.
- Python3
updater = Updater( "your_own_API_Token got from BotFather" , use_context = True ) def start(update: Update, context: CallbackContext): update.message.reply_text( "Enter the text you want to show to the user whenever they start the bot" ) |
В основном, в стартовом сообщении вы должны добавить что-то вроде «Здравствуйте, добро пожаловать в бот» и т.д.
Функция помощи: Именно в эту функцию вы должны добавить любую помощь, которая может понадобиться пользователю, т.е. все команды, которые понимает ваш бот, информацию, относящуюся к боту и т.д.)
- Python3
def help (update: Update, context: CallbackContext): update.message.reply_text( "Your Message" ) |
Добавляем еще несколько функционалов в бота.
- Python3
def gmail_url(update: Update, context: CallbackContext): update.message.reply_text( "gmail link here" ) def youtube_url(update: Update, context: CallbackContext): update.message.reply_text( "youtube link" ) def linkedIn_url(update: Update, context: CallbackContext): update.message.reply_text( "Your linkedin profile url" ) def geeks_url(update: Update, context: CallbackContext): update.message.reply_text( "GeeksforGeeks url here" ) def unknown_text(update: Update, context: CallbackContext): update.message.reply_text( "Sorry I can't recognize you , you said '%s'" % update.message.text) def unknown(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
from telegram.ext.updater import Updater from telegram.update import Update from telegram.ext.callbackcontext import CallbackContext from telegram.ext.commandhandler import CommandHandler from telegram.ext.messagehandler import MessageHandler from telegram.ext.filters import Filters updater = Updater( "your_own_API_Token got from BotFather" , use_context = True ) def start(update: Update, context: CallbackContext): update.message.reply_text( "Hello sir, Welcome to the Bot.Please write\ / help to see the commands available.") def help (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""" ) def gmail_url(update: Update, context: CallbackContext): update.message.reply_text( "Your gmail link here (I am not \ giving mine one for security reasons)") def youtube_url(update: Update, context: CallbackContext): update.message.reply_text("Youtube Link = >\ https: / / www.youtube.com / ") def linkedIn_url(update: Update, context: CallbackContext): update.message.reply_text( "LinkedIn URL = > \ https: / / www.linkedin.com / in / dwaipayan - bandyopadhyay - 007a / ") def geeks_url(update: Update, context: CallbackContext): update.message.reply_text( "GeeksforGeeks URL => https://www.geeksforgeeks.org/" ) def unknown(update: Update, context: CallbackContext): update.message.reply_text( "Sorry '%s' is not a valid command" % update.message.text) def unknown_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() |
Выпуск: