@f1awe

Как продолжить принимать сообщения aiogram?

При блокировке пользователя мне нужно, чтобы бот полностью игнорировал его. Я подумал, что хорошим решением будет код
@dp.message_handler(content_types=["text"])
async def check_ban(message: types.Message):
    if is_banned(message.from_user.id):
        return


Но теперь, даже если is_banned = False, сообщение дальше не идёт, не принимается другими хэндлерами, что делать?
  • Вопрос задан
  • 392 просмотра
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Это плохая идея! Библиотека выбирает первый обработчик, подходящий по условию (в данном случае content_types=["text"]) и остальные не использует вообще.

Рекомендую либо вставить проверку в каждый handler, либо оформить её как условие в декораторе:

@dp.message_handler(lambda message: not is_banned(message.from_user.id)


Можно также написать свой декоратор, чтобы писать просто @check_user_banned. Но это уже по желанию.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
Что значит "дальше не идет"? Этот хендлер стоит в самом верху кода? Если так, то он будет ловить все текстовые сообщения, включая сообщения, которые являются просто командами. Так что любые текстовые обработчики ниже него работать не будут

Если хотите делать такую проверку, я бы сделал свой фильтр, который поставил в хендлер. В фильтре уже проверять пользователя
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы