You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js结合SQLite查询用户XP排名返回[object Object]问题求助

问题修复方案

问题根源

你遇到的[object Object]输出有两个核心原因:

  1. better-sqlite3的get()方法返回的始终是结果行对象,哪怕你只查询一个count统计值,也需要从对象中取出对应字段才能拿到数字,直接把对象转字符串就会输出[object Object]
  2. 你在调用get()时没有传入@curxp和@guild对应的参数值,查询条件不生效,就算取值也会得到错误结果

修复代码

你可以直接替换原来的排名查询逻辑:

if (message.content.startsWith(prefix + "cl stats")) {
    const curxp = score.points;
    const currentGuildId = message.guild.id;
    // 给count(*)加别名方便取值,同时传入参数执行查询
    const rankQueryRes = sql.prepare(`
        SELECT count(*) AS user_rank 
        FROM scores 
        WHERE points >= ? AND guild = ?
    `).get(curxp, currentGuildId);
    // 从结果对象中取出排名数值
    const finalRank = rankQueryRes.user_rank;

    console.log(finalRank);
    await message.reply(`你的当前服务器排名为:${finalRank}`);
}

如果你习惯用命名参数的写法,也可以用下面的版本:

if (message.content.startsWith(prefix + "cl stats")) {
    const curxp = score.points;
    const currentGuildId = message.guild.id;
    const rankQueryRes = sql.prepare(`
        SELECT count(*) AS user_rank 
        FROM scores 
        WHERE points >= @curxp AND guild = @guild
    `).get({
        curxp: curxp,
        guild: currentGuildId
    });
    const finalRank = rankQueryRes.user_rank;

    console.log(finalRank);
    await message.reply(`你的当前服务器排名为:${finalRank}`);
}

补充说明

当前的查询逻辑计算的是并列排名:如果有其他用户和你XP数值相同,你们的排名会一致。如果需要实现不并列的排名(同分按加入时间/用户ID排序),可以在WHERE条件后额外加排序规则即可。

内容的提问来源于stack exchange,提问作者Theoph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:48:02