🔴 Опис роботи echo-бота. Підписка на події/оновлення.
Подивимось код реалізації класу Router у aiogram3:
aiogram/dispatcher/router.py 🔗
class Router:
def __init__(self, *, name: str | None = None) -> None:
# ...
self.message = TelegramEventObserver(
router=self,
event_name="message",
)
aiogram/dispatcher/event/telegram.py 🔗
class TelegramEventObserver:
# ...
def __call__(self, *filters: CallbackType, flags, **kwargs):
def wrapper(callback: CallbackType) -> CallbackType:
self.register(callback, *filters, flags=flags, **kwargs)
return callback
return wrapper
З цих фрагментів коду бачимо що:
▪️ message це об'єкт класу TelegramEventObserver. Назва класа каже сама за себе.
▪️ У класі реалізований магічний метод __call__, тобто об'єкти цього класу можна викликати як функції/методи.
▪️ В тілі методу __call__ бачимо типову реалізацію декоратора.
Отже правильна відповідь на питання у опитуванні: message — це:
✅ Об'єкт класу, клас якого реалізує патерн Observer (реалізує підписку на події/оновлення)
✅ Об'єкт класу (клас-декоратор)
✅ Декоратор (клас-декоратор)
Cтаття про патерн Observer у контексті aiogram3 🔗
Що варто підкреслити:
🔺 У класі Router є атрибути назви яких відповідають типам подій(update) Telegram
🔺 Кожен з цих атрибутів дозволяє реєструвати асинхронну функцію обробник на відповідний тип події(update). Для цього використовується синтаксис декораторів.
🔺 Об'єкт клас-декоратора параметром може приймати фільтри. Функція обробник зберігаєтьься разом з фільтрами.
🔺 Асинхронна функція приймає першим параметром json від Telegram серверу десеріалізований у об'єкт події у нашему випадку це message: Message.
#tg_bots
👍1
216 ·