Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何获得discord.py中角色的名称_Python_Discord_Discord.py - Fatal编程技术网

Python 我如何获得discord.py中角色的名称

Python 我如何获得discord.py中角色的名称,python,discord,discord.py,Python,Discord,Discord.py,我创建了一个addrole命令。它工作得很好,但我的问题是它只在角色id的情况下工作。我想知道如何将角色的id转换为角色的名称。 这是代码。 @commands.has_permissions(manage_messages=True) async def addrole(self, ctx, member: discord.Member,rolename): if member is None: member=ctx.author

我创建了一个addrole命令。它工作得很好,但我的问题是它只在角色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}")
谢谢你的帮助

解决方案 我使用了这两条注释并创建了这个命令,它工作得非常好

@commands.command()
@commands.has_权限(manage_messages=True)
异步def addrole(self,ctx,role:discord.role,member:discord.member=None):
如果成员为无:
成员=ctx.author
等待成员。添加_角色(角色)
wait ctx.send(f“{member.notice}已添加{role}”)```

您可以将
rolename
变量声明为
discord.Role
,并使用将应用的隐式变量,就像对
成员发生的事情一样。您的函数如下所示:

@commands.具有权限(manage\u messages=True)
异步def addrole(self,ctx,成员:discord.member,角色:discord.role):
等待成员。添加_角色(角色)
wait ctx.send(f“{member.notice}已添加{rolename}”)

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

此外,您必须为
成员
参数指定一个默认值
None
,以检查它是否为
None

@commands.具有权限(manage\u messages=True)
异步def addrole(self,ctx,role:discord.role,member:discord.member=None):
如果不是成员:
成员=ctx.author
等待成员。添加_角色(角色)
wait ctx.send(f“{member.notice}已添加{role.name}”)
工具书类

这将给您带来错误,因为位置参数跟在关键字参数后面。OP必须更改参数顺序,以使成员optionIt在:role:discord.role.上出错,因此新命令现在先有discord.role,然后是成员:discord.member=None,如您在solution.TY中看到的帮助。