Discord py - 多条消息中的服务器列表

Discord py - server list in multiple messages

我的 discord 机器人中有一个 $allservers 命令并达到了 2.000 个字符的文本限制。所以我问,是否可以从 MySQL 数据库中获取服务器列表并将它们放入多条消息中?

示例:

FIRST MESSAGE: server1, server2, server3
-- REACHED TEXT LIMIT, NEXT MESSAGE
SECOND MESSAGE: server4, server5, server6

我的 $allservers 命令代码:

@bot.command(aliases=["servers"])
async def allservers(ctx):
    mydb = mysql.connector.connect(
        host="**",
        user="**",
        password="**",
        database="**"
    )

    mycursor = mydb.cursor()
    guild56 = bot.get_guild(616655040614236160)
    member = guild56.get_member(ctx.author.id)
    role2 = guild56.get_role(792894127972155393)  # Admin
    role3 = guild56.get_role(792894172829974529)  # Mod

    if role2 in member.roles or role3 in member.roles:
        mycursor.execute(f"SELECT * FROM servers")
        myresult = mycursor.fetchall()
        message = ''
        for x in myresult:
            try:
                x1 = [x]
                guild = bot.get_guild(int(x1[0][0]))
                channel = bot.get_channel(int(x1[0][1]))
                message += f'**{guild}** - `{channel.name}` - `{guild.id}`\n'
            except:
                pass

        await ctx.author.send(f"** | ALLE SERVERS**\n\n{message}")
        await ctx.message.delete()

我的机器人在很多服务器上,这就是为什么机器人达到了 2.000 个字符的不和谐消息文本限制。

您可以通过将 message = '' 作为字符串更改为列表 messages = [] 并检查每个循环是否您的消息仍在字符限制内来解决此问题。 (并更新其余功能以使用它)

像这样:

if role2 in member.roles or role3 in member.roles:
        mycursor.execute(f"SELECT * FROM servers")
        myresult = mycursor.fetchall()
        messages = ['']
        counter = 0
        for x in myresult:
            if len(messages[counter]) > 970:
                messages.append('')
                counter += 1
            try:
                x1 = [x]
                guild = bot.get_guild(int(x1[0][0]))
                channel = bot.get_channel(int(x1[0][1]))
                messages[counter] += f'**{guild}** - `{channel.name}` - `{guild.id}`\n'
            except:
                pass
        await ctx.author.send(f"** | ALLE SERVERS**\n\n{messages[0]}")
        for i in range(1, len(messages)):
                await ctx.author.send(messages[i])
        await ctx.message.delete()