Discord.py v0.16.12调用get_message出现404: Unknown Message错误求助
解决Discord.py v0.16.12中
get_message返回404 Unknown Message的问题 我之前在使用Discord.py旧版本时也碰到过类似的404问题,结合你的描述,给你几个可行的排查方向和解决方案:
1. 验证频道对象的有效性
虽然你确认了channel已定义,但要确保它是实际可访问的TextChannel对象,而不是一个纯ID或不完整的对象。可以先打印频道的ID和名称,确认和你目标频道完全一致:
print(f"频道ID: {channel.id}, 频道名称: {channel.name}")
另外要检查机器人是否真的加入了该频道——有时候管理员权限不代表机器人自动出现在所有频道里,需要确认频道成员列表里有机器人的身影。
2. 排查权限的实际生效情况
管理员权限看似覆盖所有权限,但频道的单独权限设置可能会覆盖全局权限。请检查目标频道的权限面板:
- 确保机器人在该频道拥有
读取消息历史和读取消息的权限 - 确认没有单独给机器人设置
拒绝读取消息的权限(即使全局是允许状态,频道单独拒绝会优先生效)
3. 尝试直接调用HTTP接口绕过库的封装
Discord.py v0.16.12的get_message方法可能存在缓存或参数处理的bug,你可以跳过库的封装,直接调用底层HTTP接口试试:
try: msg_data = await self.bot.http.get_message(channel.id, req["message_id"]) # 手动把返回的字典转成Message对象 from discord import Message msg = Message(state=self.bot._connection, channel=channel, data=msg_data) print("成功获取消息:", msg.content) except Exception as e: print("HTTP接口调用错误:", e)
如果这个方法也返回404,那基本可以确定是Discord API层面的问题(比如消息确实不在机器人可访问范围内);如果成功,那就是库的get_message方法本身存在问题。
4. 考虑版本兼容性问题
Discord.py v0.16.12是非常老旧的版本(发布于2018年),Discord的API已经经过多次更新,旧版本库可能存在不兼容的情况。如果项目允许的话,建议升级到Discord.py v1.x或更高版本(注意v1.x和v0.16的API有较大差异,需要调整部分代码逻辑)。
5. 确认消息是否在机器人的缓存范围内
旧版本的get_message会先从本地缓存查找消息,如果消息不在缓存里才会调用API。你可以尝试先拉取频道的消息历史,把目标消息加载到缓存中,再调用get_message:
# 拉取最近100条消息到缓存 async for msg in channel.history(limit=100): if msg.id == int(req["message_id"]): print("找到目标消息:", msg.content) break # 再尝试获取消息 msg = await self.bot.get_message(channel, req["message_id"])
内容的提问来源于stack exchange,提问作者shivaco
相关产品推荐
相关产品推荐

