【问题标题】:Discord.py, how do I delete a role?Discord.py,如何删除角色?
【发布时间】:2019-02-12 08:41:58
【问题描述】:

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

@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.Roledelete_role()。感谢您的阅读。如果您有解决方案,请随时发表评论。

注意:此帖子适用于旧版本的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!")

【问题讨论】:

    标签: python python-3.5 discord.py


    【解决方案1】:

    上述解决方案将不起作用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 日起生效。

    【讨论】:

    • 你也可以添加一个try语句来捕获任何错误。
    • 是的,但这篇文章是关于另一个版本的 discord.py。这个帖子不再可靠,我认为这个评论有点不必要,特别是在这么长时间过去之后,但是是的,这不再有效,你需要使用role.delete()
    【解决方案2】:

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

    @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 从服务器上的角色列表中按名称查找角色。
    然后,如果找到它,您可以使用 bot.delete_role 将其删除,该参数有 2 个参数,即您要从中删除角色的服务器和角色本身

    【讨论】:

    • 非常感谢您的帮助。你的脚本对我来说非常好。祝您白天或晚上过得愉快。
    【解决方案3】:

    您所缺少的只是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您已经走在正确的轨道上

    【讨论】:

    • 该命令对我不起作用,但感谢您的努力,我真的很感激。
    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 2020-08-03
    • 1970-01-01
    • 2021-10-10
    • 2021-11-06
    • 2021-10-19
    • 2021-07-16
    • 2021-09-17
    相关资源
    最近更新 更多