【发布时间】: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
如何在不和谐频道中使用!getuser 命令从特定角色获取成员列表。
@bot.command(pass_context=True)
async def getuser(ctx):
机器人用他们的 ID 回复
1. @user1#123
2. @user2#123
【问题讨论】:
标签: python python-3.x discord discord.py
当你能做的时候,所有这些解决方案都太低效了
@bot.command()
async def getuser(ctx, role: discord.Role):
await ctx.send("\n".join(str(role) for role in role.members)
【讨论】:
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}")
【讨论】:
重写分支提供了一个属性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))
【讨论】:
"{0.name}#{0.discriminator}".format(member)
role 参数,然后在协程的主体role = discord.utils.get(ctx.message.roles, "mod") 中解析role。您也可以在协程的开头设置empty = True,然后在if 块中将其设置为False。然后在 for 循环之后检查它的值。
ctx.message.server.roles。最终我会停止犯这个错误......
name="mod"。
希望比以前的解决方案更快、更易读
@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}")
【讨论】: