Задать вопрос
@nulovkin

Aiogram. Как обновить контекст для фильтров?

Допустим в моем боте есть файл с командами:
postfile.py:
#Словарь с постами
posts = {'команда1': 1, 'команда2': 2}

И хэндлер:
from postfile import posts
...

...
@router.message(F.text.in_(posts))
async def print_post(message):
        await message.answer(posts[message.text])
        posts['команда 400'] = posts[message.text]
        posts[message.text] == None

Итак, функция вызывается, когда бот получает текст 'команда 1' или 'команда 2'.
После этого из словаря убирается вызванная команда, и заменяется ключом 'команда 400'.

Ожидаемое поведение:
Юзер: команда1
Бот: 1
Юзер: команда 400
Бот: 1
Юзер: команда1:
Бот: (ничего не делает, команды в словаре больше нет)

Реальное поведение:
Юзер: команда1
Бот: 1
Юзер: команда 400
Бот: (ничего не делает)
Юзер: команда1:
Бот: (ошибка ключа) (функция вызывается, но ключа в словаре уже нет)

ИНАЧЕ ГОВОРЯ: Механизм, который управляет фильтром F.Text не в курсе изменений в словаре.

Как же с этим бороться?
  • Вопрос задан
  • 74 просмотра
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@twistfire92
Python backend developer
можно поиграться с этим
или навесить хендлер на любой текст и уже внутри делать проверку
if message.text in posts:
    ...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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