Как реализовать цепочку команд в телеграм боте на aiogram?
Мне нужно чтобы пользователь мог выбрать при командах /отдать и /выбросить от какого именно сообщения он хочет избавится. Иначе говоря, мне нужно чтобы в БД перезаписывалось значение owner. Либо на ID юзера которому отдают, либо на ноль. Использую ORM SQLAlchemy, и главный вопрос, какие способы есть реализовать выбор сообщений для выше описанных действий. Начеркал примерный код:
@dp.message_handler(commands=['выкинуть'])
async def throw_out(message: types.Message):
sesh = session.query(Message).filter_by(owner=message.from_user.id).all()
for i in sesh:
global i
i = 1
message.answer(i)
i += 1
@dp.message_handler(text=['1', "2", "3"])
async def choose(message: types.Message):
if i == 1:
sesh = session.query(Message).filter_by()
Но, не знаю за что зацепится для фильтра, да и вообще код выглядит как-то не очень обнадёживающе
Ответы (1 шт):
Абсолютно верно - код выглядит не очень обнадёживающе, один из случаев - использования глобальных переменных в локальной области видимости корутины, но это мелочи для ботов, и небольшого количества кода.
На самом деле ничего сложного нет - создаете стейт, и потом проверяете, что пришло в ответ в await state.get_data() (message.text), то есть пишите условие, где сверяете данные, и уже выполняете обновление/удаление из БД.
Если нужно создать цепочку в aiogram - почитайте про конечные автоматы (FSM), это вторая ссылка в поиске в гугле. Подобная цепочка в pyTelegramBotAPI
работает проще и удобнее со стороны проектирования кода, но имеет свои недостатки.