我想确保将内联键盘发送到命令 a_or_b 并选择 a 或 b,例如,当您按下 a 时,会完成某些操作,并且底部有一个按钮,按下时会返回文本返回到a或b的选择,我想在一条消息中实现这一点。我做了这个代码
class MainStates(StatesGroup):
MENU = State()
ACTION_A = State()
ACTION_B = State()
@router.message(Command('a_or_b'))
async def a_or_b(message: Message, state: FSMContext):
# Отправляем сообщение с клавиатурой выбора кнопок A и B
msg = await message.reply(text='Выберите кнопку A или B', reply_markup=a_or_b_inline())
# Устанавливаем состояние, в котором находимся (MENU)
await state.set_state(MainStates.MENU)
# Сохраняем message_id сообщения, чтобы в дальнейшем изменить его текст и клавиатуру
await state.update_data(msg_id=msg.message_id)
@router.callback_query(MainStates.MENU)
async def process_callback_menu(callback: CallbackQuery, state: FSMContext, bot: Bot):
if callback.data == 'button_a':
await bot.answer_callback_query(callback_query_id=callback.id, text="Вы выбрали A")
# Выполняем какие-то действия при выборе кнопки A
# Устанавливаем состояние, в котором находимся (ACTION_A)
await state.set_state(MainStates.ACTION_A)
# Отправляем сообщение с текстом и клавиатурой для выбора кнопки
message_id = (await state.get_data()).get('msg_id')
await bot.edit_message_text(chat_id=callback.from_user.id, text='Подтвердите выбор', message_id=message_id,
reply_markup=a_or_b_inline_next())
elif callback.data == 'button_b':
await bot.answer_callback_query(callback_query_id=callback.id, text="Вы выбрали B")
# Выполняем какие-то действия при выборе кнопки B
# Отправляем сообщение с текстом и клавиатурой для выбора кнопки
message_id = (await state.get_data()).get('msg_id')
await bot.edit_message_text(chat_id=callback.from_user.id, text='Подтвердите выбор', message_id=message_id,
reply_markup=a_or_b_inline_next())
@router.callback_query(F.text == 'back', MainStates.ACTION_A, MainStates.ACTION_B)
async def process_callback_back(callback_query: CallbackQuery, state: FSMContext, bot: Bot):
await bot.answer_callback_query(callback_query.id)
# Отправляем сообщение с текстом и клавиатурой для выбора кнопок A и B
message_id = (await state.get_data()).get('msg_id')
await bot.edit_message_text('Выберите кнопку A или B', message_id, reply_markup=a_or_b_inline())
# Возврат к начальному состоянию (MENU)
await state.set_state(MainStates.MENU)
键盘:
def a_or_b_inline():
keyboard = InlineKeyboardBuilder()
keyboard.button(text='A', callback_data='button_a')
keyboard.button(text='B', callback_data='button_b')
keyboard.adjust(2)
return keyboard.as_markup()
def a_or_b_inline_next():
keyboard = InlineKeyboardBuilder()
keyboard.button(text='Назад', callback_data='back')
return keyboard.as_markup()
你能修复这个代码吗?为什么它不能工作所有代码(如果有人需要它)
正如我所看到的,您遇到了一个错误(下次,请记下它给出的错误),您没有指明聊天 ID,看,不应该有任何错误