【问题标题】:Discord.js how to make an announcement commandDiscord.js 如何发布公告命令
【发布时间】:2019-03-05 07:17:40
【问题描述】:

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

【问题讨论】:

标签: discord.js


【解决方案1】:

基本命令设置

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

<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 命令,消息的标准格式是

&lt;prefix&gt;&lt;command&gt; &lt;arguments&gt;

因此,稍后在您的代码中,您可以使用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(" ");

把它们放在一起

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

【讨论】:

    【解决方案2】:

    试试这个:

    .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);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-26
      • 2020-09-14
      • 2020-07-05
      • 2020-12-31
      • 1970-01-01
      • 2020-01-14
      • 2021-06-02
      • 2020-10-11
      • 2021-10-06
      相关资源
      最近更新 更多