Как ожидать следущее сообщение без FSM на aiogram
скажите: ЧЕМ ТЕБЕ НЕ НРАВИТСЯ FSM? а на нём нельзя работать на группе с несколькоми пользователями тоисть чел пишет в группу /start и пишет текст, все работает. НО ЕСЛИ один чел пишет /start и ДРУГОЙ чел пишет текст то сообщение ВООБЩЕ не обрабатывается
class Form(StatesGroup):
a = State()
async def a(msg):
await Form.a.set()
await msg.answer('Напишите текст')
async def b(msg, state):
await state.finish()
await msg.answer('Текст получен')
dp.register_message_handler(a, commands=['start'])
executor.start_polling(dp)
можно сделать так:
async def a(msg):
dp.register_message_handler(b)
await msg.answer('Напишите текст')
async def b(msg):
await msg.answer('Текст получен')
dp.register_message_handler(a, commands=['start'])
executor.start_polling(dp)
но я не нашёл способ ОТМЕНИТЬ регистрацию обработчика и поэтому текст будет обрабатываться БЕСКОНЕЧНО на telebot есть next_step_handler НО ЧТО ДЕЛАТЬ В АИОГРАМЕ?
Ответы (1 шт):
Автор решения: arnold
→ Ссылка
Как начёт такого варианта?
async def start(message: Message):
await message.answer('Напишите текст')
# храним состояние пользователя в переменной
user_state[message.from_user.id] = 'waiting_for_text'
async def handle_text(message: Message):
user_id = message.from_user.id
# проверяем, ждем ли мы от пользователя текст
if user_state.get(user_id) == 'waiting_for_text':
await message.answer('Текст получен')
# меняем состояние пользователя
user_state[user_id] = 'text_received'
else:
pass
dp.register_message_handler(start, commands=['start'])
dp.register_message_handler(handle_text, func=lambda message: user_state.get(message.from_user.id) == 'waiting_for_text')
executor.start_polling(dp)