如何在不和谐频道中使用!getuser
命令从特定角色获取成员列表。
@bot.command(pass_context=True)
async def getuser(ctx):
机器人回复其ID
1. @user1#123
2. @user2#123
答案 0 :(得分: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))
答案 1 :(得分: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}")
答案 2 :(得分:1)
帕特里克(Patrick)的答案根本不起作用,特里斯托(Tristo)的答案更好,但是我做了一些调整以使其可重写:
@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 :(得分:0)
在您可以做的所有这些解决方案都太多了
@bot.command()
async def getuser(ctx, role: discord.Role):
await ctx.send("\n".join(map(str, role.members)))