【发布时间】:2020-07-14 03:51:09
【问题描述】:
这是我的警告命令的代码,它正在从 sqlite 数据库中读取。
user = message.mentions.users.first()
embed = new Discord.MessageEmbed()
.setTitle(`warnings of ${user.username}`)
.setTimestamp()
.setFooter('shadowcraft - **Test Mode!!**');
sql = 'SELECT * from moderation WHERE userID = ?'
db.each(sql, [user.id], (err, row) => {
if (err) throw err;
mod = client.user.fetch(toString(row.moderatorID))
console.log(row)
embed.addField(`${mod.tag}`, `${row.reason} \n${row.date}`);
});
message.channel.send(embed)
当我运行它时,它会将行打印到控制台,但嵌入是空的并且没有字段。问题是它在从db.each() 获得结果之前发送嵌入
db.each 是回调而不是承诺,所以我不能使用 await .then() 等
有没有办法将回调变成一个承诺,以便我可以使用异步函数
这是完整的控制台日志,没有错误等,只有行
{
id: 1,
date: '2020-04-02',
userID: 'some user id',
action: 'WARN',
reason: 'some reason',
moderatorID: 'some user id'
}
{
id: 2,
date: '2020-04-02',
userID: 'some user id',
action: 'WARN',
reason: 'some reason',
moderatorID: 'some user id'
}
【问题讨论】:
-
你为什么不用
WHERE userID = ${message.author.id}?它更容易,而且“发件人”必须大写,所以它应该是SELECT * FROM moderation WHERE userID = ?- 你不必使用?由于用户无法远程更改表中的值,因此您不容易受到 sql 注入的影响 -
@Proto 这是因为我不想要消息作者,我想要他们提到的用户
-
啊,尽管如此,请务必大写,道歉
-
你使用的是什么版本的 Discord.js?
-
我使用的是 12.1.1
标签: node.js sqlite discord.js