Python开发Discord机器人无法识别Hearthstone截图附件问题求助
问题原因
- 拼写错误:代码中
messsage.author.mention里的message多写了一个s,会触发未定义变量的NameError,导致代码执行直接中断 - 大小写匹配问题:
startswith是大小写敏感的,如果上传的截图文件名存在大小写变化(比如系统自动转成全小写/大写),就会匹配失败 - 权限&意图未开启:Discord API v10及以上版本默认禁用机器人读取消息内容、附件文件名的权限,若未在开发者后台开启
Message Content Intent,机器人无法正常获取附件的文件名属性 - 容错不足:没有对文件名空值等异常情况做兼容,特殊场景下会触发报错打断逻辑
修复方案
- 第一步:修正拼写错误,把
messsage改为正确的message - 第二步:优化匹配逻辑为大小写不敏感,先将文件名转为全小写再匹配
- 第三步:检查并开启机器人权限:
- 进入Discord开发者平台的对应应用页,在「Bot」标签页的Privileged Gateway Intents分类下,开启
Message Content Intent开关 - 确认机器人进服时授予了「发送消息」「读取消息/查看频道」「读取消息历史」的必要权限
- 进入Discord开发者平台的对应应用页,在「Bot」标签页的Privileged Gateway Intents分类下,开启
- 第四步:增加基础容错判断,避免空文件名导致的异常
修复后参考代码
if message.attachments: for m in message.attachments: # 兼容空文件名+大小写不敏感匹配 if m.filename and m.filename.lower().startswith("hearthstone_screenshot"): await message.channel.send(f"Did you win? {message.author.mention}")
内容的提问来源于stack exchange,提问作者inzikind
相关产品推荐
相关产品推荐

