• Как устроена бибилотека aiogram внутри а именно FSM?

    Vindicar
    @Vindicar
    RTFM!
    Ну конкретно по вопросу: можно сделать обоснованную догадку, если знаком с понятием "конечный автомат".
    Это нечто, обладающее набором состояний. В рамках состояния автомат выполняет определённую деятельность и/или ждёт определённого события.
    Автомат может переходить из состояния в состояние по внешнему сигналу. При этом правила перехода зависят от сигнала И от состояния. Иными словами, автомат может реагировать по разному на один и тот же сигнал, в зависимости от своего состояния.

    Пример: часы-будильник. У них могут быть четыре состояния:
    - будильник выключен (только часы)
    - будильник включен (ожидание времени следующего звонка)
    - звучит звонок
    - досыпание
    И три события:
    - сменилась минута
    - пользователь нажал кнопку "вкл-выкл"
    - пользователь нажал кнопку досыпания
    Схему переходов между состояниями можешь придумать сам. В частности, событие "сменилась минута" будет обрабатываться по-разному в каждом из состояний.

    Это базовое понятие. В твоём случае автомат - это StateGroup, его отдельные состояние - это State, а сигналы - события бота, привязанные к автомату. Важно понимать, что у тебя, скорее всего, будет много копий автомата - по одной на каждого пользователя.

    Далее возникает вопрос: а что если нам нужно передавать какие-то данные из состояния в состояние? Вот тут возникает понятие контекста автомата, т.е. какого-то набора данных, которые могут читаться и изменяться при его работе. Это FSMContext.

    Наконец, сугубо практический вопрос: автомат должен "помнить", в каком он состоянии, и должен хранить свой контекст. Где он будет это делать? Вот тут на помощь приходят классы Storage. В частности, MemoryStorage хранит эти данные в памяти. Ненадёжно, не переживает перезапуск бота, но работает быстро и удобно при отладке.

    Попробуй реализовать очень простого бота с автоматом состояний, не используя State, а храня состояние для пользователя самостоятельно. Например, в словаре вида userid: (состояние, контекст). И проверяй вручную состояние и контекст при обработке событий. Тогда поймёшь, что примерно происходит внутри FSM.
    Ответ написан
    2 комментария
  • Почему одинаковые айди фото при их сохранении?

    RimMirK
    @RimMirK
    Вроде человек. Вроде учусь. Вроде пайтону
    Проверил в телеботе, пайрограме и телетоне. Везде одинаково. Это баг телеграма
    Ответ написан
    Комментировать