работает только в том случае, если содержимое author.name это точные или оставшиеся слова

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

Вопрос:

Бот реагирует только тогда, когда содержимое author.name точно, но если у него есть дополнительное слово, оно не работает, но не выдает пример ошибки:

 const ListClaims = ["rick sanchez", "alex", "juan"];
 

rick sanchez не имеет ошибки, потому что это с точностью до ListClaims

rick sanchez morty имеет ошибку, потому что в нем есть дополнительные буквы, которые morty ,

     var ListClaims = ["rick sanchez","alex","juan"];

    if(message.embeds.length >= 0) 
    // Check if the Message has embed or not
    {
      let embed = message.embeds
      // console.log(embed) just a console.log
      for(let i = 0; i < embed.length; i  )
      {
        if (!embed[i] || !embed[i].author || embed[i].author.name === null) return;
        // check each embed if it has setAuthor or not, if it doesnt then do nothing
        {
        if(embed[i].author.name.toLowerCase().includes(ListClaims))
        // check each embed if it includes word
        {
          message.react('🎉')
        }
        }
      }
    }
 

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

1. Можете ли вы четко сформулировать, какова ваша цель? Ваш вопрос-это просто изложение того, что происходит в данный момент.

2. Я отформатировал ваш пост, но фрагмент содержит некоторые ошибки (призрачные скобки), поэтому я не трогал ваш код, вы должны исправить это сами, так как я не хочу ломать ваше приложение 🙂

Ответ №1:

Я переформулировал ваш код, чтобы его было проще и легче читать. Если вы приведете лучший пример того, что вы хотите, чтобы произошло, я могу отредактировать этот ответ, чтобы решить его лучше.

 function messageHandler() {

  const msg = {
    embeds: [
      { author: { name: "alex" }},
      { author: { name: "john"}},
      { author: { name: "rick sanchez morty"}},
    ]
  }

  const listClaims = ["rick sanchez", "alex", "juan"];

  // 0 is falsey by default, so you dont have to check if it's  == 0.
  if (!msg.embeds.length) return;
  // Check if the Message has embed or not

  msg.embeds.forEach(embed => {
    // "", null and undefined are also falsey, so we don't need to check them.
    // also this if statement is not needed, since you can just do Array.includes().
    if (!embed.author.name) return;

    // .includes() is an array method, not a string method, so you have to do Array.includes(target), not target.includes(array).
    if (listClaims.includes(embed.author.name.toLowerCase())) message.react('🎉');
  });
}

const message = {
  react: console.log
};

messageHandler()