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

如何用Discord.py为升级用户添加角色?遇NoneType属性错误

问题原因及修复方案

错误根源

报错AttributeError: 'NoneType' object has no attribute 'roles'说明server变量是None,也就是bot.get_guild(<ID>)未成功获取到服务器对象。同时代码存在两处关键错误:

1. 客户端变量名不匹配

你定义的客户端实例是client = discord.Client(...),但函数里误用了bot.get_guild,导致无法找到正确的客户端对象,返回None。

2. 错误调用add_roles

message.author.id是用户ID(整数类型),而add_roles需要调用在discord.Member对象上,不能直接用ID调用。

修复后的代码

intents = discord.Intents.all()
client = discord.Client(intents=intents)

async def assignRoles(message, level):
    # 替换为你的服务器ID(整数类型)
    server = client.get_guild(1234567890)
    if not server:
        print("无法获取服务器对象,请检查机器人是否在该服务器内,或ID是否正确")
        return
    
    role = discord.utils.get(server.roles, name="LEVEL 5-10")
    if not role:
        print("找不到名为'LEVEL 5-10'的角色")
        return
    
    # 确保操作对象是服务器成员
    member = message.author
    if not isinstance(member, discord.Member):
        print("无法获取用户的服务器成员对象")
        return
    
    try:
        await member.add_roles(role)
        print("hooray")
    except Exception as e:
        print(f"添加角色失败: {e}")

额外注意事项

  • 确保机器人在目标服务器内,且拥有管理角色的权限
  • 服务器ID要替换为正确的整数,不要保留占位符
  • 角色名称需完全匹配(含大小写、空格),若不确定可改用角色ID获取:server.get_role(角色ID),可靠性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:20:21