You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.author
  • roles应该是前面找到的单个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:09:15