Начнем с того, что библиотек для разработки телегам-ботов на Python несколько, я упомяну основные три. В первой части статьи будет небольшой обзор этих библиотек (примеры кода тут будут для красоты, не пугайтесь, ниже будет пошаговый Гайд по одной конкретной библиотеке), потом комментарий о том, какую стоит выбрать для разработки конкретно своего бота и подробное руководство для новичков по разработке бота с разбором каждой строчки кода.
Интернет считает, что одной из самых распространенных и простых библиотек является python-telegram-bot (хотя я отдаю предпочтение следующим двум).
python-telegram-bot:
- Официальная библиотека от Telegram для разработки ботов на Python.
- Предоставляет простой и удобный интерфейс для работы с Telegram API.
- Поддерживает обработку команд, обновлений, отправку сообщений и многое другое.
- Содержит детализированную документацию и активное сообщество на GitHub.
Установка:
pip install python-telegram-bot
Пример использования:
from telegram import Update
from telegram.ext import Updater, CommandHandler, CallbackContext
def start(update: Update, context: CallbackContext) -> None:
update.message.reply_text("Здорова, брат! Я бот. Как сам?")
updater = Updater('YOUR_TOKEN')
dp = updater.dispatcher. dp.add_handler(CommandHandler('start', start))
updater.start_polling()
updater.idle()
aiogram:
Асинхронная библиотека для работы с Telegram API.
Предоставляет удобный интерфейс для работы с обновлениями, сообщениями, командами и другими элементами бота.
Поддерживает интеграцию с базами данных, веб-сервисами и другими внешними ресурсами
Установка:
pip install aiogram
Пример использования:
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.types import ParseMode
API_TOKEN = 'YOUR_TOKEN'
logging.basicConfig(level=logging.INFO)
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
await message.reply("Здорова, брат! Я бот. Как сам?")
if __name__ == '__main__':
from aiogram import executor
executor.start_polling(dp,)
aiogram позволяет создавать крутых, многофункциональных коммерческих ботов, но до нее еще нужно дорасти. Вы уже должны отлично владеть навыками написания кода (что-то большее, чем решение задачек на степике) и понимать, что такое асинхронность (что знают даже не все Junior разработчики). Для начала пути в разработке ботов эта библиотека подойдет только разработчикам с опытом.
pyTelegramBotAPI:
Простая библиотека для работы с Telegram Bot API.
Предоставляет удобные функции для отправки сообщений, обработки команд и других событий.
Легко использовать и поддерживать.
Установка:
pip install pyTelegramBotAPI
Пример использования:
import telebot
bot = telebot.TeleBot('YOUR_TOKEN')
@bot.message_handler(commands=['start'])
def handle_start(message):
bot.send_message(message.chat.id, "Здорова, брат! Я бот. Как сам?")
bot.polling(none_stop=True)
Выше вы видите три примера кода, выполняющие одну и туже задачу, но с использованием разных библиотек. Чисто визуально уже можно заметить, что последний код выглядит гораздо проще и это правда. Для старта в разработке и создании простых ботов, и я имею ввиду не просто Привет-Пока, с большой вероятностью если вы разрабатываете бота для себя или даже для своего блога, бизнеса или курсов и он не будет включать в себя авторизацию, функции обработки платежей, работы с огромными базами данных и тысячи пользователей - этой библиотеки вам хватит.
Более того, по опыту мне кажется, именно про эту библиотеку написано больше всего статей, гайдов и видео на ютубе - что для начала изучения самое то.
Туториал по библиотека TeleBot
Шаг 1: Установка библиотеки Telebot
Установите библиотеку Telebot с помощью pip, выполнив команду в командной строке или терминале (ее нужно выполнить только один раз, а не при каждом запуске бота):
pip install pyTelegramBotAPI
Шаг 2: Получите токен доступа для вашего бота
Откройте приложение Telegram и найдите @BotFather - официального бота для создания новых ботов.
Создайте нового бота, следуя инструкциям BotFather.
Получите токен доступа для вашего бота.
Обратите внимание, что в начале последнего сообщения вам еще выдали ссылку на ваш бот - не потеряйте ее.
Шаг 3: Импорт и настройка библиотеки Telebot
Импортируйте библиотеку Telebot в свой код:
import telebot
Создайте объект бота, используя полученный токен:
Вместо 'YOUR_TOKEN' вставляем токен, полученный от BotFather. Так мы свяжем бота, созданного в телеграм с ботом, код которого мы пишем.
bot = telebot.TeleBot('YOUR_TOKEN')
Шаг 4: Создание обработчиков команд и сообщений
Определите функцию-обработчик bot.message_handler для команд и сообщений, которые бот будет получать и обрабатывать (по сути, добавив эту строчку кода над како-либо функцией, мы говорим, что это не просто функция - а специальная функция, которая будет срабатывать когда бот получит какую-то команду, сообщение, стикер, фотографию и тд).
Сейчас мы указали, что данный обработчик будет обрабатывать команду \start (написали в скобках commands = ['start'])и далее описали функцию, которая будет срабатывать при отправке этой команды боту. Наш бот ответит пользователю в чате 'привет-привет! Напиши что-нибудь'.
@bot.message_handler(commands = ['start'])
def start(message):
bot.send_message(message.chat.id, 'привет-привет! Напиши что-нибудь')
bot.send_message - функция отправки ботом сообщения в чат. А вот в какой чат? Нам нужно отправить в тот же, откуда пришло сообщение от пользователя - для этого мы в скобках первым параметром указываем message.chat.id, по сути передаем айди нужного нам чата. А дальше указываем строку-сообщение, которое отправит бот.
Шаг 5: Запуск бота
Запустите бота, чтобы он начал прослушивать события и реагировать на них:
bot.polling()
Соберем весь код в один и запустим.
import telebot
bot = telebot.TeleBot('')
@bot.message_handler(commands = ['start'])
def start(message):
print(message)
bot.send_message(message.chat.id, 'привет-привет! Напиши что-нибудь')
bot.polling(none_stop = True)
Пока код запущен, отправим нашему боту сообщение в Телеграмм - команду /start
Визуально мы увидим вот такую картину
Создадим эхо-бота
Определите функции-обработчики для команд и сообщений, которые бот будет получать и обрабатывать:
@bot.message_handler(commands=['start','help'])
def handle_start(message):
bot.reply_to(message, 'Привет! Я бот.')
@bot.message_handler(func=lambda message: True)
def handle_message(message):
bot.reply_to(message, 'Получено сообщение: ' + message.text)
Первому обработчику мы указали, что он будет обрабатывать команды, конкретно две - то есть функция handle_start, написанная ниже, будет срабатывать и на команду start и на команду help
commands=['start','help']
Во втором обработчике написана страшная строчка message_handler(func=lambda message: True) - она взята из документации и вы часто будете ее видеть.
Если разбирать сложно и подробно: эта строка кода представляет собой использование лямбда-функции для определения, должно ли обработаться входящее текстовое сообщение в телеграм-боте. В данном случае, поскольку лямбда всегда возвращает True, это означает, что все входящие текстовые сообщения будут обрабатываться функцией, к которой применяется эта лямбда.
Если разбирать просто и коротко: ставим эту строчку кода, когда хотим обрабатывать все текстовые сообщения от пользователей, ибо так гласит документация.
bot.reply_to - бот отправляет ответное сообщение на то, что пришло (это когда вы в телеграм тыкаете на сообщение и нажимаете кнопку "ответить" на него). Так как бот отвечает на конкретное сообщение, то мы передаем в скобках не айди чата, а по сути просто то сообщение, на которое нужно ответить и что нужно ответить.
message - аргументом каждой функции (в скобках после названия функции) мы видим message - по сути, это принятое от пользователя сообщение, которое мы функции передаем и она уже может делать с ним все, что хочет - достать текст сообщения (message.text), узнать айди чата (message.chat.id) и еще множество параметров: имя и ник пользователя, время, язык и тд. Сообщения, которые мы отправляем боту, несут не только ту информацию, что мы видим, а ОГРОМНОЕ количество данных о нас.