Python получить список всех членов от определенной роли

1

Как получить список участников из определенной роли с !getuser команды !getuser в канале !getuser.

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

бот отвечает своим ID

 1. @user1#123
 2. @user2#123
Теги:
python-3.x
discord
discord.py

2 ответа

3
Лучший ответ

Переписывающая ветвь предоставляет атрибут Role.members.

В ветке async вам нужно будет пройти через все члены сервера и проверить их роли.

@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))
  • 0
    Упс, ctx.message.server
  • 0
    Члены сервера имеют имя, дискриминатор, идентификатор и необязательный псевдоним для сервера. Похоже, вы ищете "{0.name}#{0.discriminator}".format(member)
Показать ещё 7 комментариев
1

Надеемся, что более быстрое и понятное решение, чем предыдущее

@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}")
  • 0
    благодарю вас. Ваш код тоже работает, но я выбрал код Патрика, потому что он выглядит коротким и простым для понимания.
  • 0
    Нет проблем, я тоже проголосовал за него

Ещё вопросы

Сообщество Overcoder
Наверх
Меню