我如何才能将其全部嵌入

问题描述

我想发出命令以查看该服务器中具有特定角色的所有成员。但是,有了我现在拥有的东西,我就为拥有该角色的每个成员所嵌入。但是我希望将其全部嵌入其中,但是如何?

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

这里有几件事要记住

  1. 您可以使用discord.utils.get而不是遍历Guild.roles
  2. 我们没有Role.members循环遍历Guild.members并检查成员是否具有该角色,而是返回了具有该角色的成员列表。
  3. 可以使用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)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...