Discord.js如何发出公告命令

时间:2018-09-29 15:21:25

标签: discord.js

我正在尝试为运行discord.js的discord机器人发出公告命令。例如,如果我说+ann (#CHANNEL) (ANNOUNCEMENT),它将在此处发布。我没有任何代码,并且一直在寻找年龄。你能帮忙吗?

2 个答案:

答案 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(" ");

将它们放在一起

现在我们有了announcementchannel,我们终于可以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);
}