在单个嵌入中列出所有具有多个服务器的公会
问题描述
这是我当前的代码,它显示了它当前所在的服务器.这是我想要做的,但它效率不高,可以避免,而不是为它获得的每个服务器发送嵌入消息.
This is my current code which shows the servers it is currently in. Which this does what I would like it to do, but it is not efficient and can be avoided instead of sending an embed message for each server it gets.
@client.command()
@commands.is_owner()
async def list_guilds(ctx):
servers = client.guilds
for guild in servers:
embed = discord.Embed(colour=0x7289DA)
embed.set_footer(text=f"Guilds requested by {ctx.author}", icon_url=ctx.author.avatar_url)
embed.add_field(name=(str(guild.name)), value=str(guild.member_count)+ " members", inline=False)
await ctx.send(embed=embed)
我想要做的是循环它所在的所有服务器并仅在单个嵌入中包含 10 个服务器后发送一个嵌入,然后它会发送另一个,避免使用嵌入垃圾邮件.
What I would like to do is loop though all servers it is in and send an embed only after it has included 10 servers on a single embed, then it would send another, avoiding the use of embed spam.
for client.guilds in range(10):
例如,嵌入应该如下所示:
Then for example, the embed should look like:
Guilds list (page 1) showing 10 per embed
Discord server 0
Discord server 1
Discord server 2
Discord server 3
Discord server 4
...
....
这将简单地创建一个包含 10 个服务器的嵌入,名称和服务器所有者等,但目前只需要帮助在一个嵌入上发送多个服务器名称,而不是为每个服务器发送多个嵌入,它会发送目前600+.有人可以帮忙吗?
Which would simply create an embed with 10 servers on it, the name and the server owner etc, but currently just need help with sending multiple server names on one embed, instead of sending multiple embeds for each server, which it would send 600+ currently. Would anyone please be able to help?
解决方案
迭代列表的每十个值,这里是一个例子:
Iterate every ten values of the list, here's an example:
>>> lst = list(range(1, 26))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., 25]
>>>
>>> for i in range(0, len(lst), 10):
... print(lst[i:i + 10])
...
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[21, 22, 23, 24, 25]
这里适用于您的代码:
for i in range(0, len(client.guilds), 10):
embed = discord.Embed(title='Guilds', colour=0x7289DA)
guilds = client.guilds[i:i + 10]
for guild in guilds:
embed.add_field(name=guild.name, value='whatever')
await ctx.send(embed=embed)
相关文章