TeleBot и aiogram: Руководство по созданию Telegram-бота на Python Урок 1
В мире разработки Telegram-ботов на языке Python существуют две популярные библиотеки: telebot
и aiogram
. В этой статье мы рассмотрим, как создать Telegram-бота с использованием aiogram
, подробно разберем код и рассмотрим важные аспекты разработки.
Установка необходимых библиотек
Для начала, необходимо установить библиотеку aiogram
. Это можно сделать с помощью pip
:
pip install aiogram
Создание бота в Telegram и получение токена
Создать бота в Telegram можно через BotFather. Процесс следующий:
- Найдите BotFather в Telegram.
- Отправьте команду
/start
, затем/newbot
. - Укажите имя и @username бота.
- Получите токен API.
Токен понадобится для взаимодействия с Telegram API через aiogram
.
Создание базового кода для бота
После установки необходимых библиотек и получения токена, создадим базовый скелет бота.
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
API_TOKEN = 'Ваш токен здесь'
# Инициализация бота и диспетчера
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__':
executor.start_polling(dp, skip_updates=True)
Обработка команд и сообщений
Для обработки команд и сообщений используются декораторы.
Обработка команды /help
:
@dp.message_handler(commands=['help'])
async def send_help(message: types.Message):
await message.reply("Я могу выполнять следующие команды:n/start - Приветствиеn/help - Помощь")
Обработка текстовых сообщений:
@dp.message_handler()
async def echo_message(message: types.Message):
await message.reply(message.text)
Работа с кнопками и inline-клавиатурами
Для создания кнопок можно использовать ReplyKeyboardMarkup
и InlineKeyboardMarkup
.
Пример создания обычной клавиатуры:
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
button_hi = KeyboardButton('Привет')
greet_kb = ReplyKeyboardMarkup(resize_keyboard=True).add(button_hi)
@dp.message_handler(commands=['keyboard'])
async def keyboard_command(message: types.Message):
await message.answer("Вот ваша клавиатура", reply_markup=greet_kb)
Пример создания inline-клавиатуры:
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
inline_btn = InlineKeyboardButton('Нажми меня', callback_data='button_pressed')
inline_kb = InlineKeyboardMarkup().add(inline_btn)
@dp.message_handler(commands=['inline'])
async def inline_kb_command(message: types.Message):
await message.answer("Вот ваша inline-клавиатура", reply_markup=inline_kb)
@dp.callback_query_handler(lambda c: c.data == 'button_pressed')
async def process_callback(callback_query: types.CallbackQuery):
await bot.answer_callback_query(callback_query.id, "Кнопка нажата!")
Работа с состояниями (FSM)
aiogram
поддерживает работу с конечными автоматами состояний (FSM).
Пример простого FSM:
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
class Form(StatesGroup):
name = State()
age = State()
@dp.message_handler(commands='form')
async def cmd_start(message: types.Message):
await Form.name.set()
await message.answer("Как ваше имя?")
@dp.message_handler(state=Form.name)
async def process_name(message: types.Message, state: FSMContext):
await state.update_data(name=message.text)
await Form.next()
await message.reply("Сколько вам лет?")
@dp.message_handler(state=Form.age)
async def process_age(message: types.Message, state: FSMContext):
await state.update_data(age=message.text)
user_data = await state.get_data()
await message.reply(f"Ваше имя: {user_data['name']}nВаш возраст: {user_data['age']}")
await state.finish()
Обработка ошибок и логирование
Для обработки ошибок можно использовать декоратор errors_handler
.
Пример обработки ошибок:
import logging
from aiogram.utils.exceptions import Throttled
logging.basicConfig(level=logging.INFO)
@dp.errors_handler(exception=Throttled)
async def throttled_error_handler(update, error):
logging.warning(f"Слишком много запросов:n{error}")
return True
Включение логирования помогает отслеживать ошибки и события, что важно для отладки и мониторинга работы бота.
Теперь вы знаете, как установить необходимые библиотеки, создать базовый код бота, обработать команды и сообщения, работать с кнопками, внедрить FSM и обрабатывать ошибки. Это руководство предоставляет основу для дальнейших улучшений и добавления функциональности вашему Telegram-боту на Python с использованием aiogram
.