【问题标题】:Is there a way to get data in organized form from sqlite db?有没有办法从 sqlite db 以有组织的形式获取数据?
【发布时间】:2023-04-09 11:29:01
【问题描述】:

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

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

有没有办法让它提及用户而不是发送他们的 ID?

(P.S.第一个值是用户的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)

【问题讨论】:

  • 如果您想获得帮助,您必须提供更多详细信息。你如何得到这些数据?请至少提供一段代码,可运行的代码会更好。您在寻找什么“有组织的形式”?请提供您想要的示例。除非您提供此信息,否则您可能不会得到任何有价值的答案,并且您的问题可能会被标记为“待关闭”。
  • 现在好点了吗?还是我必须添加的其他内容? @Tryph

标签: python sqlite discord discord.py discord.py-rewrite


【解决方案1】:
  • 有没有办法获得前 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 中,因为它们会突出显示他们的名字(就像正常提及一样,所以您可以点击它们) ,但不要提及用户。

【讨论】:

  • 不提,有没有办法只显示名称标签而不提用户?
  • 如果您只想要他们的显示名称,请使用.display_name 而不是.mention,这会将他们的名称作为字符串返回。但是,您将无法单击它进入他们的个人资料,如果您仍然希望能够这样做,那么我也在我的回答中解释了这一点。
【解决方案2】:

使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    相关资源
    最近更新 更多