为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 sqlite 在 javascript 中创建 if 语句

如何使用 sqlite 在 javascript 中创建 if 语句

交互式爱情 2022-12-22 13:04:29
所以我最近在 discord js 中使用 warn 命令制作了这段代码,但是有一个问题,我的 if 语句不能像我想要的那样工作,如果值不存在,我希望它是 return message.channel.send("该用户没有记录!"); 因为我从未尝试过在 javascript 上使用 sqlite,而且我只知道在 c# 上使用 sqliteconst con = require("../../sql.js");con.all(`SELECT * FROM warnings WHERE username = ? AND userID = ?`, User.tag, User.id, (err, rows) => {    rows.forEach(r => {        if (!rows) {            message.channel.send("NO U");        }        else {            let moderator = (r.moderator);            let modID = (r.modID);            let reason = (r.reason);            let time = (r.time);            let Avatar = User.displayAvatarURL();            let Embed = new MessageEmbed()                .setTitle(`User warnings!`)                .setDescription(                    `These is all the warnings which have been issued to ${User.tag}!`)                .setColor(`RED`)                .setThumbnail(Avatar)                .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,                });            message.channel.send(Embed).then(msg => {                msg.delete({                    timeout: 15000                });                message.delete({                    timeout: 3000                });            })        }    })})
查看完整描述

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因为当找不到任何行时库返回一个空数组。


查看完整回答
反对 回复 2022-12-22
?
白猪掌柜的

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,

    });

  });

});


查看完整回答
反对 回复 2022-12-22
  • 2 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信