我创建了一个添加角色命令。它工作正常,但我的问题是它仅适用于角色的 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}")```
答案 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}")