2017-10-06 6 views
0

Je suis en train d'obtenir une commande de rôle d'un utilisateur à exécuter:Obtenez un rôle avec discord.py

async def clear (ctx, n): 
    if "Mod" in [y.name.lower() for y in ctx.message.author.roles]: 
     //delete messages 
    else: 
     client.send_message(ctx.message.channel, "You are not allowed to use this command!") 

Lorsqu'un utilisateur utilise !clear, il peut effacer les messages, mais aussi obtenir l'erreur d'autorisation .

code:

@bot.command(pass_context=True) 
async def clear(ctx, n): 
    if "mod" in [y.name.lower() for y in ctx.message.author.roles]: 
     n = int(n) 
     tn = n + 1 
     async for x in bot.logs_from(ctx.message.channel, limit=tn): 
      await bot.delete_messages(x) 

      await bot.send_message(ctx.message.channel, "Deleted" + str(n) + "messages") 
    elif not "mod" in [y.name.lower() for y in ctx.message.author.roles]: 
     await bot.send_message(ctx.message.channel, "You need the **Mod** role to use this command!") 

Lorsqu'un utilisateur utilise !clear, il peut effacer les messages, mais aussi obtenir l'erreur d'autorisation.

SOLUTION:

@bot.command(pass_context=True) 
async def clear(ctx, n): 
    if "mod" in [y.name.lower() for y in ctx.message.author.roles]: 
     n = int(n) 
     msg = [] 
     tn = n + 1 
     async for x in bot.logs_from(ctx.message.channel, limit=tn): 
      msg.append(x) 
      await bot.delete_messages(x) 

     await bot.send_message(ctx.message.channel, "Deleted" + str(n) + "messages") 
    elif not "mod" in [y.name.lower() for y in ctx.message.author.roles]: 
     await bot.send_message(ctx.message.channel, "You need the **Mod** role to use this command!") 
+0

Comment "Mod" avec une majuscule peut-il correspondre à 'name.lower()'? Je serais surpris si les messages de suppression * jamais * couru vraiment ... – squaswin

+0

il arrive la même chose avec "mod" @squaswin – Francesco

+0

Pouvez-vous s'il vous plaît modifier votre poste toute la fonction, cette question est un produit de code autre que ce vous avez envoyé. Si un utilisateur normal obtient le message d'erreur * et * peut supprimer les messages, cela signifie que l'appel à supprimer n'est pas réellement à l'intérieur que si le bloc ... – squaswin

Répondre

0

Les utilisateurs qui ont le rôle Mod ont également au moins le rôle de @everyone. Vous devez donc changer le else en elif not "Mod" in [y.name.lower() for y in ctx.message.author.roles]:.

+0

C'est juste la cause logique de l'instruction else si ... Peu importe le rôle de l'utilisateur, si "mod" n'est pas le nom de l'un d'entre eux, le bloc if ne devrait pas fonctionner du tout. – squaswin

+0

Avec cela je reçois l'erreur d'autorisation avec le rôle "mod" – Francesco