【问题标题】:Python get all members list from a specific rolePython从特定角色获取所有成员列表
【发布时间】:2019-02-01 04:45:55
【问题描述】:

如何在不和谐频道中使用!getuser 命令从特定角色获取成员列表。

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

机器人用他们的 ID 回复

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

【问题讨论】:

    标签: python python-3.x discord discord.py


    【解决方案1】:

    当你能做的时候,所有这些解决方案都太低效了

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

    【讨论】:

      【解决方案2】:

      Patrick 的答案根本不起作用,Tristo 的答案更好,但我调整了一些东西以使其与 rewrite 一起使用:

      @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}")
      

      【讨论】:

        【解决方案3】:

        重写分支提供了一个属性Role.members

        在异步分支上,您必须遍历服务器的所有成员并检查他们的角色。

        @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))
        

        【讨论】:

        • 服务器的成员有一个名字、一个鉴别器、一个ID和一个可选的服务器特定昵称。听起来您正在寻找"{0.name}#{0.discriminator}".format(member)
        • 您将删除role 参数,然后在协程的主体role = discord.utils.get(ctx.message.roles, "mod") 中解析role。您也可以在协程的开头设置empty = True,然后在if 块中将其设置为False。然后在 for 循环之后检查它的值。
        • @Demotry 在顶部,在循环之前。
        • ctx.message.server.roles。最终我会停止犯这个错误......
        • 然后尝试使用name="mod"
        【解决方案4】:

        希望比以前的解决方案更快、更易读

        @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}")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-17
          • 2021-07-01
          • 2020-11-03
          • 2010-09-17
          • 2021-11-18
          • 1970-01-01
          • 2020-12-05
          相关资源
          最近更新 更多