Discord.py,如何删除角色?

Discord.py, how do I delete a role?

我已经尝试和研究了很多次,但仍然找不到。我想创建一个删除服务器中选定角色的命令。这是我想出的(目前不关心权限):

@bot.command(pass_context=True)
async def delrole(ctx, role: discord.Role):
    await bot.delete_role(role)
    await bot.say("The role {} has been deleted!".format(role.name))

如果你能帮忙,那就太棒了。我使用了角色:discord.Role and delete_role()。感谢您阅读。如果您有解决方案,请随时发表评论。

注意: 此 post 适用于旧版本的 discord.py,将不再有效。如果您正在寻找 discord.py 的重写 (v1) 版本的等效解决方案,您可以使用以下代码:

@bot.command(pass_context=True)
async def delrole(ctx, *, role_name):
  role = discord.utils.get(ctx.message.guild.roles, name=role_name)
  if role:
    try:
      await role.delete()
      await ctx.send("The role {} has been deleted!".format(role.name))
    except discord.Forbidden:
      await ctx.send("Missing Permissions to delete this role!")
  else:
    await ctx.send("The role doesn't exist!")

您可以这样做以避免只能删除可提及的角色

@bot.command(pass_context=True)
async def delrole(ctx, *,role_name):
  role = discord.utils.get(ctx.message.server.roles, name=role_name)
  if role:
    try:
      await bot.delete_role(ctx.message.server, role)
      await bot.say("The role {} has been deleted!".format(role.name))
    except discord.Forbidden:
      await bot.say("Missing Permissions to delete this role!")
  else:
    await bot.say("The role doesn't exist!")

您在哪里 !delrole name_of_role 并使用 discord.utils.get 从服务器上的角色列表中按名称查找角色。
然后,如果找到它,您可以使用带有 2 个参数的 bot.delete_role 删除它,您要从中删除角色的服务器和角色本身

您所缺少的只是 delete_roleserver 参数(不需要,因为每个 Role 都知道它来自 Server )

@bot.command(pass_context=True)
async def delrole(ctx, role: discord.Role):
    await bot.delete_role(role.server, role)
    await bot.say("The role {} has been deleted!".format(role.name))

您使用 converters

已经走在正确的轨道上

以上解决方案将行不通 server 必须 guild 实际删除角色会容易得多。

@bot.command(pass_context=True)
async def delrole(ctx, *, role_name):
    role = discord.utils.get(ctx.message.guild.roles, name=f"{role_name}")
    await role.delete()
    await ctx.send(f"[{role_name}] Has been deleted!")

此解决方案自 2021 年 8 月 28 日起有效。