Причина после занесения команды в черный список Discord.js

#javascript #node.js #discord #discord.js

#javascript #node.js #Discord #discord.js

Вопрос:

Я хочу добавить причину в свои черные списки (с помощью команды !blacklist {userid} {reason}), которые видны во вложениях ниже, например .addField («💬 Reason:», somecode) как я могу это исправить?

   if (command === "blacklist") {
    if(!config["allowed-users"].includes(message.member.id)) return;
    const user = client.users.cache.get(args[0]);
    if(!user) {
      return message.channel.send("This user does not exist")
    }
    if(blacklist.has(user.id)) {
      return message.channel.send("This user is already on the blacklist")
    }

    blacklist.set(user.id, 'blacklisted');
    let set = db.fetch(`g_${message.guild.id}`);
    var embed = new Discord.MessageEmbed()
    .setTitle(":warning: Blacklisted :warning:")
    .setColor('#fc5a03')
    .addField("👮 Moderator:", message.author.tag)
    .addField("👤 User:", user.username)
    .addField("🆔 User ID:", user.id)
    .addField("🕒 Blacklisted on:", message.createdAt)
    .setFooter("© 2020 - 2021 GlobalChat", "https://cdn.discordapp.com/avatars/759021875962576916/cc32b2b08fdd52ae86294516d34532c5.png?size=128")
    .setThumbnail(user.avatarURL({ dynamic:true }))
    .addField("Unblacklist?", "Please contact <@267818548431290369> or <@331736522782932993>");

    client.guilds.cache.forEach(g => {
      try {
        client.channels.cache.get(db.fetch(`g_${g.id}`)).send(embed);
      } catch (e) {
        return;
      }
    });


  } 
 

Комментарии:

1. Вы пытаетесь добавить причину в свою базу данных или хотите просто показать ее во внедрении?

2. Я только хочу показать это во внедрении

Ответ №1:

Сначала вы захотите проверить, нет ли причины, это можно просто сделать, проверив для обоих подходов, не определен ли второй аргумент, например

 if (args[1] === undefined) {
    const reason = "No reason.";
}
 

Это решение будет работать для обоих подходов, поскольку, если второй аргумент не определен, после него больше не может быть

Вы могли бы принять причину в качестве аргумента. Внутри команды добавить

 const reason = args[1];
 

ИЛИ, если вы хотите, чтобы остальные аргументы черного списка были посвящены причине, вы могли бы добавить что-то вроде

 let reason = ""
for (let i = 1; i < args.length; i  ) { 
// It's very important that i starts as 1, so we do not take the first argument into account for the reason
    reason  = args[i];
}
 

И затем вы можете добавить в embed

 .addField("💬 Reason:", reason); 
 

Если бы вы выбрали первый подход, команда blacklist работала бы следующим образом

 !blacklist 012345678910111213 the_reason_here
// or
!blacklist 012345678910111213 reason
 

Ограничение этого подхода заключается в том, что причина из нескольких слов не очень понятна.

Если бы вы выбрали второй подход, команда blacklist работала бы следующим образом

 !blacklist 012345678910111213 The reason the user was banned and it can go on and on and on as long as the writer wants
 

Ответ №2:

Вы захотите получить причину таким же образом, как вы получили идентификатор пользователя, например:

 const reason = args[1];
 

После этого, чтобы убедиться, что причина не отображается как undefined , вы захотите добавить проверку в форме оператора if, например:

 if (!reason) {
    reason = "No reason";
}
 

После этого добавьте .addField("💬 Reason:", reason) в положение полей, которое вы хотите, чтобы оно было.

Ваш код должен выглядеть примерно так:

 if (command === "blacklist") {
    if (!config["allowed-users"].includes(message.member.id)) return;
    const user = client.users.cache.get(args[0]);
    const reason = args[1];

    if (!user) {
        return message.channel.send("This user does not exist")
    }
    if (blacklist.has(user.id)) {
        return message.channel.send("This user is already on the blacklist")
    }

    if (!reason) {
        reason = "No reason";
    }

    blacklist.set(user.id, 'blacklisted');
    let set = db.fetch(`g_${message.guild.id}`);
    var embed = new Discord.MessageEmbed()
        .setTitle(":warning: Blacklisted :warning:")
        .setColor('#fc5a03')
        .addField("👮 Moderator:", message.author.tag)
        .addField("👤 User:", user.username)
        .addField("🆔 User ID:", user.id)
        .addField("🕒 Blacklisted on:", message.createdAt)
        .addField(("💬 Reason:", reason)
            .setFooter("© 2020 - 2021 GlobalChat", "https://cdn.discordapp.com/avatars/759021875962576916/cc32b2b08fdd52ae86294516d34532c5.png?size=128")
            .setThumbnail(user.avatarURL({
                dynamic: true
            }))
            .addField("Unblacklist?", "Please contact <@267818548431290369> or <@331736522782932993>");

            client.guilds.cache.forEach(g => {
                try {
                    client.channels.cache.get(db.fetch(`g_${g.id}`)).send(embed);
                } catch (e) {
                    return;
                }
            });


        }