Сравниваем python-telegram-bot и aiogram
Основная разница библиотек python-telegram-bot и aiogram 3.0
Python-telegram-bot и Aiogram 3.0 — это две среды разработки ботов для мессенджера Telegram, выполненные на Python. И хотя оба инструмента предназначены для одной цели, они все же имеют свои отличия. Рассмотрим разницу между Python-telegram-bot и Aiogram, их плюсы и минусы.
Python-telegram-bot — это библиотека на Python для создания Telegram ботов, которая облегчает создание и управление ботами в Telegram. Она имеет простой интерфейс и множество функций. Python-telegram-bot отлично подходит для начинающих разработчиков, которые хотят быстро создать простого бота с основными функциями. Однако библиотека имеет ограниченные возможности для создания продвинутых функций, таких как сценарии и состояния, а также поддержку inline-режима.
Aiogram, с другой стороны, предоставляет разработчикам более продвинутые функции, благодаря которым можно создать более сложные боты. Aiogram имеет богатый функционал для создания более динамичных ботов, включая сценарии и состояния, дополнительную обработку inline-запросов и кнопочные меню. Aiogram также имеет большой и активный сообщества разработчиков, которые могут помочь с любыми вопросами.
Однако недостатком Aiogram является то, что он более сложен в использовании, и разработчику, возможно, понадобится больше времени, чтобы разобраться в его работе. Также Aiogram является более требовательным к использованию асинхронного программирования, чем Python-telegram-bot.
Таким образом, выбор между Python-telegram-bot и Aiogram зависит от конкретных потребностей и компетенций разработчика. Если вам нужен быстрый и простой способ создания базового бота, Python-telegram-bot может стать подходящим выбором. Если вы ищете более продвинутые функции и хотите создать более сложного бота, Aiogram может стать более приоритетным инструментом. Но в любом случае, оба инструмента являются отличными средствами для создания ботов для Telegram.
Простая структура меню для chat-bot
Для чистоты эксперимента, в пример возьмем пустую структуру меню состоящую из 3х пунктов и в каждый добавим 3 пункта подменю:
1. Первый
2. Второй
3. Третий
В каждом из них подменю из 3 пунктов:
1. ПодПервый
2. ПодВторой
3. ПодТретий
И добавим 2 команды:
start
help
Пример пустого скелета чат-бота на python-telegram-bot
Для создания чатбота с помощью python-telegram-bot и кнопками необходимо сначала установить библиотеку python-telegram-bot с помощью команды “pip install python-telegram-bot”. Затем нужно создать файл bot.py и написать в нем следующий код:
# Функция для начала работы с ботом def start(update, context): # Создаем список кнопок главного меню keyboard = [ [InlineKeyboardButton("Первый", callback_data='menu_1')], [InlineKeyboardButton("Второй", callback_data='menu_2')], [InlineKeyboardButton("Третий", callback_data='menu_3')] ] # Создаем разметку с кнопками reply_markup = InlineKeyboardMarkup(keyboard) # Отправляем сообщение с кнопками update.message.reply_text('Выберите один из пунктов меню:', reply_markup=reply_markup) # Функция для обработки нажатий на кнопки def button(update, context): # Получаем id кнопки query = update.callback_query menu_id = query.data # В зависимости от нажатой кнопки показываем соответствующее подменю if menu_id == 'menu_1': keyboard = [ [InlineKeyboardButton("ПодПервый", callback_data='submenu_1_1')], [InlineKeyboardButton("ПодВторой", callback_data='submenu_1_2')], [InlineKeyboardButton("ПодТретий", callback_data='submenu_1_3')] ] elif menu_id == 'menu_2': keyboard = [ [InlineKeyboardButton("ПодПервый", callback_data='submenu_2_1')], [InlineKeyboardButton("ПодВторой", callback_data='submenu_2_2')], [InlineKeyboardButton("ПодТретий", callback_data='submenu_2_3')] ] elif menu_id == 'menu_3': keyboard = [ [InlineKeyboardButton("ПодПервый", callback_data='submenu_3_1')], [InlineKeyboardButton("ПодВторой", callback_data='submenu_3_2')], [InlineKeyboardButton("ПодТретий", callback_data='submenu_3_3')] ] else: # Если пользователя отвлекли от главного меню, то просто возвращаем ему главное меню keyboard = [ [InlineKeyboardButton("Первый", callback_data='menu_1')], [InlineKeyboardButton("Второй", callback_data='menu_2')], [InlineKeyboardButton("Третий", callback_data='menu_3')] ] # Создаем разметку с кнопками подменю reply_markup = InlineKeyboardMarkup(keyboard) # Редактируем сообщение с главным меню и заменяем его на подменю query.edit_message_text(text='Выберите один из пунктов:', reply_markup=reply_markup) # Функция для отображения справки def help(update, context): update.message.reply_text("Привет! Это тестовый чат-бот с главным меню из трех пунктов. Выбери один из них и подпункты.") # Основная функция бота def main(): # Создаем объект updater и передаем ему токен нашего бота updater = Updater("TOKEN", use_context=True) # Создаём обработчик команды start и привязываем его к функции start updater.dispatcher.add_handler(CommandHandler('start', start)) # Создаём обработчик команды help и привязываем его к функции help updater.dispatcher.add_handler(CommandHandler('help', help)) # Создаём обработчик нажатий на кнопки и привязываем его к функции button updater.dispatcher.add_handler(CallbackQueryHandler(button)) # Запускаем бота updater.start_polling() # Останавливаем бота, если было получено Ctrl+C updater.idle() if __name__ == '__main__': main()
Вышеописанный код создает простейший чатбот, который умеет показывать главное меню из трех пунктов и подменю из трех пунктов для каждого из них. Также бот отображает справку при обращении к нему по команде /help. На кнопках отображаются значки вместо текста, но это легко изменить и настроить под нужды своего бота.
Пример пустого скелета чат-бота на aiogram
Для создания чатбота с помощью aiogram и кнопками необходимо сначала установить библиотеку aiogram с помощью команды “pip install aiogram”. Затем нужно создать файл bot.py и написать в нем следующий код:
from aiogram import Bot, Dispatcher, types from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton from aiogram.utils import executor # создаем бота bot = Bot(token="TOKEN") # создаем диспетчер для бота dp = Dispatcher(bot) # Функция для начала работы с ботом @dp.message_handler(commands=['start']) async def start(message: types.Message): # Создаем список кнопок главного меню keyboard = ReplyKeyboardMarkup(resize_keyboard=True) button_1 = KeyboardButton(text="Первый") button_2 = KeyboardButton(text="Второй") button_3 = KeyboardButton(text="Третий") keyboard.add(button_1, button_2, button_3) # Отправляем сообщение с кнопками await message.answer(text="Выберите один из пунктов меню:", reply_markup=keyboard) # Функция для обработки нажатий на кнопки главного меню @dp.message_handler(content_types=['text']) async def menu(message: types.Message): if message.text == 'Первый': # Создаем список кнопок подменю для первого пункта keyboard = InlineKeyboardMarkup() button_1 = InlineKeyboardButton(text="ПодПервый", callback_data='menu_1_1') button_2 = InlineKeyboardButton(text="ПодВторой", callback_data='menu_1_2') button_3 = InlineKeyboardButton(text="ПодТретий", callback_data='menu_1_3') keyboard.add(button_1, button_2, button_3) # Отправляем соответствующее подменю await bot.send_message(chat_id=message.chat.id, text='Вы выбрали первый пункт меню. Выберите один из пунктов:', reply_markup=keyboard) elif message.text == 'Второй': # Создаем список кнопок подменю для второго пункта keyboard = InlineKeyboardMarkup() button_1 = InlineKeyboardButton(text="ПодПервый", callback_data='menu_2_1') button_2 = InlineKeyboardButton(text="ПодВторой", callback_data='menu_2_2') button_3 = InlineKeyboardButton(text="ПодТретий", callback_data='menu_2_3') keyboard.add(button_1, button_2, button_3) # Отправляем соответствующее подменю await bot.send_message(chat_id=message.chat.id, text='Вы выбрали второй пункт меню. Выберите один из пунктов:', reply_markup=keyboard) elif message.text == 'Третий': # Создаем список кнопок подменю для третьего пункта keyboard = InlineKeyboardMarkup() button_1 = InlineKeyboardButton(text="ПодПервый", callback_data='menu_3_1') button_2 = InlineKeyboardButton(text="ПодВторой", callback_data='menu_3_2') button_3 = InlineKeyboardButton(text="ПодТретий", callback_data='menu_3_3') keyboard.add(button_1, button_2, button_3) # Отправляем соответствующее подменю await bot.send_message(chat_id=message.chat.id, text='Вы выбрали туретий пункт меню. Выберите один из пунктов:', reply_markup=keyboard) # Функция для обработки нажатий на кнопки подменю @dp.callback_query_handler(lambda c: c) async def submenu(callback_query: types.CallbackQuery): submenu_id = callback_query.data if submenu_id == 'menu_1_1': await bot.send_message(chat_id=callback_query.message.chat.id, text='Вы выбрали подпункт ПодПервый') elif submenu_id == 'menu_1_2': await bot.send_message(chat_id=callback_query.message.chat.id, text='Вы выбрали подпункт ПодВторой') elif submenu_id == 'menu_1_3': await bot.send_message(chat_id=callback_query.message.chat.id, text='Вы выбрали подпункт ПодТретий') elif submenu_id == 'menu_2_1': await bot.send_message(chat_id=callback_query.message.chat.id, text='Вы выбрали подпункт ПодПервый') elif submenu_id == 'menu_2_2': await bot.send_message(chat_id=callback_query.message.chat.id, text='Вы выбрали подпункт ПодВторой') elif submenu_id == 'menu_2_3': await bot.send_message(chat_id=callback_query.message.chat.id, text='Вы выбрали подпункт ПодТретий') elif submenu_id == 'menu_3_1': await bot.send_message(chat_id=callback_query.message.chat.id, text='Вы выбрали подпункт ПодПервый') elif submenu_id == 'menu_3_2': await bot.send_message(chat_id=callback_query.message.chat.id, text='Вы выбрали подпункт ПодВторой') elif submenu_id == 'menu_3_3': await bot.send_message(chat_id=callback_query.message.chat.id, text='Вы выбрали подпункт ПодТретий') # Функция для отображения справки @dp.message_handler(commands=['help']) async def menu(message: types.Message): await message.answer("Привет! Это тестовый чат-бот с главным меню из трех пунктов. Выбери один из них и подпункты.") # Основная функция бота if __name__ == "__main__": executor.start_polling(dp, skip_updates=True)
Вышеописанный код создает простейший чатбот, который умеет показывать главное меню из трех пунктов и подменю из трех пунктов для каждого из них. Также бот отображает справку при обращении к нему по команде /help.
Итог
Рассмотрев код выше можно сделать следующий вывод:
разработать chat-bot с одинаковыми и самыми простыми функциями, код в Python-telegram-bot получается более компактным и простым, соответственно код с помощью Aiogram, получается более сложным. Поэтому выбирайте прежде всего, ту библиотеку, которая больше всего подходит под ваши задачи.