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()
我的 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()