我正在创建一个像游戏一样的机器人,您可以通过数据库更改昵称,但重点是当您第一次启动此功能时:
@router.callback_query(F.data == 'rename')
async def rename_user(callback: CallbackQuery, state: FSMContext):
await state.set_state(user_states.state_for_name)
await edit_message(path=r'other_photo//rename.png', caption='Введите новое имя в чат', callback=callback)
@router.message(user_states.state_for_name)
async def end_of_rename_user(message: Message, state: FSMContext, bot: Bot):
await state.set_state(None)
await state.set_data({})
new_user_name = message.text
bool_new_user_name = main_func_bd('check_name', message.from_user.id, user_name=new_user_name)
skin = main_func_bd('valid_skin', message.from_user.id)
if bool_new_user_name:
main_func_bd('rename', message.from_user.id, user_name=new_user_name)
text = main_func_bd('profile', message.from_user.id)
elif not bool_new_user_name:
profile = main_func_bd('profile', message.from_user.id)
text = f'Такой ник уже существует!\n{profile}'
await bot.edit_message_media(chat_id=message.chat.id, message_id= message.message_id - 1, media=InputMediaPhoto(media=FSInputFile(fr'skins/{skin}.png'), caption=text), reply_markup=profile_markup)
await bot.delete_message(message.chat.id, message.message_id)
昵称发生变化,再次运行时,会出现未找到编辑消息的错误:
aiogram.exceptions.TelegramBadRequest: Telegram server says - Bad Request: message to edit not found
除了这个 message_id 之外,其他一切都很完美。我试图从message_id中减去一个,就像最后一条消息应该在发送玩家昵称之前改变一样,但是当第一次启动该函数时就会发生错误,事实证明message_id不知何故保持不变,无论是否新消息是否发送(只是昵称玩家),但这只是我的猜测,告诉我如何解决这个问题
奇怪的是你期待不同的东西!
以后 怎么能成功
await bot.delete_message(message.chat.id, message.message_id)呢?await bot.edit_message_media(chat_id=message.chat.id, message_id= message.message_id, # ...)添加。 (更新问题后)
假设我们收到了历史消息的链接:
如果您从历史记录中删除一条消息
id == 1461并重新获取 4 条消息,您将获得以下链接:
因此,请考虑您是否可以执行此操作
message_id= message.message_id - 1,或者您是否需要保存
id稍后将在其中编辑的消息FSM...