Discord Py技术问询:通过消息ID撤回消息及删除旧游戏消息
Discord Py相关问题解答
1. 通过消息ID撤回消息的方法
当然有,核心思路是先通过ID获取消息实例,再执行删除操作,具体实现方式如下:
- 若已持有消息所在的
TextChannel对象:# 假设channel是目标频道对象,message_id是要删除的消息ID old_message = await channel.fetch_message(message_id) await old_message.delete() - 若仅知道频道ID和消息ID:
# 假设bot是你的机器人实例,channel_id是目标频道ID channel = bot.get_channel(channel_id) old_message = await channel.fetch_message(message_id) await old_message.delete()
注意:机器人必须拥有管理消息的权限,且目标消息存在于机器人可访问的频道内。
2. 解决Connect4游戏状态不同步的问题
你已经存储了旧消息ID,直接删除旧消息就能解决旧按钮干扰的问题,步骤如下:
- 从存储文件中读取旧消息的ID和对应的频道ID(建议同时存储频道ID,避免频道匹配错误)
- 按照问题1中的方法获取旧消息实例并删除
- 重新发送最新状态的游戏消息,此时旧按钮已被移除,不会再影响棋盘状态
额外优化方案:如果不想删除旧消息,也可以使用message.edit()方法直接更新旧消息的组件(按钮)和棋盘显示内容,同步最新状态。但如果旧按钮的回调逻辑已绑定旧的游戏实例,删除旧消息重新发送会是更稳妥的选择。
内容的提问来源于stack exchange,提问作者Logan Rothe
相关产品推荐
相关产品推荐

