Предыстория здесь такова, что я работаю над ботом Discord. Одна из запрошенных функций - это лобовое оскорбление. Я подумал, что было бы забавно дать пользователям возможность добавлять оскорбления через базу данных SQLite 3 (в частности, better-sqlite3), и при этом я также хочу отслеживать последнее использование каждого оскорбления (это для будущее использование в команде типа "insultinfo"). Я добавил столбец DATETIME под названием «lastUsed». Моя команда insultadd может писать в этот столбец, когда добавляются новые оскорбления. Проблема в том, что когда я вызываю команду insult, она должна сказать оскорбление, а затем обновить поле lastUsed, указав текущую дату. Вставка кода ниже.
Проблема в том, что я получаю сообщение об ошибке «SQLiteError: no such column:», а затем выводит значение даты, хотя я пытаюсь обновить столбец lastUsed и Я не могу понять, как это решить. Проблема должна быть в инструкции db.prepare, я просто не вижу, что мне нужно сделать, чтобы исправить это.
execute(msg, args) {
const SQLite = require("better-sqlite3");
const db = new SQLite('./userinputs.sqlite');
// Check if the table "userinputs" exists and has content from this guild.
const table = db.prepare(`SELECT count(*) FROM userinputs WHERE (guild = ${msg.guild.id} OR guild = 'Global') AND type = 'insult';`).get();
if (!table['count(*)']) {
return msg.channel.send("I don't have any insults yet");
}
var date = new Date();
const rawInsult = db.prepare(`SELECT * FROM userinputs WHERE type = 'insult' AND (guild = ${msg.guild.id} OR guild = 'Global') ORDER BY RANDOM() LIMIT 1;`).get();
const insult = rawInsult['content'];
const insultID = rawInsult['row'];
if (args[0]) {
var target = args[0];
} else {
var target = msg.author.username;
}
if (insult.includes('{}')) {
var finalInsult = insult.replace('{}', target);
} else {
var finalInsult = target + ' ' + insult;
}
msg.channel.send(finalInsult);
db.prepare(`UPDATE userinputs SET lastUsed = "${date}" WHERE row = ${insultID};`).run();
},