我正在尝试为运行discord.js的discord机器人发出公告命令。例如,如果我说+ann (#CHANNEL) (ANNOUNCEMENT)
,它将在此处发布。我没有任何代码,并且一直在寻找年龄。你能帮忙吗?
答案 0 :(得分:2)
执行基本命令时,您要设置的第一件事是这样的:
<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
是消息中每个 word 的数组,由空格决定。例如,这意味着如果我发送了Hello there, Cloudy Sounds!
,messageArray
将包含以下内容:
['Hello', 'there,', 'Cloudy', 'Sounds!']
command
是此消息的第一个单词(在本例中为'Hello'
)。这很重要,因为在向机器人发送命令(例如您上面想要的+ann
命令)时,消息的标准格式为
<prefix><command> <arguments>
因此,在您的代码后面,您可以使用command
在一个字符串中同时获取前缀和命令,从而使您可以查看是否有人希望机器人执行某项操作,或者仅仅是与朋友聊天,不希望与该机器人无关。
最后,args是其余单词的数组,在本例中为['there,', 'Cloudy', 'Sounds!']
。
通过结合使用这三个变量,您可以轻松地从消息中提取所有重要信息。
由于用户的命令将包含一个提到的频道,所以我们要做的第一件事就是将该频道设为Discord.js Channel Class,以便稍后向其发送消息。
为此,我们可以将message.mentions.channels()
的结果存储到channel
中。由于我们将在chanel中提到guild,因此我们要确保它不是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,如果您对此答案有任何疑问或需要进一步说明,请与我联系!
答案 1 :(得分:0)
尝试一下:
.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);
}