【问题标题】:How to make Embeds which reads the data from the message?如何制作从消息中读取数据的嵌入?
【发布时间】:2019-01-09 23:38:07
【问题描述】:

我正在尝试制作一个 Discord 机器人来发布公告。我想创建一个从消息中读取数据并将其转换为嵌入式消息的命令。

示例命令:!announce Title, Description, Link, Image

const Discord = require('discord.js');
const bot = new Discord.Client();

//listener
bot.on('ready', () => {
  bot.user.setGame('Hello!')
});

bot.on('message', (message) => {

if(message.content == 'text') {
    const embed = new Discord.RichEmbed()

    .setTitle("Title!")
    .setDescription("Description")
    .setImage("https://i.imgur.com/xxxxxxxx.png")
    .setURL("https://google.com")
    .addField("Text", true)

    //Nope
    .setThumbnail("https://i.imgur.com/Rmiwd1j.png")
    .setColor(0x00AE86)
    .setFooter("Footer", "https://i.imgur.com/xxxxxxxx.png")

    .setTimestamp()

    /*
     * Blank field, useful to create some space.
     */      
    message.channel.send({embed});

}});

bot.login('token');

我希望根据文本更改嵌入。 我该怎么做?

【问题讨论】:

    标签: discord discord.js


    【解决方案1】:

    首先,您需要检测命令:您可以使用String.startsWith() 检测!announce

    if (message.content.startsWith('!announce')) {...}
    

    然后你必须通过拆分字符串来获取命令的其他部分:你可以用逗号分隔它们,就像你做的那样(标题,描述,...),或者你想要的任何字符(我' 将在我的示例中使用逗号)。
    String.slice() 将帮助您摆脱 !announce 部分,而 String.split() 将创建一个包含其他部分的数组。

    此代码将从命令!announce Title, Description, http://example.com/, http://www.hardwarewhore.com/wp-content/uploads/2018/03/dcord.png 生成类似this 的嵌入

    client.on("message", message => {
      if (message.content.startsWith('!announce')) {
        let rest_of_the_string = message.content.slice('!announce'.length); //removes the first part
        let array_of_arguments = rest_of_the_string.split(','); //[title, description, link, image]
    
        let embed = new Discord.RichEmbed()
          .setTitle(array_of_arguments[0])
          .setDescription(array_of_arguments[1])
          .setImage(array_of_arguments[3])
          .setURL(array_of_arguments[2])
          .addField("Text", true)
          .setThumbnail("https://i.imgur.com/Rmiwd1j.png")
          .setColor(0x00AE86)
          .setFooter("Footer", array_of_arguments[3])
          .setTimestamp();
    
        message.channel.send({ embed });
      }
    });
    

    我建议使用文本而不是描述,并提醒.addField() 的第二个参数是文本,而不是内联值

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 1970-01-01
      • 2022-01-22
      • 2020-09-05
      • 2019-08-28
      • 2021-12-13
      • 2021-12-12
      • 1970-01-01
      • 2013-04-18
      相关资源
      最近更新 更多