2 回答
TA贡献1830条经验 获得超9个赞
将if语句移出forEach循环。
前:
rows.forEach(r => {
if (!rows) {
message.channel.send("NO U");
}
后:
if (rows.length === 0) {
return message.channel.send("NO U");
}
rows.forEach(r => {
正如其他评论中指出的那样,更改!rows为,rows.length === 0因为当找不到任何行时库返回一个空数组。
TA贡献1893条经验 获得超10个赞
我会重构一些东西,所以有一个单独的函数可以将用户和数据库中的行转换为 MessageEmbed。
这样就很容易首先尝试将任何警告映射到消息,然后查看是否生成了任何警告,如果没有生成,则发送其他消息。
请注意,即使是空数组在 JavaScript 中也是真实的,因此您需要检查.length.
const con = require("../../sql.js");
function warningRowToMessage(User, row) {
const { moderator, reason, time } = row;
return new MessageEmbed()
.setTitle(`User warnings!`)
.setDescription(`These is all the warnings which have been issued to ${User.tag}!`)
.setColor(`RED`)
.setThumbnail(User.displayAvatarURL())
.addFields(
{
name: "Moderator",
value: `${moderator}`,
inline: true,
},
{
name: "Username",
value: `${User.tag}`,
inline: true,
},
{
name: "Reason",
value: `${reason}`,
inline: true,
},
{
name: "When was warned",
value: `${time}`,
inline: true,
},
);
}
con.all(`SELECT * FROM warnings WHERE username = ? AND userID = ?`, User.tag, User.id, (err, rows) => {
const replyMessages = rows.map((r) => warningRowToMessage(User, r));
if (!replyMessages.length) {
message.channel.send("NO U");
return;
}
message.delete({
timeout: 3000,
});
replyMessages.forEach(async (replyMessage) => {
const msg = await message.channel.send(replyMessage);
msg.delete({
timeout: 15000,
});
});
});
添加回答
举报