Как создать систему валюты и инвентаря в Discord. js - PullRequest
0 голосов
/ 19 июня 2020

Итак, я пытался создать валютную систему и систему инвентаря для моего бота 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 Ответ

1 голос
/ 19 июня 2020

Это плохой подход к проверке таблиц. Вместо этого вы должны использовать IF NOT EXISTS. См. этот вопрос для справки:

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

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

Вы также можете использовать IF NOT EXISTS для своего индекса.

В будущем я рекомендую сосредоточиться на конкретной технологии c, с которой у вас возникают проблемы, когда вы исследуете и задаете вопросы. На самом деле существует много материала о правильных шаблонах использования sqlite, но вы должны искать и запрашивать именно sqlite.

В этом вопросе, например, вы спрашиваете о создании система валюты и инвентаря в разногласиях. js, но нет разногласий. js здесь код, ошибка является ошибкой sqlite, и поиск «как создать таблицу, только если она не существует sqlite» будет иметь привел вас по ссылкам выше. Короче говоря, ищите конкретную c технологию, которую вы используете, а не для всего проекта.

При этом есть также «официальный неофициальный» ресурс по созданию валютной системы с разногласиями. js здесь: https://discordjs.guide/sequelize/currency.html - но он использует sequelize, поэтому вы можете не посчитать его полезным.

...