discord. js better-sqlite3 команда выполняется без выполнения команды - PullRequest
0 голосов
/ 14 января 2020

Хорошо, ниже приведен мой код для создания базы данных с балансом $ 0, а под ней - тестовая команда для проверки двух аргументов, чтобы я мог получить ответное сообщение:

BOT: " $ {args} $ {args2} "

Однако всякий раз, когда мне приходится тестировать команду с двумя определениями аргументов, я получаю сообщение об ошибке SqliteError: no such table: a (я набрал команду eco test a b," a "будучи $ {args} и" b "являясь $ {args2}.

client.on("message", message => {
  if(message.author.bot) return;
  const args = message.content.slice(config.prefix.length).trim().split(' ');
  const command = args.shift().toLowerCase();

  if (command === "testbal") {

  const table = sql.prepare(`SELECT count(*) FROM sqlite_master WHERE type='table' AND name = '${args}';`).get();
  if (!table['count(*)']) {
    // If the table isn't there, create it and setup the database correctly.
    sql.prepare(`CREATE TABLE IF NOT EXISTS ${args} (bal TEXT);`).run();
    // Ensure that the "id" row is always unique and indexed.
    sql.prepare(`CREATE UNIQUE INDEX idx_${args}_id ON ${args} (bal);`).run();
    sql.pragma("synchronous = 1");
    sql.pragma("journal_mode = wal");
  }

  // And then we have two prepared statements to get and set the score data.
  client.getScore = sql.prepare(`SELECT * FROM ${args} WHERE bal = ?`);
  client.setScore = sql.prepare(`INSERT OR REPLACE INTO ${args} (bal) VALUES (@bal);`);
  sql.prepare(`INSERT OR REPLACE INTO ${args} (bal) VALUES (0);`).run();
}

});

//Actual command now

client.on("message", message => {
  const args = message.content.slice(config.prefix.length).trim().split(' ');
  const command = args.shift().toLowerCase();
    if (command === "bal"); {
        if (message.author.bot) return;
        const data = sql.prepare(`SELECT bal FROM ${args}`).get();
      message.channel.send(`You have ${data.bal}`)
  }
});

//TEST ARGS

client.on("message", message => {
    const args = message.content.slice(config.prefix.length).trim().split(' ');
    const args2 = message.content.slice(config.prefix.length).trim(args).split(' ');
    const command = args.shift().toLowerCase();
    if (command === `test`); {
        message.channel.send(`${args} ${args2}`);
    }
});

Ошибка исходит от const data = sql.prepare(`SELECT bal FROM ${args}`).get(); в соответствии с консолью, что странно, поскольку я не выполнил bal Команда вообще и только команда test, которая не является частью кода, где const data = sql.prepare(`SELECT bal FROM ${args}`).get(); в.

1 Ответ

1 голос
/ 14 января 2020

У вас есть точка с запятой между вашими операторами if и фактическим блоком оператора, который делает его таким, чтобы он всегда выполнялся.

Возьмем этот пример, мы знаем, if (false) {} ничего не должно делать, но потому что есть точка с запятой это делает:

if (false); {
  console.log('This shouldn\'t be logged, but it is.');
}

if (false) {
  console.log('This doesn\'t get logged.');
}
...