@clazyx

Не получается достать значения из state.get_data что делать?

У меня есть код, с которым продавец вводит данные кому и какую сделку он хочет отправить, соответственно когда он ввел все значения сообщение перекидывается пользователю, дальше он должен принять сделку, но тут у меня возникает сложность, так как я не могу достать id продавца, что бы после того как пользователь нажмет кнопку "Принять сделку" продавцу пришло оповещение что сделка принята

Код:

class WithAvtogarant(StatesGroup):
    user_id = State() # Айди продавца
    deal_user = State() # Описание сделки
    sum_user = State() # Сумма сделки
    id_customer = State() # Айди покупателя
    transaction_is_completed = State() # Сделка закончена

@dp.message_handler(Text(equals='⚡️ Сделка через Автогарант'))
async def all_chanels(message: types.Message):
    await message.answer(f'''⚡️ <b>Сделка через автогаранта происходит в автоматическом формате без использования 3-х лиц</b>❗️
                         
 Введите ID пользователя, в формате 123456789, для поиска пользователя и создания сделки:''', parse_mode=types.ParseMode.HTML)
    await WithAvtogarant.user_id.set()
    


@dp.message_handler(state=WithAvtogarant.user_id) # Ответ по айди пользователя
async def user_id_deal_with_autogarant(message: types.Message, state=FSMContext):
    try:
        async with state.proxy() as data:
            data['user_id'] = int(message.text)
        await message.answer('✏️ <b>Введите условия сделки</b> (это поможет нам разобраться в спорных ситуациях):', parse_mode=types.ParseMode.HTML)
        await WithAvtogarant.user_id.set()
        await WithAvtogarant.next()
    except ValueError:
        await message.answer('❗️ Значения должно быть числовым')


@dp.message_handler(state=WithAvtogarant.deal_user) 
async def deal_user_deal_with_autogarant(message: types.Message, state=FSMContext):
    async with state.proxy() as data:
        data['deal_user'] = message.text
    await message.answer(f''' <b>Сделку будет оплачивать покупатель!</b>

 Введите сумму сделки:
 Минимальная сумма сделки - 100₽

‼️<b>Комиссия автоматически вычитается при открытии сделки (5%)</b>.''', parse_mode=types.ParseMode.HTML)
    await WithAvtogarant.deal_user.set()
    await WithAvtogarant.next()
    
    


@dp.message_handler(state=WithAvtogarant.sum_user)
async def deal_sum_user_with_autogarant(message: types.Message, state=FSMContext):
    try:
        value_sum = int(message.text)
        if value_sum < 100:
            await message.answer('❗️ Значение должно быть больше 100 рублей')
        else:
            send_back_deal = types.InlineKeyboardMarkup()
            send_back_deal.row(
                types.InlineKeyboardButton('✅Отправить сделку',callback_data='send_deal'),
                types.InlineKeyboardButton('◀️Главное меню', callback_data='back_deal_main_menu')
            )
            async with state.proxy() as data:
                data["sum_user"] = int(message.text)
            await message.answer(f'''✅ <b>Сделка успешно создана</b>:
‍♂️ <b>Продавец</b>: @{message.from_user.username}
‍ <b>Покупатель</b>: @Кто-то
 <b>Сумма</b>: {data['sum_user']}
⚠️ <b>Условия</b>: {data['deal_user']}''', reply_markup=send_back_deal, parse_mode=types.ParseMode.HTML)
            await WithAvtogarant.next()
    except ValueError:
        await message.answer('❗️ Значение должно быть числовым')

    
@dp.callback_query_handler(text='send_deal', state=WithAvtogarant.id_customer)
async def send_deal_to_another_user(callback_query: types.CallbackQuery, state: FSMContext):
    async with state.proxy() as data:
        data['id_customer'] = callback_query.from_user.id
        sum_user = data.get("sum_user")
        deal_user = data.get("deal_user")
        another_user_id = data.get('user_id')
    print(data['id_customer'])
    seller_id = callback_query.from_user.id
    agree_deal_user = types.InlineKeyboardMarkup()
    agree_deal_user.row(
                types.InlineKeyboardButton('✅ Принять сделку',callback_data='agree_deal'),
                types.InlineKeyboardButton('❌ Отменить сделку', callback_data='back_deal_main_menu_forward')
            )
    await callback_query.answer()
    await bot.send_message(another_user_id, f'''Вам пришел запрос на сделку:
‍♂️<b>Продавец</b>: @{callback_query.from_user.username}
‍ <b>Покупатель</b>: {deal_user}
 <b>Сумма</b>: {sum_user}
⚠️ <b>Условия</b>: {data['deal_user']}''', reply_markup=agree_deal_user, parse_mode=types.ParseMode.HTML)
    await state.update_data(another_user_id=seller_id)
    user_data = await state.get_data()
    print(user_data)
    await WithAvtogarant.next()


@dp.callback_query_handler(text='agree_deal', state='*')
async def confirm_deal(callback_query: types.CallbackQuery, state: FSMContext):
    async with state.proxy() as data:
        another_user_id = data.get('id_customer')
    print(data['id_customer'])
    await bot.send_message(another_user_id, "Сделка подтверждена")  # Отправить сообщение другому пользователю
    await bot.send_message(callback_query.from_user.id, "Сделка подтверждена")  # Отправить сообщение обратно пользователю


В первом state.get_data(функция send_deal_to_another_user) выводятся правильные значения, которые я указывал
А вот во втором state.get_data(функция confirm_deal) выдается пустой словарь
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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