调用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
相关产品推荐
相关产品推荐

