如何为加入 Discord 公会的新成员自动分配角色?

Posted

技术标签:

【中文标题】如何为加入 Discord 公会的新成员自动分配角色?【英文标题】:How to autoassign roles to new members joining Discord guild? 【发布时间】:2021-03-17 03:04:52 【问题描述】:

我正在编写一个 Discord 机器人,当新用户加入我的 Discord 公会时,它会为他们分配一个角色。假设这个角色叫做“朋友”。

机器人是用 Python 编写的,并使用 Discord.py 库。

我正在覆盖 on_member_join() 函数。

@bot.event async def on_member_join(member):

将成员分配给朋友角色

我看到 Member 类中有一个 add_roles() 函数,但在这种情况下它不起作用,因为新成员没有管理角色的权限。出于安全考虑,默认的@everyone 角色不应具有管理角色和分配其想要成为的任何角色的能力。

Discord Bot确实有权管理角色。

有没有办法让机器人自动将新成员分配给朋友角色?

谢谢。

【问题讨论】:

这能回答你的问题吗? How do I make my Python discord bot give roles on join? 很遗憾没有。我收到此错误:“'成员'对象没有属性'服务器'”。此外“'Bot'对象没有属性'add_roles'” 这里看看这个:AttributeError: 'Bot' object has no attribute 'add_roles' 太棒了!谢谢! 【参考方案1】:

试试这个:

@bot.event
async def on_member_join(member):
    role = discord.utils.get(member.server.roles, id="<role ID>")
    await bot.add_roles(member, role)

【讨论】:

我收到此错误:'Member' 对象没有属性 'server' 此外:“'Bot' 对象没有属性 'add_roles'”【参考方案2】:

解决了!感谢 Bagle 的帮助。

这是有效的:

@bot.event
async def on_member_join(member):
        default_role = discord.utils.get(member.guild.roles, id=DEFAULT_ROLE_ID)
        await member.add_roles(default_role)

DEFAULT_ROLE_ID 是我尝试分配的角色 ID 的整数。

确保您的机器人具有“管理角色”权限集,并且高于您尝试在公会角色层次结构中设置的角色。

例如,如果您的 bot 具有 Bot 角色,而您尝试自动分配的角色是 Friend,请确保 Bot 在“角色”选项卡中位于 Friend 上方。如果 Bot 不在 Friend 之上,你会遇到错误。

【讨论】:

以上是关于如何为加入 Discord 公会的新成员自动分配角色?的主要内容,如果未能解决你的问题,请参考以下文章

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

Python Discord OAuth2 - Guild.Join(加入公会)

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

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

Discord.js 如何感知公会成员何时更改活动

如何获取大型公会 discord.js 的所有成员