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

How to Create a Currency and Inventory System in Discord.js

所以在过去的几天里,我一直在尝试为我的 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

我对这类东西了解不多,因为可供我参考的 material 太少了。

这种验证 table 的方法很糟糕。您应该改用 IF NOT EXISTS。参考this question

From http://www.sqlite.org/lang_createtable.html:

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

您也可以使用 IF NOT EXISTS 作为索引。

我建议以后在研究和提问时关注您遇到问题的具体技术。事实上,关于 sqlite 的正确使用模式,plenty of material - 但你必须专门搜索并询问 sqlite。

这道题比如你问discord.js做货币和库存系统,但是这里没有discord.js代码,报错是sqlite错误,搜索“仅当它不存在时如何创建 table sqlite”会将您带到上面的链接。简而言之,搜索您正在使用的特定技术,而不是整个项目。

也就是说,这里还有一个关于使用 discord.js 创建货币系统的“官方非官方”资源:https://discordjs.guide/sequelize/currency.html - 但它使用了 sequelize,因此您可能觉得它没有帮助.