February 8, 2025
Aiogram3 - конспект
Конспект по библиотеке aiogram 3.x
1. Основная структура Telegram-бота
1. Инициализация бота и диспетчера:
from aiogram import Bot, Dispatcher bot = Bot(token="ВАШ_ТОКЕН") dp = Dispatcher()
• Обработчики — это функции, которые реагируют на события, такие как получение сообщений или команд.
import asyncio
async def main():
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())• Обработка команд (например, /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)Фильтры помогают задавать условия для обработки событий:
@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("Вы упомянули меня?")• Кастомные фильтры: Можно создавать свои фильтры для обработки специфических событий.
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)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)Callback — это реакция на действия пользователя (например, нажатие кнопки):
from aiogram.types import CallbackQuery
@dp.callback_query()
async def handle_callback(callback: CallbackQuery):
if callback.data == "button1":
await callback.message.answer("Вы нажали кнопку 1")Лучше хранить токен и другие параметры в отдельном файле config.py:
# config.py bot_token = "ВАШ_ТОКЕН"
from config import bot_token bot = Bot(token=bot_token)
Полная структура бота с учётом всех элементов:
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())