成员加入公会时如何添加角色

Posted

技术标签:

【中文标题】成员加入公会时如何添加角色【英文标题】:How to add a Role when a member join in a Guild 【发布时间】:2021-06-27 12:26:33 【问题描述】:

如果成员加入on_member_join event,我正在尝试添加角色

我的代码是这样的

@client.event
async def on_member_join(member):
    gu_id = int(member.guild.id)
    a = gu.find_one("_id": gu_id) # I use mongodb and find the guild
    role_name = str(a['role'])
    role = member.guild.get_role(role_name)
    print(role_name)
    await member.add_roles(role)

但我总是得到这个错误

AttributeError: 'NoneType' 对象没有属性 'id'

我也用角色 id 尝试过这个,但是我得到了这个错误

discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions

【问题讨论】:

【参考方案1】:

可能是因为gu_id 试图从member.guild 分配id 值,但它(无论guild 是什么)实际上并没有该属性,或者它之前没有在其他逻辑的某个地方传递已达到此 sn-p。

也许您可以尝试检查member.guild 在其他地方的使用情况,首先是我要开始的地方。

【讨论】:

【参考方案2】:

Guild.get_role 获取角色的 ID,您传递的是名称。因此,如果您尝试传递 ID,如果您仍想传递名称,这是有道理的:

role = discord.utils.get(member.guild.roles, name="some name")

注意区分大小写

另一个错误本质上意味着机器人没有添加角色所需的权限,要么它在层次结构中太低,没有必要的权限,要么你是服务器和机器人的所有者根本无法为您添加角色。

【讨论】:

我像你展示的那样使用它,但我得到了同样的错误 我已经解释了答案中的第二个错误。 没有第二个错误我得到这个 AttributeError: 'NoneType' object has no attribute 'id' 您确定输入的名称正确吗?区分大小写 我不知道为什么,但现在它起作用了我只得到了 discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions 错误我给了机器人所有权限,包括管理员跨度>

以上是关于成员加入公会时如何添加角色的主要内容,如果未能解决你的问题,请参考以下文章

Discord Py - 如何使用文本命令向公会的所有成员添加多个角色

在加入时向 Discord 成员添加角色

加入不和谐服务器时如何为特定成员添加角色

如何使用我的机器人将角色自动分配给新成员?

如何在“就绪”时找到所有具有特定角色的成员?不和谐.js

JDA 事件获取器返回 null 并让所有成员在一个角色中只返回机器人本身