有没有办法从 sqlite db 中以有组织的形式获取数据?
Is there a way to get data in organized form from sqlite db?
所以我有一个 sqlite 数据库,其中包含我服务器中的所有用户和每个用户的 xp(就像任何其他调平系统一样)。有没有办法将数据库中的前 10 名人员发送到不和谐?以有组织的方式,因为我以这种形式得到它。
[(722267777854865519, 9877, 20),
(356982883665051659, 8039, 17),
(746740254173560853, 7358, 17),
(750497624809013248, 7054, 16),
(605861925749915752, 6757, 16)]
有没有办法让它提及用户而不是发送他们的 ID?
(P.S。第一个值是用户的discord id,第二个是他们的xp,第三个是他们的等级)
我的意思是组织形式,
用户 1 提及(不是用户 ID)- XP - 级别
用户 2 提及(不是用户 ID)- XP - 级别
等直到 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)
使用 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
- 有没有办法获得前 10 名的人?
对您的列表进行排序并选择前 10 个条目。
records.sort(key=lambda x: x[1], reverse=True)
for user in records[:10]:
# do_something_with_them
- 我可以让它提及用户而不是发送 ID 吗?
是的,您可以先获取那个人的 user
实例,然后获取它的 mention
属性(这将 return 格式为 <@!id>
的字符串),然后改为发送。
user_id = 722267777854865519
user = client.get_user(user_id)
await ctx.send(user.mention)
编辑:鉴于您刚刚编辑了 post,询问有关如何进行格式化的准确信息:
按照需要格式化它只是通过在 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
中,因为它们会突出显示他们的名字(就像正常提及一样,因此您可以单击它们),但不要提及用户。
所以我有一个 sqlite 数据库,其中包含我服务器中的所有用户和每个用户的 xp(就像任何其他调平系统一样)。有没有办法将数据库中的前 10 名人员发送到不和谐?以有组织的方式,因为我以这种形式得到它。
[(722267777854865519, 9877, 20),
(356982883665051659, 8039, 17),
(746740254173560853, 7358, 17),
(750497624809013248, 7054, 16),
(605861925749915752, 6757, 16)]
有没有办法让它提及用户而不是发送他们的 ID?
(P.S。第一个值是用户的discord id,第二个是他们的xp,第三个是他们的等级)
我的意思是组织形式,
用户 1 提及(不是用户 ID)- XP - 级别
用户 2 提及(不是用户 ID)- XP - 级别
等直到 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)
使用 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
- 有没有办法获得前 10 名的人?
对您的列表进行排序并选择前 10 个条目。
records.sort(key=lambda x: x[1], reverse=True)
for user in records[:10]:
# do_something_with_them
- 我可以让它提及用户而不是发送 ID 吗?
是的,您可以先获取那个人的 user
实例,然后获取它的 mention
属性(这将 return 格式为 <@!id>
的字符串),然后改为发送。
user_id = 722267777854865519
user = client.get_user(user_id)
await ctx.send(user.mention)
编辑:鉴于您刚刚编辑了 post,询问有关如何进行格式化的准确信息:
按照需要格式化它只是通过在 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
中,因为它们会突出显示他们的名字(就像正常提及一样,因此您可以单击它们),但不要提及用户。