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

调用discord.py的Guild._add_role时参数报错,为何提示传入3个参数?

问题原因及解决方法

为什么会报参数数量错误?

Python的类实例方法会**自动把实例本身作为第一个参数(也就是self)**传入方法中。你调用guild._add_role(487228854084304898, 1053027595056336997)时,实际传入的参数是:

  • 第一个:guild实例(自动传入的self)
  • 第二个:用户ID 487228854084304898
  • 第三个:角色ID 1053027595056336997

而Guild._add_role这个方法的参数签名只接受2个位置参数(self + 一个其他参数),所以才会报错说你传了3个。

更重要的:你用错了方法

_add_role是discord.py的内部私有方法(以下划线开头的方法通常是框架内部使用的,不建议外部直接调用),正确的添加角色方式应该是先获取目标成员对象,再调用成员的add_roles方法。

修正后的代码

# 记得开启成员意图,否则无法获取成员
intents = discord.Intents.default()
intents.members = True

client = discord.Client(intents=intents)

@client.event 
async def on_ready():
    guild = await client.fetch_guild(1053022209087656026)
    # 获取目标成员
    member = await guild.fetch_member(487228854084304898)
    # 获取目标角色
    role = guild.get_role(1053027595056336997)
    # 给成员添加角色
    await member.add_roles(role)

注意:必须在Discord开发者门户中开启机器人的Server Members Intent权限,否则fetch_member会执行失败。

内容的提问来源于stack exchange,提问作者Lv 97 Retard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:35:27