• Home
  • Aiogram
  • Создание первого телеграм-бота на aiogram 3: шаблон для продвинутых проектов

Создание первого телеграм-бота на aiogram 3: шаблон для продвинутых проектов

Image

В этом видеоуроке мы создадим первого телеграм-бота на aiogram 3 и научим его отвечать на сообщения пользователей. Более того, мы разработаем шаблон-болванку для будущих ботов, чтобы упростить создание новых проектов в будущем.

Мы также познакомимся с концепцией хэндлеров — функций, которые обрабатывают различные типы апдейтов, отправленных сервером телеграм.

Вы научитесь создавать и регистрировать хэндлеры для разных типов апдейтов, таких как текстовые сообщения, команды. Научимся отвечать на сообщения с цитированием.

После просмотра этого видео вы получите необходимые знания и навыки для создания своего первого телеграм-бота на aiogram 3 и будете готовы к созданию более сложных и продвинутых проектов.

handlers/basic.py

from aiogram import Bot
from aiogram.types import Message


async def get_start(message: Message, bot: Bot):
    await bot.send_message(message.from_user.id, f'<b>Привет {message.from_user.first_name}. Рад тебя видеть.</b>')
    await message.answer(f'<s>Привет {message.from_user.first_name}. Рад тебя видеть.</s>')
    await message.reply(f'<tg-spoiler>Привет {message.from_user.first_name}. Рад тебя видеть.</tg-spoiler>')

utils/settings.py

from dataclasses import dataclass
from environs import Env


@dataclass()
class Bots:
    bot_token: str
    admin_id: str


@dataclass()
class Settings:
    bots: Bots


def get_settings(path: str):
    env = Env()
    env.read_env(path)

    return Settings(
        bots=Bots(
            bot_token=env.str("BOT_TOKEN"),
            admin_id=env.str("ADMIN_ID"),
        )
    )


settings = get_settings('input')

aiogram_learn.py

from aiogram import Bot, Dispatcher
import asyncio
from aiogram.types import Message
import logging

from core.handlers.basic import get_start
from core.settings import settings


async def start_bot(bot: Bot):
    await bot.send_message(settings.bots.admin_id, text="Бот запущен!")


async def stop_bot(bot: Bot):
    await bot.send_message(settings.bots.admin_id, text="Бот выключен!")


async def start():
    logging.basicConfig(
        level=logging.INFO,
        format="%(asctime)s - [%(levelname)s] -  %(name)s - (%(filename)s).%(funcName)s(%(lineno)d) - %(message)s"
    )
    bot = Bot(token=settings.bots.bot_token, parse_mode='HTML')

    dp = Dispatcher()

    dp.startup.register(start_bot)
    dp.shutdown.register(stop_bot)

    dp.message.register(get_start)
    try:
        await dp.start_polling(bot)
    finally:
        await bot.session.close()

if __name__ == "__main__":
    asyncio.run(start())
Image