这里的背景故事是我正在开发一个 Discord 机器人。要求的功能之一是让它高球侮辱。我认为让用户能够通过 SQLite 3 数据库(特别是 Better-sqlite3)添加侮辱会很有趣,并且在这样做时,我还想跟踪每次侮辱的最近使用情况(这是为了将来在“insultinfo”类型命令中使用)。我添加了一个名为“lastUsed”的 DATETIME 列。添加新的侮辱时,我的insultadd 命令能够写入此列。问题是当我调用侮辱命令时,它应该说侮辱,然后用当前日期更新 lastUsed 字段。粘贴下面的代码。
问题是我收到一个错误,上面写着“SQLiteError:没有这样的列:”然后它打印日期值,即使我正在尝试更新 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();
},