Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не очищается машина состояний aiogram 3 python

Алексей Гребенчуков Ученик (126), открыт 2 недели назад
 

class Reg(StatesGroup):
#убрал потому что текст длинный
@router.callback_query(F.data == 'next')
async def one(callback: types.CallbackQuery, state: FSMContext):
await state.set_state(Reg.name)
await callback.message.answer('Как мне тебя называть?')
@router.message(Reg.name)
async def reg_name(message: types.Message, state: FSMContext):
await state.update_data(name=message.text)
await state.set_state(Reg.number)
await message.answer('Напишите Ваш номер телефона')
@router.message(Reg.number)
async def reg_number(message:types.Message, state: FSMContext):
await state.update_data(number=message.text)
await state.set_state(Reg.strigka)
await message.answer('Напишите стрижку')
@router.message(Reg.strigka)
async def reg_strigka(message:types.Message, state: FSMContext):

await state.update_data(strigka=message.text)
await state.set_state(Reg.time)
await message.answer("Напишите удобное время")

@router.message(Reg.time)
async def reg_time(message:types.Message, state: FSMContext):
await state.update_data(time=message.text)
await state.update_data(user_id=message.from_user.id)
data = await state.get_data()
print(data["user_id"],1)
data = await state.get_data()
builder = InlineKeyboardBuilder()
builder.add(types.InlineKeyboardButton(
text='Да',
callback_data='yes'
))
builder.add(types.InlineKeyboardButton(
text='Нет',
callback_data='not'
))
await message.answer(f'{data["name"]}\n{data["number"]}\n{data["strigka"]}\n{data["time"]}', reply_markup=builder.as_markup())
await state.set_state(Reg.yes)

@router.callback_query(Reg.yes, F.data == 'yes')
async def send_message(callback: types.CallbackQuery, state: FSMContext, bot: Bot):
data = await state.get_data()

print(data["user_id"],2)

builder = InlineKeyboardBuilder()
builder.add(types.InlineKeyboardButton(
text='Принять',
callback_data='register'))

builder.add(types.InlineKeyboardButton(
text='Отклонить',
callback_data='Note_register'))

await bot.send_message(
chat_id=1662615318,
text=f'Это приходит Никите:\n{data["name"]}\n{data["number"]}\n{data["strigka"]}\n{data["time"]}\n{data["user_id"]}',
reply_markup=builder.as_markup())
await callback.answer()

@router.callback_query( F.data == 'register')
async def register_client(callback: types.CallbackQuery, state:FSMContext, bot: Bot):
# Извлечение user_id
print(data["user_id"], 3) # Проверка значения user_id

print(data["user_id"])
if data["user_id"] is not None:
await bot.send_message(chat_id=data["user_id"], text='Вас записали!')
await callback.answer()
await callback.message.answer(f'Ваш chat_id: {data["user_id"]}')

else:
await callback.message.answer('Ошибка: user_id не найден.')
await state.clear()
Дополнен 2 недели назад
Всем привет. Вот работа бота:
1.бот записывает введеные данные клиента
2.Отправлять их менеджеру(см. def send_message), и кнопки подтверждения записи
3.После того как менеджер нажал кнопку "Принять", клиенту отправляется сообщение "Вас записали" (см. def register_client)

Проблема в том, что когда клиент 1 записался, то клиент 2 уже не может записаться, так как бот сохранил user_id первого клиента

Я пробовал state.clear в конце кода как отдельным обработчиком, так и в конце def register_client
0 ответов
Похожие вопросы