February 8, 2025

Aiogram3 - конспект

Конспект по библиотеке aiogram 3.x

1. Основная структура Telegram-бота

1. Инициализация бота и диспетчера:

from aiogram import Bot, Dispatcher
bot = Bot(token="ВАШ_ТОКЕН")
dp = Dispatcher()

2. Создание обработчиков:

• Обработчики — это функции, которые реагируют на события, такие как получение сообщений или команд.

3. Запуск бота:

import asyncio

async def main():
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

2. Обработчики событий

Обработка команд (например, /start):

from aiogram.types import Message
from aiogram.filters import Command

@dp.message(Command(commands=["start", "help"]))
async def handle_command(message: Message):
    await message.answer("Добро пожаловать!")

Обработка текста (например, определённых слов):

from aiogram.filters import Text

@dp.message(Text(equals="привет"))
async def handle_text(message: Message):
    await message.answer("Привет и тебе!")

Обработка любого сообщения:

@dp.message()
async def echo_message(message: Message):
    await message.answer(message.text)

3. Основные фильтры

Фильтры помогают задавать условия для обработки событий:

• Command: Фильтр для команд.

@dp.message(Command(commands=["start", "help"]))
async def start_command(message: Message):
    await message.answer("Это обработчик команды.")

• Text: Фильтр для текстовых сообщений.

@dp.message(Text(contains="бот"))
async def text_filter(message: Message):
    await message.answer("Вы упомянули меня?")

Кастомные фильтры: Можно создавать свои фильтры для обработки специфических событий.

4. Клавиатуры

Inline клавиатура:

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

@dp.message(Command(commands=["menu"]))
async def show_menu(message: Message):
    keyboard = InlineKeyboardMarkup(inline_keyboard=[
        [InlineKeyboardButton(text="Кнопка 1", callback_data="button1")],
        [InlineKeyboardButton(text="Кнопка 2", url="https://example.com")]
    ])
    await message.answer("Меню:", reply_markup=keyboard)

Reply клавиатура:

from aiogram.types import ReplyKeyboardMarkup, KeyboardButton

@dp.message(Command(commands=["start"]))
async def show_reply_keyboard(message: Message):
    keyboard = ReplyKeyboardMarkup(
        keyboard=[
            [KeyboardButton(text="Кнопка 1")],
            [KeyboardButton(text="Кнопка 2")],
        ],
        resize_keyboard=True
    )
    await message.answer("Выберите:", reply_markup=keyboard)

5. Работа с callback’ами

Callback — это реакция на действия пользователя (например, нажатие кнопки):

from aiogram.types import CallbackQuery

@dp.callback_query()
async def handle_callback(callback: CallbackQuery):
    if callback.data == "button1":
        await callback.message.answer("Вы нажали кнопку 1")

6. Хранение конфигурации

Лучше хранить токен и другие параметры в отдельном файле config.py:

# config.py
bot_token = "ВАШ_ТОКЕН"

Импортировать токен:

from config import bot_token
bot = Bot(token=bot_token)

7. Запуск бота

Полная структура бота с учётом всех элементов:

import asyncio
from aiogram import Bot, Dispatcher
from aiogram.types import Message
from aiogram.filters import Command

bot = Bot(token="ВАШ_ТОКЕН")
dp = Dispatcher()

@dp.message(Command(commands=["start"]))
async def start_command(message: Message):
    await message.answer("Привет! Это бот на aiogram 3.x")

async def main():
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

8. Полезные ссылки

Документация aiogram 3.x

Руководство по миграции с 2.x на 3.x

Если что-то непонятно, пиши, разберём! 😊