Почему эта команда запускается, когда она не должна? - PullRequest
0 голосов
/ 07 сентября 2018

Я получил следующий код для правильной работы. Он предназначен для удаления цветовой группы, в которой кто-то находится в разладе, когда он переключается на новый цвет. Это прекрасно работает, и это в течение недели или около того сейчас на сервере. Но только сегодня кто-то напечатал «и голубые глаза» как сообщение на сервере, и он изменил цветовую группу человека на синий, несмотря на то, что не вводил команду. У меня установлен код, который запускается только тогда, когда термин «! Colorme» запускает команду. Я заблудился относительно того, почему это вызывает что-то кроме "! Colorme" как начало. Любые идеи о том, почему это срабатывает, когда это не должно?

const botSettings = require("./botsettings.json");
const Discord = require("discord.js");
const bot = new Discord.Client({
  disableEveryone: true
});

console.log(botSettings.token);
console.log(botSettings.prefix);

bot.on("ready", () => {
  console.log("Rebot is ready!");

  bot.generateInvite(["ADMINISTRATOR"]).then(link => {
    console.log(link);
  }).catch(err => {
    console.log(err.stack);
  });
});

bot.on('message', async (message) => {

  if (message.content.toLowerCase().startsWith("!colorme"))
    message.member.roles.array().some(r => {
      if (["Red", "RedOrange", "Orange", "OrangeYellow", "Yellow", "YellowGreen", "Green", "GreenBlue", "Blue", "Indigo", "Violet", "RedViolet", "PastelRed", "PastelOrange", "PastelYellow", "PastelGreen", "PastelBlue", "PastelIndigo", "PastelViolet", "DarkRed", "DarkOrange", "DarkYellow", "DarkGreen", "DarkBlue", "DarkIndigo", "DarkViolet"].includes(r.name)) {
        message.member.removeRole(r);
      }
    })

  {
    var args = message.content.toLowerCase().split(" ");
    // console.log(args);

    if (args[1] === 'blue') {
      var role = message.guild.roles.find(role => role.name === 'Blue')
      addUserRole('Blue', message);
      message.channel.send('Role successfully added!')
        .then(message => {
          message.delete(3000)
        })
    } else if (args[1] === 'red') {
      addUserRole('Red', message);
      message.channel.send('Role successfully added!')
        .then(message => {
          message.delete(3000)
        })
      } else if (args[1] === 'redorange') {
        addUserRole('RedOrange', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'orange') {
        addUserRole('Orange', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
    } else if (args[1] === 'orangeyellow') {
      addUserRole('OrangeYellow', message);
      message.channel.send('Role successfully added!')
        .then(message => {
          message.delete(3000)
        })
      } else if (args[1] === 'yellow') {
        addUserRole('Yellow', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'yellowgreen') {
        addUserRole('YellowGreen', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'green') {
        addUserRole('Green', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'greenblue') {
        addUserRole('GreenBlue', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'indigo') {
        addUserRole('Indigo', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'violet') {
        addUserRole('Violet', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'redviolet') {
        addUserRole('RedViolet', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'pastelred') {
        addUserRole('PastelRed', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'pastelorange') {
        addUserRole('PastelOrange', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'pastelyellow') {
        addUserRole('PastelYellow', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'pastelgreen') {
        addUserRole('PastelGreen', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'pastelblue') {
        addUserRole('PastelBlue', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'pastelindigo') {
        addUserRole('PastelIndigo', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'pastelviolet') {
        addUserRole('PastelViolet', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'darkred') {
        addUserRole('DarkRed', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'darkorange') {
        addUserRole('DarkOrange', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'darkyellow') {
        addUserRole('DarkYellow', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'darkgreen') {
        addUserRole('DarkGreen', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'darkblue') {
        addUserRole('DarkBlue', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'darkindigo') {
        addUserRole('DarkIndigo', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
      } else if (args[1] === 'darkviolet') {
        addUserRole('DarkViolet', message);
        message.channel.send('Role successfully added!')
          .then(message => {
            message.delete(3000)
          })
    }
  };
})

function addUserRole(roleName, message) {
  var role = message.guild.roles.find(role => role.name === roleName);
  message.member.addRole(role.id)

  if (message.content.startsWith("!colorme")) {
    message.delete(3000);
    return;
  }
};

bot.login(botSettings.token);

1 Ответ

0 голосов
/ 07 сентября 2018

Вы в основном делаете:

 if(message.startsWith("!colorme"))
   roles.some(/*..*/)
 {
  //...
 }

Теперь оператор if применяется только к следующему оператору, который является частью roles.some(/*...*/), но {/*..*/} (оператор блока) всегда будет выполняться независимо от того, является ли условие истинным или ложным. Чтобы решить эту проблему, просто переместите оператор в блок:

 if(message.startsWith("!colorme")) { // <----
   roles.some(/*..*/)
   //...
 }
...