【发布时间】:2021-04-15 01:22:42
【问题描述】:
我的 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 个字符的不和谐消息文本限制。
【问题讨论】:
-
真的每次运行命令都连接数据库吗?还有一个小建议——除非你真的没有其他选择,否则你不应该使用 mysql
-
你为什么不直接使用
message += f'**{guild}** - {channel.name} - {guild.id}\n'而不是await ctx.author.send(f'**{guild}** - {channel.name} - {guild.id}')?您将在您的 DM 中收到针对n不同服务器的n不同消息。此外,您实际上并不需要数据库来获取您的机器人所在的所有公会。除此之外,这会回答您的问题:stackoverflow.com/q/62878525/11146632 吗? -
不,我需要一个函数来处理数据库。遗憾的是我不知道我应该使用哪个保护程序,所以我使用 MySQL。而且不仅仅是机器人公会,他们必须激活服务器中的某些内容才能进入此列表。
-
好吧,像我上面说的那样为每个公会发送单独的消息有什么问题?
标签: python python-3.x list discord.py discord.py-rewrite