2 votes

Python obtient la liste de tous les membres d'un rôle spécifique.

Comment obtenir une liste de membres à partir d'un rôle spécifique avec !getuser commande dans le canal discord.

@bot.command(pass_context=True)  
async def getuser(ctx):

le robot répond avec son ID

 1. @user1#123
 2. @user2#123

5voto

Toutes ces solutions sont trop lourdes quand on peut simplement faire

@bot.command()
async def getuser(ctx, role: discord.Role):
    await ctx.send("\n".join(map(str, role.members)))

4voto

Patrick Haugh Points 27866

La branche de réécriture fournit un attribut Role.members .

Dans la branche asynchrone, vous devrez passer en revue tous les membres du serveur et vérifier leurs rôles.

@bot.command(pass_context=True)  
async def getuser(ctx, role: discord.Role):
    role = discord.utils.get(ctx.message.server.roles, name="mod")
    if role is None:
        await bot.say('There is no "mod" role on this server!')
        return
    empty = True
    for member in ctx.message.server.members:
        if role in member.roles:
            await bot.say("{0.name}: {0.id}".format(member))
            empty = False
    if empty:
        await bot.say("Nobody has the role {}".format(role.mention))

2voto

Ibex Points 11

La réponse de Patrick ne fonctionne pas du tout, la réponse de Tristo est meilleure, mais j'ai modifié quelques éléments pour qu'elle fonctionne avec la réécriture :

@bot.command(pass_context=True)
@commands.has_permissions(manage_messages=True)
async def members(ctx,*args):
    server = ctx.message.guild
    role_name = (' '.join(args))
    role_id = server.roles[0]
    for role in server.roles:
        if role_name == role.name:
            role_id = role
            break
    else:
        await ctx.send("Role doesn't exist")
        return
    for member in server.members:
        if role_id in member.roles:
            await ctx.send(f"{member.display_name} - {member.id}")

0voto

Tristo Points 1600

Espérons que cette solution soit plus rapide et plus lisible que la précédente.

@bot.command(pass_context=True)  
async def getuser(ctx,*args):
  server = ctx.message.server
  role_name = (' '.join(args))
  role_id = server.roles[0]
  for role in server.roles:
    if role_name == role.name:
      role_id = role
      break
  else:
    await bot.say("Role doesn't exist")
    return    
  for member in server.members:
    if role_id in member.roles:
      await bot.say(f"{role_name} - {member.name}")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X