【问题标题】: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)

【问题讨论】:

    标签: python discord.py


    【解决方案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
    • 不,它没有......我怎样才能做到?
    猜你喜欢
    • 2021-08-06
    • 1970-01-01
    • 2021-12-02
    • 2021-11-03
    • 1970-01-01
    • 2020-12-04
    • 2020-05-04
    • 2018-12-13
    • 1970-01-01
    相关资源
    最近更新 更多