Discord机器人运行触发AttributeError: 'NoneType'无'send'属性故障排查求助
故障根因定位
- 触发AttributeError的直接原因:
client.get_channel()方法必须传入目标频道的整数ID作为入参,当前代码调用时括号内为空,方法会直接返回None,后续对None类型对象执行.send()操作就会抛出对应异常 - 导致消息无法推送的连带问题:代码中
client.run('')未填入Discord开发者平台申请的机器人真实访问Token,机器人无法正常连接Discord服务完成身份校验 - 潜在兼容问题:使用discord.py 2.0及以上版本时,未显式声明所需网关意图,会导致机器人启动后无法拉取完整的服务器频道缓存,即便填入正确的频道ID,也可能出现
get_channel()返回None的情况
修正后可正常运行的核心代码
import discord # 适配2.0+版本,显式声明默认网关意图 intents = discord.Intents.default() client = discord.Client(intents=intents) @client.event async def on_ready(): # 替换为目标频道的真实整数ID,可通过Discord开发者模式右键频道复制获取 target_channel_id = 0000000000000000000 general_channel = client.get_channel(target_channel_id) # 增加空值判断,避免触发无意义异常 if not general_channel: print("未成功获取目标频道,请检查频道ID、机器人所在权限是否匹配") return await general_channel.send('yo') # 替换为个人申请的机器人真实Token client.run('你的机器人访问Token')
调试注意事项
- 开启Discord客户端的开发者模式后,可通过右键目标频道直接复制对应频道的整数ID,无需手动计算
- 确保邀请机器人加入服务器时,勾选了「发送消息」的权限,且机器人在服务器中的角色权限覆盖目标频道的访问限制
- 不要将真实的机器人Token硬编码提交到公开代码仓库,避免身份被冒用
内容的提问来源于stack exchange,提问作者MNN
相关产品推荐
相关产品推荐

