首页 > 解决方案 > Discord.js:message.mentions.members.array() 工作正常,直到消息满足某个 if 语句的条件

问题描述

我在 Discord.js 中有以下用于审核机器人的代码。

const Discord = require("discord.js");
const client = new Discord.Client();
const gekickt = new Discord.RichEmbed()
  .setColor("#AE0202")
  .setTitle("Je bent gekickt")

client.on("message", message => {
  const guild = message.guild
  const author = message.member
  const mentions = message.mentions.members.array();
  console.log(mentions)
  console.log(message.content)
  const actualcontent = message.content.replace(/<@.+>/g, "")
  console.log(actualcontent)
  if (message.content.startsWith("!kick")) {
    if (author.hasPermission("KICK_MEMBERS")) {
      if (mentions.length > 0) {
        const reason = actualcontent.replace("!kick", "")
        for (member in mentions) {
          mentions[member].send(gekickt
            .setDescription("uit de " + message.guild.name + " server")
            .addField("Door:", message.author.name)
            .addField("Reden:", reason))
          mentions[member].kick(reason)
        }
      } else {
        message.channel.send("**Error**: no users were mentioned to kick")
      }
    } else {
      message.channel.send("**Error**: you aren't allowed to use the command!")
    }
  }
})

我的 !kick 命令需要至少提到一个或多个成员才能踢。为了实现这一点,我使用了消息的提及属性,我从中获取成员并将它们放入数组中。当我发送带有提及的常规消息时,代码可以正常工作。但是当我输入带有提及的 !kick 命令时,const mentions = message.mentions.members.array();突然返回 null。为什么是这样?

我熟悉实现相同结果的其他方法,如正则表达式,但在我更改代码之前,我想知道为什么这不起作用,我将来可能需要它

标签: javascriptnode.jsdiscorddiscord.js

解决方案


有一个简单的方法来测试它:

const mentions = message.mentions.members.array() || new Array();

如果message.mentions.members.array()null,它将设置mentionsnew Array()


推荐阅读