Python Discord机器人报错:NameError: name 'mag' is not defined 求助
解决Discord机器人中的NameError: name 'mag' is not defined问题
首先,这个报错的核心原因很明确:你代码里用到的mag变量完全没有定义过。Python在执行到mag.server.roles这一行时,找不到名为mag的对象,所以抛出了NameError。
结合你的代码片段来看,你应该是想获取消息所在服务器的角色列表,但写错了变量名或者没正确引用服务器对象。下面是具体的修正方案,顺便帮你解决代码里的其他小问题:
步骤1:替换未定义的mag为正确的服务器对象
在on_message事件回调里,你可以通过message.guild获取当前消息所在的服务器(如果你的Discord.py版本比较旧,可能需要用message.server,但更推荐升级到新版使用guild)。
步骤2:修正add_roles的参数错误
你的代码里await client.add_roles(member, roles)还有两个问题:
member变量没定义:你需要指定要添加角色的成员,比如消息的发送者message.authorroles应该是前面找到的单个role变量:因为你用discord.utils.find查找的是单个角色,不是角色列表
修正后的完整代码片段
@client.event async def on_message(message): # 别忘了处理机器人自己的消息,避免无限循环 if message.author == client.user: return if message.content == "pingrole": # 使用message.guild获取当前服务器,查找名为"ping"的角色 role = discord.utils.find(lambda r: r.name == "ping", message.guild.roles) # 或者用更简洁的discord.utils.get(Discord.py v1.x+支持) # role = discord.utils.get(message.guild.roles, name="ping") if role: # 给消息发送者添加角色 await message.author.add_roles(role) await message.channel.send("Ping角色已成功添加!") else: await message.channel.send("找不到名为'ping'的角色,请检查角色名称是否正确!")
额外注意事项
- 确保你的机器人账号在服务器中有管理角色的权限,否则添加角色会失败
- 如果你使用的是Discord.py v2.x版本,
add_roles方法已经被整合到成员对象的add_roles里(和上面代码一致),不需要再通过client调用 - 永远记得先检查变量是否存在(比如上面的
if role:),避免因为找不到角色而抛出新的错误
内容的提问来源于stack exchange,提问作者Em1t
相关产品推荐
相关产品推荐

