javascript - 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。为什么是这样?
我熟悉实现相同结果的其他方法,如正则表达式,但在我更改代码之前,我想知道为什么这不起作用,我将来可能需要它
解决方案
有一个简单的方法来测试它:
const mentions = message.mentions.members.array() || new Array();
如果message.mentions.members.array()
是null
,它将设置mentions
为new Array()
。
推荐阅读
- java - Apache Camel 内存不足异常
- r - R 使用 mcapply() 使用多个内核而不使用循环
- javascript - 从特定 IP 地址服务 webpack 开发服务器
- mysql - 如何从记录中提取列值
- javascript - 使用 Graph API 无法使用过滤器参数获取特定日期的事件
- regex - 正则表达式多重匹配
- python - Python - 用平均值替换缺失值
- android-studio - 通过android studio中的录音机检测语音
- unity3d - "Transform.SetParent(parent, false)" 到另一个画布,游戏对象的锚点更改不正确
- mysql - 在 mysql 上使用 JPARepository 批量复制链接的行