У меня есть код, с которым продавец вводит данные кому и какую сделку он хочет отправить, соответственно когда он ввел все значения сообщение перекидывается пользователю, дальше он должен принять сделку, но тут у меня возникает сложность, так как я не могу достать 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) выдается пустой словарь