首页 > 解决方案 > Discord.js 如何发布公告命令

问题描述

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

标签: discord.js

解决方案


基本命令设置

在制作基本命令时,您首先要设置的是这样的:

<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')。这很重要,因为当向机器人发送命令时,例如+ann上面您想要的命令,消息的标准格式是

<prefix><command> <arguments>

因此,稍后在您的代码中,您可以使用command在一个字符串中同时获取前缀和命令,让您可以查看是否有人希望机器人做某事,或者他们是否只是与朋友聊天并且什么都不想做用机器人做。

最后, args 是其余单词的数组,在本例中为['there,', 'Cloudy', 'Sounds!']

通过结合使用这 3 个变量,您可以轻松地从消息中提取所有重要信息。

获取频道

由于用户的命令将包含一个提到的频道,我们要做的第一件事就是将该频道作为Discord.js 频道类,以便我们以后可以向它发送消息。

为此,我们可以将结果存储message.mentions.channels()到中channel。由于我们要在公会中提到一个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(" ");

把它们放在一起

现在我们有了announcementand 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,如果您对此答案有任何问题,或者需要进一步说明,请告诉我!


推荐阅读