使用discord.py开发+ping@成员发DM命令报错AttributeError如何修复
错误原因
你当前代码中的dm_member是通过字符串替换得到的str类型对象,Discord库仅对封装的Member/User对象提供send私信方法,原生字符串没有该属性,因此触发报错。
修复方案
直接从消息对象自带的mentions属性获取被@的成员对象即可,无需手动切割处理消息文本,修复后代码如下:
if message.content.startswith('+ping'): # 校验是否有@成员,避免索引报错 if not message.mentions: await message.channel.send("使用指令时请@需要ping的成员") return # 取第一个被@的成员作为私信接收方 dm_member = message.mentions[0] pinger = message.author await dm_member.send('You got pinged by:') await dm_member.send(pinger)
优化建议
可以增加异常捕获处理,避免被@用户关闭陌生人私信时触发新报错:
if message.content.startswith('+ping'): if not message.mentions: await message.channel.send("使用指令时请@需要ping的成员") return dm_member = message.mentions[0] pinger = message.author try: await dm_member.send('You got pinged by:') await dm_member.send(pinger) except discord.Forbidden: await message.channel.send("无法向该用户发送私信,对方可能关闭了陌生人私信权限")
内容的提问来源于stack exchange,提问作者neur0n-7
相关产品推荐
相关产品推荐

