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

Discord Py添加角色报错求助:无法通过关键词指令分配角色

解决Discord机器人分配角色的报错问题

我来帮你排查这个问题,你的代码里有几个关键问题导致了报错,咱们一步步拆解解决:

核心问题分析

  • on_message没有直接的member参数:这个函数只接收message对象,你需要从message.author获取发送消息的用户成员,不能直接用未定义的member变量。
  • 语法错误:你的if语句末尾缺少冒号,而且代码缩进不符合Python的要求,这会直接触发语法报错。
  • 过时的server对象:新版discord.py已经把server重命名为guild,得用message.guild来获取当前服务器实例。
  • 缺失必要的Intents配置:discord.py v1.5+版本要求必须显式启用成员和消息内容相关的Intents,否则无法正确获取角色或用户信息。

修正后的完整代码

import discord
from discord.ext import commands

# 启用必需的Intents,确保能获取消息和成员数据
intents = discord.Intents.default()
intents.message_content = True
intents.members = True

# 初始化机器人,传入Intents配置
client = commands.Bot(command_prefix="!", intents=intents)

@client.event
async def on_message(message):
    # 跳过机器人自己发送的消息,避免循环触发
    if message.author.bot:
        return

    # 判断用户发送的关键词
    if message.content.lower() == "!changeadmin":
        # 从message中获取发送者的成员对象
        member = message.author
        # 在当前服务器中查找目标角色
        role = discord.utils.get(message.guild.roles, name="Administrator")

        # 先检查角色是否存在
        if role is None:
            await message.channel.send("服务器里找不到名为「Administrator」的角色,请确认角色名称是否正确!")
            return
        
        # 尝试添加角色,捕获可能的权限错误
        try:
            await member.add_roles(role)
            await message.channel.send(f"已成功为你添加「{role.name}」角色!")
        except discord.Forbidden:
            await message.channel.send("我没有权限给你添加这个角色,请确保我的角色位置高于目标角色,并且拥有「管理角色」权限!")
        except Exception as e:
            await message.channel.send(f"添加角色时出现意外错误:{str(e)}")

# 替换成你的机器人Token
client.run("你的机器人专属Token")

额外注意事项

  • 权限配置:机器人需要在服务器中拥有「管理角色」权限,并且机器人的角色位置必须比你要分配的「Administrator」角色更高,否则会触发权限不足的错误。
  • 开发者后台配置:要去Discord开发者后台的机器人页面,启用「Server Members Intent」和「Message Content Intent」这两个Intents,否则机器人无法获取成员和消息内容。
  • 可选优化:如果用discord.py的命令框架(@client.command())来实现,代码会更简洁易维护,不过用on_message的话上面的代码完全可以解决你的问题。

内容的提问来源于stack exchange,提问作者JJP_SWFC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:29:39