essayNEXT / blue

0 stars 4 forks source link

Опрацювання aiogram по методичці Groosha #3

Open tarhonskyi opened 1 year ago

tarhonskyi commented 1 year ago

Необхідно опрацювати матеріал по роботі з aiogram3, що викладено за посиланням Пишем Telegram-ботов с aiogram 3.x (β):

tarhonskyi commented 1 year ago

2 урок Знакомство с aiogram.

tarhonskyi commented 1 year ago

3 урок Робота з повідомленнями: Робота с entities:

Хендлер dp.message(content_types=[types.ContentType.<Type>]) не працює в aiogram3.0.0b7. Необхідно створити фільтр для розпізнавання контенту:

from aiogram.filters import BaseFilter
from aiogram.types import Message, ContentType

class <Type>Filter(BaseFilter):
    async def __call__(self, message: Message) -> bool:
        return message.content_type == ContentType.<Type>

далі використовуємо його в хендлері:

@dp.message(<Type>Filter())
async def our_function(message: types.Message):
    await message.reply_***(message.***.file_id)
BobAlex87 commented 1 year ago

3 урок Работа с сообщениями: Прячем ссылку в тексте:

tarhonskyi commented 1 year ago

@BobAlex87 Ми можемо одразу обрати метод парсингу при створенні боту. bot = Bot(token=config.bot_token.get_secret_value(), parse_mode='HTML') В такому випадку бот буде автоматично застосовувати форматування HTML

tarhonskyi commented 1 year ago

В уроці Фильтры и мидлвари не працює фільтр нижче:

class ChatTypeFilter(BaseFilter):  # [1]
    chat_type: Union[str, list]    # [2]

    async def __call__(self, message: Message) -> bool:  # [3]
        if isinstance(self.chat_type, str):
            return message.chat.type == self.chat_type
        else:
            return message.chat.type in self.chat_type

Переписав наступним чином і без помилок відпрацьовує:

class ChatTypeFilter(BaseFilter):  # [1]
    def __init__(self, chat_type: Union[str, list]) -> None:
        self.chat_type = chat_type

    async def __call__(self, message: Message) -> bool:  # [3]
        if isinstance(self.chat_type, str):
            return message.chat.type == self.chat_type
        else:
            return message.chat.type in self.chat_type