剪切 Discord 消息的特定部分?不和谐.js

Posted

技术标签:

【中文标题】剪切 Discord 消息的特定部分?不和谐.js【英文标题】:Cut a specific part of a Discord message possibe? Discord.js 【发布时间】:2020-09-07 09:18:25 【问题描述】:

我是德国 Discord 服务器和 Minecraft 服务器的所有者,正在编写自己的 Discord 机器人来解决输入相同事物或任何内容(新闻、赠品等)数百次的问题,并且需要以下方面的帮助问题:

我想发出一个命令(通常是这个机器人的 p/[command])在特定频道中发送 Givaway 新闻。我以为“没问题”,但我被 Discord.js 上的切片问题困住了。我希望命令像我只需要连续编写属性一样工作。

p/giveaway [Date of Ending] [Time of Ending] [number of Winners] [Price to Win] [optional conditions to participate] [optional Text as desciption] 

例子:

Example Input:

p/giveaway 01.01.2020 00:00 20 something nothing some text

Example output should be:

Runtime till 01.01.2020 at 00:00 o clock
Noumber of winners: 20
What you can win: something
Conditions: nothing
some text

布局没问题,但我不知道如何拆分消息,以免消息混乱。我希望机器人遵循严格的模板。

如果有什么不清楚的地方,请随时提问。

这是我目前得到的代码。它可以工作,除了输出被磨损,因为我不知道如何分割消息的后面部分,所以它只是缓存消息的特定部分。

到目前为止我得到的代码:

bot.on("message", function(message) 

//     command

        if(message.content.startsWith("p/giveaway"))

//     vars, etc

            let destination = bot.channels.cache.get("[Discord-channel ID here]")
            var timetorun = message.content.split(" ").slice(1).join(" ");
            var TIMEtorun = message.content.split(" ").slice(2).join(" ");
            var winner = message.content.split(" ").slice(3).join(" ");
            var price = message.content.split(" ").slice(4).join(" ");
            var conditions = message.content.split(" ").slice(5).join(" ");
            var text = message.content.split(" ").slice(6).join(" ");

//     Embed

            const GiveawayEmbed = new Discod.MessageEmbed()
            .setColor("#0099ff")
            .setTitle("")
            .setAuthor("Server Giveaway", "https://i.imgur.com/MMiVcKH.png")
            .setThumbnail("https://i.imgur.com/MMiVcKH.png")
            .addFields( name:"->", value: ("Runtime till " + (timetorun) + " at " + (TIMEtorun) + " o clock" + "\nNoumber of winners: " + (winner) + "\nWhat you can win: " + (price) + "\nConditions: " + (conditions) + "\n" + (text))
            )       
            .setFooter("The general rules of ... apply  -  ... .net")

//     Code

            if(!timetorun || !TIMEtorun || !winner || !price) 
                message.channel.send("\nuse the folling format to use this command: [Date of Ending] [Time of Ending] [number of Winners] [Price to Win] [optional conditions to participate] [optional Text as desciption]");
                return;
            ;

//     permissions

            if(!message.member.hasPermission("ADMINISTRATOR"))
                message.channel.send("``` \nYou are not allowed to do that! \n ```");
                return;
            ;

//     finaly send

            destination.send(GiveawayEmbed);
        ;
;

This is how the Bot actually replyes

感谢您的帮助!

【问题讨论】:

【参考方案1】:

首先,我们要将消息拆分为单词数组并将其存储为变量:

const args = message.content.split(' ')

使用您的示例输入,其值将如下所示:

[
  "p/giveaway",
  "01.01.2020",
  "00:00',
  "20',
  "something",
  "nothing",
  "some",
  "text"
]

现在,我们可以花一些时间来了解.slice() 函数的作用。事实上,在 javascript 中,数组从 0 开始索引,我们运行 args.slice(5)。它应该返回以下内容:

[
  "nothing",
  "some",
  "text"
]

请注意,我们现在有了索引为5 的字符串,以及它之后的所有其他字符串。这就是为什么您会在帖子中获得链接的输出。相反,您应该做的是只获取您感兴趣的索引,如下所示:

args[1] // 01.01.2020
args[4] // something

如果您想更好地了解.slice() 的工作原理,建议您阅读this Mozilla Developer Network page (here it is in deutsch too)。

【讨论】:

以上是关于剪切 Discord 消息的特定部分?不和谐.js的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js ReferenceError:未定义消息

从特定消息中删除特定用户反应 - Discord.js

如何使不和谐机器人将消息发送到不和谐 Node js 的特定频道机器人

使用 discord.js 查找不和谐消息的内容

自定义不和谐机器人:在特定文本通道中发送消息

我的不和谐机器人循环了很多消息(discord.js)