如何解决我如何才能将其全部嵌入
我想发出命令以查看该服务器中具有特定角色的所有成员。但是,有了我现在拥有的东西,我就为拥有该角色的每个成员所嵌入。但是我希望将其全部嵌入其中,但是如何?
@bot.command(name='members',aliases=['Members'])
@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:
embed=discord.Embed(title=f"Members of {role}",description=f"{member.display_name} - {member.id}",color=0xfcf8f8)
await ctx.send(embed=embed)
解决方法
您现在正在做的是遍历每个成员,并在他们具有所需角色时发送嵌入。结果,您将为每个成员发送一个嵌入,而不是发送包含所有所需信息的嵌入。我写的一种可能的解决方案是创建一个包含所有成员及其信息的字符串,然后将其发送到一个嵌入中。
member_string = ""
for member in server.members:
if role_id in member.roles:
member_string += "\nmember.display_name - member.id"
embed = discord.Embed(title=f"Members of {role}",description=member_string,color=0xfcf8f8)
await ctx.send(embed=embed)
,
这里有几件事要记住
- 您可以使用
discord.utils.get
而不是遍历Guild.roles
。 - 我们没有
Role.members
循环遍历Guild.members
并检查成员是否具有该角色,而是返回了具有该角色的成员列表。 - 可以使用
join()
而不是for循环,并且可以最小化代码。
@bot.command(name='members',aliases=['Members'])
@commands.has_permissions(manage_messages=True)
async def members(ctx,*args):
name = " ".join(args)
role = discord.utils.get(ctx.guild.roles,name=name)
if not role:
return await ctx.send("Role not found")
member_string = "\n".join([i.display_name + " - " + str(i.id) for i in role.members])
e = discord.Embed(title=f"Members of {role.name}",color=0xfcf8f8)
await ctx.send(embed=e)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。