基本命令设置
在制作基本命令时,您首先要设置的是这样的:
<Discord.Client instance here>.on("message", message => {
if(message.author.bot) return;
let messageArray = message.content.split(" ");
let command = messageArray[0];
let args = messageArray.slice(1);
}
这是做什么的?
首先,只要机器人“接收”一条消息,就会调用这些花括号内的代码。这意味着只要消息在它所属的任何服务器中的任何频道(包括 DM) 中发送,代码就会运行。此函数的第一行确保发送消息的用户不是机器人,因为您不希望其他机器人在您的机器人上触发命令。
然后,这段代码对message 进行了一些简单的拆分,因此messageArray 是消息中每个单词 的数组,由空格确定。例如,这意味着如果我发送Hello there, Cloudy Sounds!,messageArray 将包含以下内容:
['Hello', 'there,', 'Cloudy', 'Sounds!']
command 是此消息的第一个单词(在本例中为 'Hello')。这很重要,因为当向 bot 发送命令时,例如上面您想要的 +ann 命令,消息的标准格式是
<prefix><command> <arguments>
因此,稍后在您的代码中,您可以使用command 在一个字符串中同时获取前缀和命令,让您可以查看是否有人希望机器人做某事,或者他们是否只是在聊天一个朋友,不想与机器人有任何关系。
最后,args 是其余单词的数组,在本例中为 ['there,', 'Cloudy', 'Sounds!']。
通过结合使用这 3 个变量,您可以轻松地从消息中提取所有重要信息。
获取频道
由于用户的命令将包含一个提到的频道,我们要做的第一件事就是将该频道设为Discord.js Channel Class,以便我们稍后可以向它发送消息。
为此,我们可以将message.mentions.channels() 的结果存储到channel 中。因为我们要在guild 中提到chanel,所以我们首先要确保它不是DM,并且command 实际上以我们的前缀开头,在这种情况下是'+' .所以现在,我们的代码如下所示:
<Discord.Client instance here>.on("message", message => {
if(message.author.bot) return;
let messageArray = message.content.split(" ");
let command = messageArray[0];
let args = messageArray.slice(1);
if(message.channel.type === "dm") return;
if(!message.content.startsWith('+')) return;
if(command === '+ann') {
let channel = message.mentions.channels();
}
}
提取公告
现在我们已经发布了channel,我们希望通过message 发布我们的公告。我们将使用args 来执行此操作。
那么,我们该怎么做呢?
首先,我们知道args[1] 将是频道的提及('#channel'),所以这不是命令的一部分。但是,其他所有内容是我们公告的一部分,因此我们使用以下内容将所有内容组合成一个字符串:
let announcement = args.slice(1).join(" ");
把它们放在一起
现在我们有了announcement 和channel,我们终于可以send 了。
最终的代码是:
<Discord.Client instance here>.on("message", message => {
if(message.author.bot) return;
let messageArray = message.content.split(" ");
let command = messageArray[0];
let args = messageArray.slice(1);
if(message.channel.type === "dm") return;
if(!message.content.startsWith('+')) return;
if(command === '+ann') {
let channel = message.mentions.channels();
let announcement = args.slice(1).join(" ");
channel.send(announcement);
}
}
欢迎来到 Stack Overflow,如果您对此答案有任何问题或需要进一步说明,请告诉我!