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

Почему data StatesGroup не передается в другой хэндлер?

Вот работа бота:
1.бот записывает введеные данные клиента
2.Отправлять их менеджеру(см. def send_message), и кнопки подтверждения записи
3.После того как менеджер нажал кнопку "Принять", клиенту отправляется сообщение "Вас записали" (см. def register_client)
Проблема в том что в последнем роутере (def register_client) data["user_id"] возвращает None, это происходит после того когда бот отправил сообщение конкреному пользователю (def send_message)
from aiogram import F, Router
from aiogram import Dispatcher, Bot
from aiogram.filters.command import Command
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()


@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)
    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.confirmation)


@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=*мой id*,
        text=f'Это приходит Никите:\n{data["name"]}\n{data["number"]}\n{data["strigka"]}\n{data["time"]}',
        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()

    user_id = data["user_id"]
    print(user_id)
    await bot.send_message(chat_id=user_id, text='Вас записали!')
    await callback.answer()
    await callback.message.answer(f'Ваш chat_id: {user_id}')
    await state.clear()  # Завершаем состояние
  • Вопрос задан
  • 27 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

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

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