стейта юзера, которая проходит через фильтры?
сейчас я просто юзаю декоратор, который перед обработкой хэндлера смотрит стейт на основе чата и юзера, но я подозреваю, что иногда таким образом стейт два раза на апдейт будет запрашиваться из редиса 👀
ну я сам написал что-то вроде мультиязычности бота, мне не очень нравится, как выглядит в продакшне _('f {}').format('u') и так как юзер может сам выбрать, какой язык из трех доступных он хочет видеть в боте, я решил поробовать хранить этот айди языка в data стейта т.е. любой хэндлер запускается, бот смотрит, какой язык сохранен, подбирает из словарика класс языка и передает его как параметр 'l' вместе с message чтобы я при описании хэндлера мог просто юзать l.start.hello или l.help.details 😅 все хорошо работает, но мне интересно, возможно ли использовать именно стейт, который получается для проверки всех условий, т.е. до попадания в мой декоратор
Ага, стало понятнее. Полагаю, ты можешь из сообщения в мидлвари достать chat_id + user_id, по ним получить стейт (прокинь переменную state [тип FSMContext] в мидлварь) и дальше достать язык и прокинуть его в хэндлер. Но вообще сама идея хранить долгоживущие данные в FSM — это не здорово. Ну т.е. я сам так делаю [только] в одном боте, но вообще подобные штуки лучше хранить в долгосрочном хранилище
Ты запросил данные, положил их в кэш. Юзер поменял язык, надо не только в базе обновить, но и удалить данные из кэша, чтобы следующий запрос опять шёл в БД
можно ещё ввести ttl
Можно, но если у тебя 2-10-100 пользователей, то насрать
дашь совет, как по-красивому это сделать для глобального словарика? мне приходит в голову только запускать функцию раз в час/сутки и удалять старые данные, но тогда придется еще хранить таймстэмп запроса к базе 🤔
Для синхронного кода https://github.com/tkem/cachetools Для асинхронного https://pypi.org/project/async-cache/
норм для асинка, получается, можно бы было просто закэшировать этим декоратором запрос языка из постгрес, но придется решать проблему инвалидации ключа при смене языка 👌🏻
Просто менять значение ключа Нет? Что там ещё решать
Обсуждают сегодня