Задать вопрос
@Elufis

Почему Бот выдает ошибку KeyError: 'user_id', не может найти данные сохраненные в StateGroup?

Вот работа бота:

Бот заносит данные клиента в data['']
Отправляет их менеджеру вместе с кнопками (def send_message)
После того как менеджер нажал кнопку "Принять", клиенту должно отправиться сообщение "Вас записали".
Проблема в том что бот не может найти data['user_id'] в обработчике def register_client
from aiogram import F, Router
from aiogram import Dispatcher, Bot
from aiogram import types
from aiogram.utils.keyboard import InlineKeyboardBuilder
from aiogram.fsm.state import StatesGroup, State
from aiogram.fsm.context import FSMContext

router = Router()
dp = Dispatcher()


class Reg(StatesGroup):
    name = State()
    number = State()
    strigka = State()
    time = State()
    confirmation = State()
    user_id = State()


@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.update_data(user_id=message.from_user.id)
    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)
    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()
    )


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

    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"]}')
    await bot.send_message(chat_id=1662615318,text=f'{data["user_id"]}', reply_markup=builder.as_markup())
    await callback.answer()  # Обработка callback


@router.callback_query(F.data == 'register')
async def register_client(callback: types.CallbackQuery, state: FSMContext, bot: Bot):
    data = await state.get_data()
    await bot.send_message(chat_id=data["user_id"], text='Вас записали!')
    await callback.answer()
    await callback.message.answer(f'Ваш chat_id: {data["user_id"]}')
    await state.clear()
  • Вопрос задан
  • 73 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
Lord_of_Rings
@Lord_of_Rings
Дунадан - северный странник. Злой, но очень добрый
Вы добавляете user_id в функции reg_number. Похоже, что register_client выполняется раньше reg_number.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы