Как сделать оператор if в javascript с помощью sqlite - PullRequest
0 голосов
/ 05 августа 2020

Итак, я недавно сделал этот код с помощью команды warn в Discord js, но есть проблема: мой оператор if не работает так, как я хотел, и я хотел, чтобы это было, если значение не существует, обратное сообщение. channel.send («У этого пользователя нет записей!»); Потому что я никогда не пробовал использовать sqlite на javascript, и я знаю только sqlite на c#

const 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 ]

1 голос
/ 05 августа 2020

Переместите инструкцию if за пределы forEach l oop.

Перед:

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, так как библиотека возвращает пустой массив, когда строки не найдены.

0 голосов
/ 05 августа 2020

Я бы провел рефакторинг, чтобы появилась отдельная функция, которая превращает пользователя и строку из базы данных в 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,
    });
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...