我如何在 discord.py 中获取角色的名称

时间:2021-02-25 11:04:51

标签: python discord discord.py

我创建了一个添加角色命令。它工作正常,但我的问题是它仅适用于角色的 id。我想知道如何以某种方式将角色的 id 转换为角色的名称。 这是代码。

    @commands.has_permissions(manage_messages=True)
    async def addrole(self, ctx, member: discord.Member,rolename):
        if member is None:
            member=ctx.author
        role = discord.utils.get(ctx.guild.roles, id=rolename)
        await member.add_roles(role)
        await ctx.send(f"{member.mention}was added {rolename}")

感谢任何帮助。编辑

解决方案

我利用了 2 条评论并创建了这个完美运行的命令。

    @commands.command()
    @commands.has_permissions(manage_messages=True)
    async def addrole(self, ctx, role: discord.Role, member: discord.Member=None):
        if member is None:
            member=ctx.author
        await member.add_roles(role)
        await ctx.send(f"{member.mention} was added {role}")```

2 个答案:

答案 0 :(得分:1)

您可以将 rolename 变量声明为 discord.Role 并使用将应用的隐式 role converter,就像您的 member 对象发生的情况一样。你的函数看起来像这样:

@commands.has_permissions(manage_messages=True)
async def addrole(self, ctx, member: discord.Member, role: discord.Role):
    await member.add_roles(role)
    await ctx.send(f"{member.mention} was added {rolename}")

答案 1 :(得分:1)

您可以像使用成员转换器一样使用角色转换器。您可以在参数中传递 role: discord.Role。然后,你只需要提到这个角色。

此外,您必须为 None 参数分配一个默认值 member 以检查它是否为 None

@commands.has_permissions(manage_messages=True)
async def addrole(self, ctx, role: discord.Role, member: discord.Member=None):
    if not member:
        member=ctx.author
    await member.add_roles(role)
    await ctx.send(f"{member.mention}was added {role.name}")

参考文献

相关问题