在Discord上,只能接收字符长度为2000或以下的消息。我试图将漫游器所在的每个服务器的服务器名称,成员数量和服务器ID附加到列表中,然后将列表发送到频道。
但是,由于列表长度超过2000,因此我尝试将其拆分,但是该方法要求每次列表变大时都必须手动对其进行更新。如何使脚本根据需要的“分割数”自动分割列表,然后发送这些“分割数”?
到目前为止,我可以运行,但是不是自动的:
@commands.command()
async def getallservers(self, ctx):
serverslist = []
def split_list(alist, wanted_parts=1):
length = len(alist)
return [ alist[i*length // wanted_parts: (i+1)*length // wanted_parts]
for i in range(wanted_parts) ]
if ctx.author.id == 204616460797083648:
for x in self.bot.guilds:
serverslist.append(f'{x.name}: **{len(x.members)}** - {x.id}\n')
q1,q2,q3,q4,q5,q6 = split_list(serverslist, wanted_parts=6)
embed = discord.Embed(title='Server List')
embed.description = ''.join(q1)
await ctx.send(embed=embed)
embed.description = ''.join(q2)
await ctx.send(embed=embed)
embed.description = ''.join(q3)
await ctx.send(embed=embed)
embed.description = ''.join(q4)
await ctx.send(embed=embed)
embed.description = ''.join(q5)
await ctx.send(embed=embed)
embed.description = ''.join(q6)
await ctx.send(embed=embed)
else:
pass
答案 0 :(得分:1)
拥有serverslist
的人,可以将其传递给构建<2000个字符页面的函数
def paginate(lines, chars=2000):
size = 0
message = []
for line in lines:
if len(line) + size > chars:
yield message
message = []
size = 0
message.append(line)
size += len(line)
yield message
然后在您的命令中
for message in paginate(serverlist):
embed.description = ''.join(message)
await ctx.send(embed=embed)