Source
about aiogram | Middleware, Мідлвар #цікаве👉 Middleware (в aiogram) - це спеціальний к...
1 000 Views/Reach
2023-06-24 16:57
Message №20
🔒 Middleware, Мідлвар #цікаве👉 Middleware (в aiogram) - це спеціальний класс (можна реалізувати у вигляді функції), який має контроль над апдейтом до того, як на нього відреагує бот😀 І навіщо мені цим користуватись? • Можна обробляти апдейт тільки якщо він відповідає нашим умовам• Є можливість «блокувати апдейт» наче його і не було• Загалом можна робити будь-які дії перед тим як бот відреагує на апдейт чи після цього👀 Як цим користуватись? • Екземпляр мідлваря треба реєструвати у диспетчера чи роутера з певним типом апдейту який він буде обробляти 📌 Є «зовнішні» та «внутрішні» реєстраціїЗовнішні - будуть завжди викликатись на вказаний тип апдейту dp.<event>.outer_middleware()Внутрішні - спрацюють якщо апдейт з потрібним типом потенційно потрапляє в якийсь хендлер (тобто пройде крізь всі фільтри)<router>.<event>.middleware()📌 Реєстрація мідлваря, який буде обробляти будь-які апдейтиdp.update.outer_middleware()📌 Якщо комбінувати свій router і внутрішню реєстрацію, то мідлвар буде працювати тільки з хендлерами цього роутеру🎒
Пам'ятка новачка 1) Якщо мідлвар це класс, то в нього обов'язково повинен бути метод call - саме в ньому реалізується всі подальші дії після отримання апдейту2) Точно знаємо який тип апдейтів приходить - анотуємо це. 3) За передачу апдейту по ланцюжку фільтрів і хендлерів відповідає виклик handler: await handler(event, data)4) Виклик мідлваря приймає такі аргументи:> handler - хендлер (відомий тільки якщо це внутрішній мідлвар)> event - вхідна подія (підклас aiogram.types.base. TelegramObject)> data - контекстні дані (словник), через них передаються аргументи у фільтри й хендлери🪄 Приклади мідлварей • Лічильник (з доки) - обробляє апдейти типу Message які проходять фільтри і потрапляють в якийсь хендлер цього роутера. Передає в хендлер аргумент «counter»• Антифлуд (від Груші) - реєструється на тип Message, перевіряє чи є ід чату в тимчасовому кеші, якщо є, то блокує апдейт, інакше записує його в нього• Ловля альбомів - реєструється на Message і відловлює повідомлення з media_group_id, передає список елементів як аргумент «album» в хендлер• Передача сесій бд (від мене) - за допомогою async_sessionmaker (це з SQLAlchemy) дістає сесію для роботи з бд і дає її новому екземпляру класса з вашими запитами до бази данних, передає готовий клас як аргумент «db» в хендлер чи фільтр• Перевірка на бан (від мене) - дістає тг ід юзера і перевіряє його у списку заблокованих користувачів, блокує апдейт якщо результат пошуку True📚 Читати про це в документації🍐 Книга Груші, про Мідлвари
Пам'ятка новачка 1) Якщо мідлвар це класс, то в нього обов'язково повинен бути метод call - саме в ньому реалізується всі подальші дії після отримання апдейту2) Точно знаємо який тип апдейтів приходить - анотуємо це. 3) За передачу апдейту по ланцюжку фільтрів і хендлерів відповідає виклик handler: await handler(event, data)4) Виклик мідлваря приймає такі аргументи:> handler - хендлер (відомий тільки якщо це внутрішній мідлвар)> event - вхідна подія (підклас aiogram.types.base. TelegramObject)> data - контекстні дані (словник), через них передаються аргументи у фільтри й хендлери🪄 Приклади мідлварей • Лічильник (з доки) - обробляє апдейти типу Message які проходять фільтри і потрапляють в якийсь хендлер цього роутера. Передає в хендлер аргумент «counter»• Антифлуд (від Груші) - реєструється на тип Message, перевіряє чи є ід чату в тимчасовому кеші, якщо є, то блокує апдейт, інакше записує його в нього• Ловля альбомів - реєструється на Message і відловлює повідомлення з media_group_id, передає список елементів як аргумент «album» в хендлер• Передача сесій бд (від мене) - за допомогою async_sessionmaker (це з SQLAlchemy) дістає сесію для роботи з бд і дає її новому екземпляру класса з вашими запитами до бази данних, передає готовий клас як аргумент «db» в хендлер чи фільтр• Перевірка на бан (від мене) - дістає тг ід юзера і перевіряє його у списку заблокованих користувачів, блокує апдейт якщо результат пошуку True📚 Читати про це в документації🍐 Книга Груші, про Мідлвари