有没有一种方法可以从sqlitedb中以有组织的形式获取数据



所以我有一个sqlite数据库,它包含我的服务器中的所有用户和每个用户的xp(就像任何其他级别系统一样(。有没有办法把db排名前十的人送到discord?以有组织的方式,因为我是以这种形式得到的。

[(722267777854865519, 9877, 20),
(356982883665051659, 8039, 17),
(746740254173560853, 7358, 17),
(750497624809013248, 7054, 16),
(605861925749915752, 6757, 16)]

有没有办法让它提到用户,而不是发送他们的id?

(附言:第一个值是用户的discord id,第二个值是他们的xp,第三个值是级别(

我的意思是,

  1. 用户1提及(不是用户id(-XP级

  2. 用户2提到(不是用户id(-XP级别

  3. 等等直到5。

这是代码

@commands.command()
async def lb(self,ctx):
records = db.records("SELECT UserID, XP, Level FROM exp ORDER BY XP DESC LIMIT 5")
await ctx.send(records)
  • 有办法获得前10名吗

对您的列表进行排序&取前10个条目。

records.sort(key=lambda x: x[1], reverse=True)
for user in records[:10]:
# do_something_with_them
  • 我可以让它提到用户而不是发送id吗

是的,您可以首先获取该人员的user实例,然后获取其mention属性(它将返回格式为<@!id>的字符串(,然后发送该属性。

user_id = 722267777854865519
user = client.get_user(user_id)
await ctx.send(user.mention)

编辑:看到你刚刚编辑了你的帖子,询问如何进行格式化的准确信息:

按照需要对其进行格式化,只需通过在for-loop中迭代记录来创建一个所需格式的字符串。

leaderboard = []
for i, user in enumerate(records[:10]):
leaderboard.append(f"{i + 1}. {client.get_user(user[0]).mention} - {user[1]} XP - Level {user[2]}")
await ctx.send("n".join(leaderboard))

请记住,每次提到每个人对他们来说可能真的很烦人,你可能应该把这个放在embed里面,因为这些人确实突出了他们的名字(就像正常提到的一样,所以你可以点击他们(,但不要提到用户。

使用for循环将数据分离到各自的位置。

@client.command()
async def leaderboard(ctx):
data = [(722267777854865519, 9877, 20), (356982883665051659, 8039, 17), (746740254173560853, 7358, 17), (750497624809013248, 7054, 16), (605861925749915752, 6757, 16)]
for thing in data:
user = thing[0]
user_xp = thing[1]
user_level = thing[2]
print(f"Member: {user}nLevel: {user_level}nXP: {user_xp}")

输出:

Member: 722267777854865519
Level: 20
XP: 9877
Member: 356982883665051659
Level: 17
XP: 8039
Member: 746740254173560853
Level: 17
XP: 7358
Member: 750497624809013248
Level: 16
XP: 7054
Member: 605861925749915752
Level: 16
XP: 6757

最新更新