如何在Discord.js中创建货币和库存系统

时间:2020-06-19 14:32:11

标签: discord.js better-sqlite3

因此,过去几天来,我一直在尝试为Discord机器人制作货币系统和库存系统。但是,我似乎根本无法取得任何进展。我尝试使用sequelize和Better-sqlite3(这是我当前正在使用的),但都没有成功。

const table = sql.prepare("SELECT count(*) FROM sqlite_master WHERE type ='table' AND name = 'balance';").get();
if (table["count(*)"] === 0) {
  console.log("creating table...");
  sql.prepare("CREATE TABLE scores (id TEXT PRIMARY KEY, user TEXT, guild TEXT, money INTEGER);").run();
  sql.prepare("CREATE UNIQUE INDEX idx_scores_id ON scores (id);").run();
  sql.pragma("synchronous = 1");
  sql.pragma("journal_mode = wal");
}

client.getScore = sql.prepare("SELECT * FROM balance WHERE user = ? AND guild = ?");
client.setScore = sql.prepare("INSERT OR REPLACE INTO money (id, user, guild, money) VALUES (@id, @user, @guild, @money);");

上面的代码导致此错误:

(node:13036) UnhandledPromiseRejectionWarning: SqliteError: table scores already exists

我对这样的东西没有太多的了解,因为那里几乎没有资料可供我参考。

1 个答案:

答案 0 :(得分:1)

这是验证表的错误方法。您应该改为使用IF NOT EXISTS。请参阅this question以获取参考:

来自http://www.sqlite.org/lang_createtable.html

CREATE TABLE IF NOT EXISTS some_table (id INTEGER PRIMARY KEY AUTOINCREMENT, ...);

您也可以将IF NOT EXISTS用于索引。

将来,我建议您着重研究和提出问题时遇到问题的特定技术。实际上,有很多关于sqlite正确使用方式的材料。其中,您必须进行搜索并专门询问sqlite。

例如,在此问题中,您询问有关在discord.js中创建货币和库存系统的信息,但此处没有discord.js代码,该错误是sqlite错误,然后搜索“如何仅创建表格”如果它不存在,那么“ sqlite”将带您进入上面的链接。简而言之,搜索您正在使用的特定技术,而不是整个项目。

话虽这么说,这里还有一个使用discord.js创建货币系统的“官方非官方”资源:https://discordjs.guide/sequelize/currency.html-但它使用了续集,因此您可能会发现它没有帮助。