Простой Telegram бот

Поздравляем, уважаемые разработчики и энтузиасты! Сегодня мы погрузимся в увлекательный мир программирования, создав простого Telegram-бота. Этот проект не только интересен, но очень полезен для понимания работы Python с различными библиотеками.

 

Подготовка к работе

Создадим новый проект в нашей IDE:

 

Прежде чем мы начнем кодировать, нам нужно подготовить нашу рабочую среду. Вот что нам понадобится:

  • Python 3.7 или новее

  • Библиотека python-telegram-bot

  • Токен для Telegram-бота

Установим необходимые библиотеки, я думаю вы это уже умеете, мы это изучали в следующей лекции - "Виртуальное окружение venv, его создание и использование". В терминале выполним следующую команду:

pip install python-telegram-bot

В результате получим подобный ответ:
 

На этом подготовка закончена, далее нам нужно создать бота и получить токен, для подключения к нашему боту

 

 

 

Получение токена для создания Telegram бота

Чтобы создать новый бот в Telegram, нам нужно обратиться к BotFather:

  1. Откройте телеграмм и найдите @BotFather. 

  2. После начала чата с BotFather используйте /newbot команду для запуска процесса создания. Вам будет предложено назвать вашего бота. Давайте назовем нашего PyHub Bot для этого руководства. Помните, имя пользователя вашего бота должно заканчиваться на bot, например, pyhub_python_bot.

    Если выбранное вами имя пользователя занято, попробуйте разные варианты, пока не найдете доступное

  3. После успешного создания бота BotFather предоставит вам токен доступа. Этот токен имеет решающее значение для подключения вашего бота к вашему скрипту Python.

 

Настройка проекта и импорт зависимостей

Создадим новый Python файл, например my_bot.py, и импортируем необходимые библиотеки:

from telegram import Update
from telegram.ext import ApplicationBuilder, ContextTypes, CommandHandler

 

Создание обработчиков команд

Определите асинхронные функции для команд вашего бота.

Например, для обработки /start команды, как первого взаимодействия пользователя с ботом, создайте следующую функцию:

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await context.bot.send_message(chat_id=update.effective_chat.id, text="Я бот, пожалуйста, поговори со мной!")

Для начала наша цель — установить /start команду для нашего бота. Учитывая обновления в API, крайне важно, чтобы мы использовали асинхронное программирование. Таким образом, мы добавим к нашему определению функции префикс , async чтобы указать на ее асинхронную природу. Функция будет называться start.

В этой функции нам необходимо включить параметры как для update, тип Update, так и context для , тип ContextTypes.DEFAULT_TYPE.

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

Затем мы обратимся к send_message методу context.bot, чтобы отправить ответ пользователю.

Текст, передаваемый в send_message метод, должен представлять собой сообщение, которое бот должен доставить сразу после того, как пользователь начнет с ним взаимодействовать, нажав кнопку «Старт» в пользовательском интерфейсе Telegram или введя /start команду.

Например, бот может поприветствовать пользователя сообщением вроде «Я бот, пожалуйста, поговори со мной!». Это задает приветственный тон для взаимодействия с самого начала.

 

Обработка сообщений

Нашим следующим шагом станет создание функции, отвечающей за обработку входящих сообщений и гарантирующей, что ответ бота будет соответствовать контексту взаимодействия. Добавим ниже следующий код:

if __name__ == '__main__':
    application = ApplicationBuilder().token('Ваш токен').build()

    start_handler = CommandHandler('start', start)
    application.add_handler(start_handler)

    application.run_polling()

Давайте разберем этот код подробнее:

if __name__ == '__main__':

Чтобы объединить все компоненты нашего бота, мы начнем с условного оператора, который проверяет, является ли скрипт основной точкой входа приложения.

Это делается путем проверки, __name__равно ли '__main__'. Внутри этого блока мы инициируем сборку функционала нашего бота.

application = ApplicationBuilder().token('Ваш токен').build()

Сначала мы создаем экземпляр нашего бота, назначая его переменной application и ApplicationBuilder(), передавая ему наш токен аутентификации, а затем вызывая .build() метод. Это закладывает основу для работы нашего бота.

start_handler = CommandHandler('start', start)

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

application.add_handler(start_handler)

После обработчиков команд мы вводим обработчик сообщений для обработки текстовых сообщений. Это достигается с помощью метода application.add_handler()  для нашей start_handler функции.

application.run_polling()

Последний шаг в нашей настройке включает в себя инициирование опроса, который непрерывно проверяет наличие новых сообщений или команд, требующих обработки. Это настраивается через application.run_polling(), где мы можем опционально указать интервал опроса, чтобы контролировать, как часто бот проверяет наличие обновлений. Например мы можем установить этот интервал в пять секунд.

application.run_polling(poll_interval=5)

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

 

Итоговый код у вас должен выглядеть следующим образом:

from telegram import Update
from telegram.ext import ApplicationBuilder, ContextTypes, CommandHandler


async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await context.bot.send_message(chat_id=update.effective_chat.id, text="Я бот, пожалуйста, поговори со мной!")


if __name__ == '__main__':
    application = ApplicationBuilder().token('Ваш токен').build()

    start_handler = CommandHandler('start', start)
    application.add_handler(start_handler)

    application.run_polling()

 

 

Проверка работы

Запустим наш скрипт, и проверим работу:

Как мы видим, наш скрипт Python Telegram бота работает.

 

Итоги работы

Вы создали базовый бот Telegram, способный реагировать на определенные команды и сообщения. В этом руководстве рассматриваются основные этапы — от настройки бота с помощью BotFather до написания его функционала на Python.

Помните, библиотека Python Telegram Bot универсальна и позволяет создавать гораздо более сложные боты с индивидуальным поведением и взаимодействиями. Создание такого бота – это отличный способ изучить работу с Python, асинхронное программирование.  

Добавлено: 9 октября 2024 г. 5:04, всего 67 просмотров.