FSMContext не работает MemoryStorage

Рейтинг: 0Ответов: 2Опубликовано: 25.02.2023

Для хранения состояния класса State нужно выделить место, я делаю это через:

from aiogram.contrib.fsm_storage.memory import MemoryStorage
  storage = MemoryStorage()
  dp = Dispatcher(bot, storage)
  class Form(StatesGroup):
     mes1 = State()
     mes2 = State()

Вроде всё должно работать при попытке поместить в состояние текст, но выдает ошибку:

D:\POSLEDNIYBOT\lib\site-packages\aiogram\dispatcher\filters\state.py:57: FSMStorageWarning: You haven’t set any storage yet so no states and no data will be saved. 
You can connect MemoryStorage for debug purposes or non-essential data.
  await state.set_state(self.state)

ВОТ ПОЛНЫЙ КОД:

import logging

from aiogram.dispatcher.filters import state

import config
import importlib
import datetime
import pymysql
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup

import sys




importlib.reload(sys)

# log level
logging.basicConfig(level=logging.INFO)


# DB CONNECT
try:
    db = pymysql.connect(
        host="",
        port=,
        user="r",
        password="",
        database="",

    )
    print("Successfull")

except Exception as ex:
    print("HUINYA")


bot = Bot(token=config.API_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage)
class Form(StatesGroup):
    mes1 = State()
    mes2 = State()

# Поиск id
@dp.message_handler(commands=['id'])
async def welcam(message: types.Message )->None:
        await message.answer( "Введи название улицы")
        await Form.mes1.set()

@dp.message_handler(state= Form.mes1)
async def adresHandler(message: types.Message, state: FSMContext )->None:
    async with state.proxy() as data:
        data['mes1'] = message.text
        await message.reply("Теперь введи дом")
        await state.finish()

# run long-polling
if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

От бота хочу чтобы юзер мог ввести адрес и дом,в коде раскинуть эти значения в переменные, и потом искать этот адрес в базе данных с адресами очередей отключения света Заранее, спасибо за помошь, вы лучшее камьюнити))

Ответы

▲ 0Принят

Проблема была в синтаксисе, одни пишут вот так:

storage = MemoryStorage()
dp = Dispatcher(bot, storage)

так я собственно и сделал только у меня это не работает, у меня заработало вот так:

dp = Dispatcher(bot, storage = MemoryStorage())
▲ 0

Если я всё правильно понял, то вместо state.set_state(data) вам необходимо использовать state.set_data(data)