state сбрасывать. state.finish() под каждый handler выглядит не очень. Хочется где то в мидлваре сразу же поймать, так делают ? И если да то как) Тоесть ток один вариант в голове - pre process message - юзер айди поймать и через redis библиотеку. Как то можно ещё это реализовать получше?
Если меньше 100 раз то не придумывай. Пиши везде
Это означает, что state можно ловить только в хендлерах? Как параметр state: FSMState
Его можно и ловить и создавать везде
Прикол в том, что люди разбивают хендлеры на файлы по своей логике И оно хреново получается
Разбивай по нормальной логике =) Везде ж пишут: хэндлеры срабатывают по первому набору фильтров, который вернул True
Да я разбил на файлы
Объясняю Где-то в относительно новом гайде груши найди альт регистрацию хендлеров Импортируй все команды из других файлов в main файл и объяви все хендлеры в одном файле в нужном порядке, ссылаясь ими на функции в других файлах
У меня идут регистрации в каждом файле и ту функцию импортирую в main и там также в одну функцию каждый хендлер по порядку
Вот убери все регистрации в каждом файле Оставь голые функции А объяви их все в одном файле в правильном порядке — вынеся все state * функции наверх
Ну не лови их
И что, что в разных файлах? Команды-то разные
Смотри конкретный пример import file1 import file2 import file3 В файле 1 объявлен обработчик на состояние search на любой текст В файле 2 объявлен обработчик на состояние * Поэтому обработчик файла 1 перебивает команду в файле 2, когда бот находится в стейте search
у него обработка не команд, а любого сообщения ¯\_(ツ)_/¯
Неправильное заявление У тебя может быть хэндлер `@dp.message_handler(commands="alice", state="state1") А после зареганным @dp.message_handler(commands="bob", state="*") И когда юзер в состоянии "state1", то команда "bob" сработает нормально, т.к. набор фильтров commands="alice", state="state1" вернёт False из-за несовпадения команды
Чем мониторишь?
Ты не видишь подпись "на любой текст"? у него хендлер не на команду у него хендлер на текстовое сообщение
https://t.me/aiogram_ru/1052471
Причём сам же пишет "ID только из чисел". Тут прям напрашивается фильтр на числа
Ну вот он этот дурак И я даю ему конкретное решение, которое ему поможет, без переделывания кода)
Ну кстати да В этом конкретном случае такое прокатит
Обсуждают сегодня