@vitafon007

Как сделать чтобы хендлер Aiogram выбирался по значению в sql бд?

Всем привет
В aiogram существует такая вещь как "state"
В зависимости от состояния активируется нужный хендлер
Есть разные варианты хранения данных (оперативка, nosql)
Хранить данные в оперативке не надежно, перезапуск скрипта и софт не помнит о чем говорил с юзером, nosql к сожалению не поддерживает хостинг
Есть хостинг с mariadb
Как можно реализовать чтобы при получении сообщения бот смотрел статус пользователя в базе например столбец tg_id, status и в зависимости от статуса выбирал хендлер и сразу отвечал?

Не могу никак решить эту задачку. Может есть аналог state с обработчиком
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 2
@bacon
Правильно написать свою реализацию Storage для mysql, создаешь новый класс на основе BaseStorage и реализуешь нужные методы, для примера открываешь https://github.com/aiogram/aiogram/tree/dev-2.x/ai... и смотришь как сделаны текущие. Ну или гуглишь, может кто уже и написал.
Ответ написан
Комментировать
@paxa-1331
Честно говоря не знаю как реализовать правильно, но мне пришла такая идея:

Записываем в бд, какой хендлер нажал пользователь и в дальнейшем, делаем проверку.

К примеру:

@dp.message_handler(state=tovar.new_tovar)
async def cmd_start(message: types.Message,state: FSMContext):
    await state.update_data(tovar1=message.text)
    c.execute("UPDATE user_stat SET stat_id= ? WHERE id = ? ",(message.chat.id,"tovar.new_tovar",))
    await message.reply(f'Отправьте фото товара',reply_markup =kb.back1)
    await tovar.new_tovar_name.set()


Ну и собственно как получить, я думаю уже сам догадаешься )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы