Size: a a a

2020 July 13

Т

Технопёс in aiogram [ru]
Mihail
Чё-то я снова туплю. Делаю кнопку "Назад" на клаве. По нажатию надо вернуть юзера в предыдущее состояние и запустить предыдущий хендлер, где есть свои кнопки и выдача текста.

Как это решается?
Реклама на нашем канале
https://t.me/aiogram_ru/250842
источник

Т

Технопёс in aiogram [ru]
Даешь популярность либам нонеймов!
источник

M

Mihail in aiogram [ru]
Пошел смотреть :)
источник

Т

Технопёс in aiogram [ru]
Иногда так обидно, что дока еще не готова. Вроде бы что-то есть, а весь потенциал не раскрыт, и сходу не виден
источник

Т

Технопёс in aiogram [ru]
Mihail
Пошел смотреть :)
Кратко: штатная фсм в аиограме представляет собой строку с текущим стейтом, стейт-фильтр, и возможность группирования стейтов. Все переходы и т. п. уже в не её компетенции.
Либа по ссылке позволяет описать стейт-класс, прям там же разместить хэндлеры, и местно их прорегистрировать (см. пример).
Все переходы рулятся через внешнюю карту, а в рантайме пишутся в стек (магазин), чтобы иметь историю для откатов
источник

Т

Технопёс in aiogram [ru]
Для полноты картинки рекомендую запустить и потыкать пример, там пишутся дебаг логи стека
источник

M

Mihail in aiogram [ru]
Технопёс
Кратко: штатная фсм в аиограме представляет собой строку с текущим стейтом, стейт-фильтр, и возможность группирования стейтов. Все переходы и т. п. уже в не её компетенции.
Либа по ссылке позволяет описать стейт-класс, прям там же разместить хэндлеры, и местно их прорегистрировать (см. пример).
Все переходы рулятся через внешнюю карту, а в рантайме пишутся в стек (магазин), чтобы иметь историю для откатов
лан буду курить
источник

B

BPRO in aiogram [ru]
Доброго времени суток!
Пытаюсь изменить сосотояния путём:
await Main.waitRate.set()

Но ловлю ошибку:

state = Dispatcher.get_current().current_state()
AttributeError: 'NoneType' object has no attribute 'current_state'

Вроде делаю всё верно, заранее спасибо за вашу помощь!
источник

Т

Технопёс in aiogram [ru]
BPRO
Доброго времени суток!
Пытаюсь изменить сосотояния путём:
await Main.waitRate.set()

Но ловлю ошибку:

state = Dispatcher.get_current().current_state()
AttributeError: 'NoneType' object has no attribute 'current_state'

Вроде делаю всё верно, заранее спасибо за вашу помощь!
Нет контекста для установки состояния. Где ты это делаешь?
источник

B

BPRO in aiogram [ru]
Технопёс
Нет контекста для установки состояния. Где ты это делаешь?
В отдельном потоке 🌚
источник

Т

Технопёс in aiogram [ru]
BPRO
В отдельном потоке 🌚
Зачем?
источник

T

Tishka17 in aiogram [ru]
Технопёс
можно попробовать етот говнокод, взрощенный идеей автомата с магазинной памятью.
С ним можно делать возвраты просто дергая go_back() (и ничего более, логика перехода будет выполнена автоматически)
Вот хотел спросить. Как ты ведёшь себя в случае циклических переходов и как защишаешься от бесконечного роста стека
источник

B

BPRO in aiogram [ru]
Технопёс
Зачем?
У меня в отдельном потоке
(dp.loop.create_task(notify(10)))

есть процесс который оповешает пользователя об изменениях
источник

T

Tishka17 in aiogram [ru]
BPRO
Доброго времени суток!
Пытаюсь изменить сосотояния путём:
await Main.waitRate.set()

Но ловлю ошибку:

state = Dispatcher.get_current().current_state()
AttributeError: 'NoneType' object has no attribute 'current_state'

Вроде делаю всё верно, заранее спасибо за вашу помощь!
Что за Dispatcher? Это класс что ли?
источник

ЕР

Евгений Ры́марев... in aiogram [ru]
BPRO
У меня в отдельном потоке
(dp.loop.create_task(notify(10)))

есть процесс который оповешает пользователя об изменениях
а зачем туда стейты приплетать? Стейты, насколько я понял, работают, только во время обработки хендлера.
источник

B

BPRO in aiogram [ru]
Tishka17
Что за Dispatcher? Это класс что ли?
Это не мой код, это от исхдодников аиограма
источник

T

Tishka17 in aiogram [ru]
BPRO
Это не мой код, это от исхдодников аиограма
Что за Main?
источник

B

BPRO in aiogram [ru]
Tishka17
Что за Main?
Это класс FSM
источник

B

BPRO in aiogram [ru]
Tishka17
Что за Main?
class Main(StatesGroup):
   waitMenuChoose = State()
   waitRates = State()
   waitLocation = State()
   waitRate = State()
источник

B

BPRO in aiogram [ru]
Евгений Ры́марев
а зачем туда стейты приплетать? Стейты, насколько я понял, работают, только во время обработки хендлера.
У меня в отдельном потоке изменяется кнопка и основном потоке есть хендлер на эту кнопку по FSM
источник