为我的 discord.js 机器人创建一个排名列表

Posted

技术标签:

【中文标题】为我的 discord.js 机器人创建一个排名列表【英文标题】:Create a ranklist for my discord.js Bot 【发布时间】:2018-01-08 03:52:51 【问题描述】:

我有一个名为“scores”的表,想要过滤 UserId 并按他们的分数排序。我想为我的 Discord Bot 创建一个排名列表命令,但我不知道该怎么做。

我虽然是这样但它不起作用:

const sql = require("sqlite");
sql.open("score.sqlite");
exports.run = (client, message, args) => 
    var index = 1;
    var msg = "-- Top 5 list --\n";
    sql.get("SELECT * FROM scores ORDER BY points DESC LIMIT 5").then(rows => 
        for (index = 1; index < 6; index++) 
            if (rows[index] !== null) 
                msg += index + ". " + rows[index].userId + " - " + rows[index].points + "\n";
            
        
        console.log(msg);
    );
;

你们能帮帮我吗?

谢谢。

【问题讨论】:

请详细说明“它不起作用” 没有错误。而在控制台中也没什么。 您似乎没有发现错误。尝试将错误处理程序添加到您的 .get 和/或看看您是否至少获得了您的查询。 我收到以下错误“TypeError: Cannot read property 'userId' of undefined” 但我不明白为什么。 看看你在rows 中得到了什么。 undefinednulljavascript 中是不同的东西,只有在 rows 数组中有明确的 null 值时,您的 null-guard if 语句才有效。您可以简单地检查if(rows[index]) 以保证有一个真实的值。 【参考方案1】:

https://github.com/mapbox/node-sqlite3/wiki/API#databasegetsql-param--callback

回调的签名是function(err, row) 。如果结果 set 为空,第二个参数未定义,否则为 包含第一行值的对象。

sql.get 仅返回单个行对象(不是 rows 对象的 row 对象数组)。您需要使用 sql.each 或 sql.all。

sql.all https://github.com/mapbox/node-sqlite3/wiki/API#databaseallsql-param--callback

sql.each https://github.com/mapbox/node-sqlite3/wiki/API#databaseeachsql-param--callback-complete

编辑:看起来您正在尝试制作一个不和谐点系统机器人。这里有一个非常好的指南。 https://anidiotsguide.gitbooks.io/discord-js-bot-guide/coding-guides/storing-data-in-an-sqlite-file.html

【讨论】:

以上是关于为我的 discord.js 机器人创建一个排名列表的主要内容,如果未能解决你的问题,请参考以下文章

在 discord.js 中,使用 quick.db 我想为我的机器人的货币系统创建一个卖出命令

我正在尝试在 discord.js 中为我的机器人创建一个自动角色功能,但它不起作用

尝试为我的 discord.js 机器人创建排行榜命令,但除第一名之外的所有值都保持为 0

Discord.js 与 mysql (查询,如果不发送消息到通道)

不和谐机器人 |使用 discord.js 和 MongoDB 进行排名(排行榜?)系统

Discord.js 机器人,临时静音命令不会静音