Discord.py, как мне удалить роль? - PullRequest
0 голосов
/ 07 сентября 2018

Я пытался и исследовал много раз, но все еще не мог найти это. Я хочу сделать команду, которая удаляет выбранную роль на сервере. Вот что я придумал (в настоящее время не заботится о разрешениях):

@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 и delete_role () . Спасибо за чтение. Если у вас есть решение, не стесняйтесь комментировать.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Все, что вам не хватает, это аргумент server для delete_role (который ему не нужен, так как каждый 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))

Вы уже на правильном пути, используя конвертеры

0 голосов
/ 07 сентября 2018

Вы можете сделать что-то подобное, чтобы избежать удаления только тех ролей, которые упоминаются

@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 аргумента: сервер, с которого вы хотите удалить роль, и сама роль

...