Как достать данные из машины состоний aiogram?
изучаю aiogram и пишу первого бота, появилась идея внедрить в бота уведомления о погоде в текущей позиции, но столкнулся с проблемой что не знаю как достать введенные данные (а именно время) из машины состояний.
class Form (StatesGroup):
user_time = State()
now_pos = "None"
bot = Bot(token=BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher (bot, storage=storage)
@dp.message_handler(commands=['svodka'])
async def mes (message: types.Message):
await bot.send_message (message.from_user.id, text="Установите время для уведомлений (например: 17:00)")
await Form.user_time.set()
@dp.message_handler(state=Form.user_time)
async def timing (message: types.Message, state: FSMContext):
await state.update_data(user_time = message.text)
await Form.next()
await message.reply(f"Отлично, время {message.text}")
async def uvedi():
aioschedule.every().day.at(#сюда нужно вставить введенное юзером время).do(weather_command(now_pos))
while True:
await aioschedule.run_pending()
await asyncio.sleep(1)
async def start_uvedi (dp):
asyncio.create_task(uvedi())
Ответы (1 шт):
Автор решения: Alexander A.XO
→ Ссылка
Возможно что-то в этом роде:
@dp.message_handler(state=Form.user_time)
async def timing (message: types.Message, state: FSMContext):
# await state.update_data(user_time = message.text)
async with state.proxy() as data:
data['user_time'] = message.text
await Form.next()
await message.reply(f"Отлично, время {message.text}")
async def uvedi():
async with state.proxy() as data:
user_time = data['user_time']
aioschedule.every().day.at(user_time).do(weather_command(now_pos))
while True:
await aioschedule.run_pending()
await asyncio.sleep(1)