Discord Bot - 设置嵌入表/列表,内容分为多个部分

Posted

技术标签:

【中文标题】Discord Bot - 设置嵌入表/列表,内容分为多个部分【英文标题】:Discord Bot - Setting up an embed table/list with contents split into sections 【发布时间】:2020-04-26 05:00:05 【问题描述】:

我还在学习 javascript 等,进入 discord.js,所以我很确定我输入的代码是绝对错误的,肯定需要工作。

基本上我要做的是拆分命令的参数并将它们分成嵌入的新行。

例如,如果我要这样做:!results "Result 1" "Result 2" "Result 3",它会输出到一个嵌入的表格中:

RESULTS:
Result 1
Result 2
Result 3

相反,我的输出一直显示为:

Image of what happens in discord

我在谷歌上搜索过各种不同的东西,但我似乎找不到我需要的东西。

const  RichEmbed  = require("discord.js");

module.exports = 
    name: "results",
    category: "info",
    description: "posts results in embed",
    usage: "<mention, id>",
    run: async (client, message, args) => 
            if (message.deletable) message.delete();

        let [result1, result2, result3, result4, result5, result6, result7] = args;

        if (!args[0])
            return message.channel.send("Please provide Result 1.").then(m => m.delete(5000));
        if (!args[1])
            return message.channel.send("Please provide Result 2.").then(m => m.delete(5000));
        if (!args[2])
            return message.channel.send("Please provide Result 3.").then(m => m.delete(5000));
        if (!args[3])
            return message.channel.send("Please provide Result 4.").then(m => m.delete(5000));
        if (!args[4])
            return message.channel.send("Please provide Result 5.").then(m => m.delete(5000));
        if (!args[5])
            return message.channel.send("Please provide Result 6.").then(m => m.delete(5000));
        if (!args[6])
            return message.channel.send("Please provide Result 7.").then(m => m.delete(5000));

        const channel = message.guild.channels.find(c => c.name === "cards")

        if (!channel)
                return message.channel.send("Couldn't find a `#cards` channel").then(m => m.delete(5000));

        const embed = new RichEmbed()
            .setColor("RANDOM")
            .setTimestamp()
            .setAuthor("Posted by GM:", (message.author.username, message.author.displayAvatarURL))
            .setTitle("**TestTitle**")
            .setFooter(message.guild.name, message.guild.iconURL)
            .setDescription(`**__Results!__**`)
            .addField(`**> Result 1:** $result1`)
            .addField(`**> Result 2:** $result2`)
            .addField(`**> Result 3:** $result3`)
            .addField(`**> Result 4:** $result4`)
            .addField(`**> Result 5:** $result5`)
            .addField(`**> Result 6:** $result6`)            
            .addField(`**> Result 7:** $result7`);


        return channel.send(embed);
    

编辑:我已经取得了一些进展,这是最新的代码,这是输出:

IMAGE

【问题讨论】:

邮政编码,以便有人可以尝试看看出了什么问题。 【参考方案1】:

您正在添加一个需要标题和值的字段。但你只是给它一个价值。 我建议只使用描述字段并用新行分隔你的东西。它通常会看起来更好。请务必记住,描述字段最多只能达到2048 characters。

您可以查看以下指南: https://discordjs.guide/popular-topics/embeds.html#embed-preview

【讨论】:

谢谢!我现在完全理解了,并设法弄清楚了这一切。我还想找出要从“引号”内部拆分的命令中的 args 例如,运行命令 !results "result 1" "result 2" 我希望 "result 1" 成为 arg (0)。等等 我不知道 Discord.js 是否有一些预构建的方法可以将输入解析为参数。建议先调查一下。如果没有,也许带有捕获组的正则表达式可以解决问题。像"(.+)" 这样的简单正则表达式就可以解决问题。【参考方案2】:

为了解析参数,您可能必须创建一个新的分隔符,使用逗号或其他东西。

    const prefix = "!";
    if (message.author.bot) return;  // exit processing if author is a bot
    if (!message.content.startsWith(prefix)) return;  // exit processing if message is not a bot command

    const commandBody = message.content.slice(prefix.length);
    const args = commandBody.split(' ');
    const command = args.shift().toLowerCase();

    if(command === "ping")
        message.channel.send("Hello");
    
    if(command === "test")
        message.channel.send("it is a good day for testing!");
        if (args.length > 0) 
            message.channel.send("Hello " + args[0]);
        
    

您可以将 .split(' ') 更改为逗号 .split(',')

所以用户会输入 !test,myName 机器人会回复:

it is a good dat for testing
Hello myName

【讨论】:

以上是关于Discord Bot - 设置嵌入表/列表,内容分为多个部分的主要内容,如果未能解决你的问题,请参考以下文章

在 Discord Bot 中嵌入 Gif

Discord bot 嵌入消息错误 长度必须为 2048 或更少

Bot 上线,但嵌入不会发布到 discord

Discord Bot Python 让它创建嵌入

Discord Python Bot - Bot 的消息不会自动嵌入链接/图像/等

discord.py bot 不会在嵌入中加载视频