TeleBot и aiogram: Руководство по созданию Telegram-бота на Python Урок 1

В мире разработки Telegram-ботов на языке Python существуют две популярные библиотеки: telebot и aiogram. В этой статье мы рассмотрим, как создать Telegram-бота с использованием aiogram, подробно разберем код и рассмотрим важные аспекты разработки.

Установка необходимых библиотек

Для начала, необходимо установить библиотеку aiogram. Это можно сделать с помощью pip:

pip install aiogram

Создание бота в Telegram и получение токена

Создать бота в Telegram можно через BotFather. Процесс следующий:

  1. Найдите BotFather в Telegram.
  2. Отправьте команду /start, затем /newbot.
  3. Укажите имя и @username бота.
  4. Получите токен 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.

+1
1
+1
2
+1
0
+1
0
+1
2

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *