将角色更改为所有服务器成员

Posted

技术标签:

【中文标题】将角色更改为所有服务器成员【英文标题】:change role to all server members 【发布时间】:2019-09-09 18:15:28 【问题描述】:

我想创建一个不和谐机器人,在收到管理员的消息后,将所有服务器成员(不包括管理员)的角色从@everyone 更改为@newrole。

我试过这段代码,但有一个错误:

角色 = discord.utils.get(server.roles, name="newrole") AttributeError:“NoneType”对象没有属性“角色”

我使用最新版本的 discord 和 Python 3.6。

server = client.get_guild(int(server-id))

@client.event
async def on_message(message):
if message.content.startswith('change role'):
    await message.author.send("Change the role from @everyone to @newrole")
    role = discord.utils.get(server.roles, name="newrole")
    for member in server.members:
        await member.add_roles(role)

【问题讨论】:

【参考方案1】:

所有成员始终拥有everyone 角色。但是,成员可以有多个角色,因此您也可以给他们您的新角色。没有用于批量分配角色的协程,因此您必须逐个成员进行:

@client.event
async def on_message(message):
    if message.content.startswith('change role'):
        await message.author.send("Change the role from @everyone to @newrole")
        role = discord.utils.get(message.guild.roles, name="newrole")
        for member in message.guild.members:
            await member.add_roles(role)

【讨论】:

我试过这段代码但是有一个错误:role = discord.utils.get(message.guild.roles, name="@newrole") AttributeError: 'NoneType' object has no attribute 'roles ' 您是否正在向机器人发送私人消息以触发命令?然后它就不会知道在哪个服务器上进行操作。 是的,我从管理员向机器人发送了一条私人消息 您的代码是否有server 的定义,您可以使用它来代替message.guild 不,它没有......我怎样才能做到?

以上是关于将角色更改为所有服务器成员的主要内容,如果未能解决你的问题,请参考以下文章

Exchange2010系统要求

将身份角色声明 Pk 类型更改为 Guid

Discord bot 不返回角色成员

如何获取不和谐服务器中特定角色的所有成员的列表?

Exchange 2013使用的一些细节

Discord.js 获取所有具有特定角色的成员