让机器人使用播放器命令发送嵌入

时间:2017-11-18 21:32:37

标签: node.js discord.js

我再次需要帮助创建我的不和谐机器人。我正在尝试让机器人使用命令发送嵌入。我的代码太复杂了,无法通过此消息发送,因为我在该命令中具有所有额外的功能,所以我只想说出命令应该是什么样的;

/embed [title]; [description]

之前标题和说明将是

setAuthor(`${message.author.username}`, message.author.displayAvatarURL)

所以嵌入的作者会出现。有关如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

首先,以下是如何使用正则表达式解析命令中的文本:

case /^\/embed \[[\w ]+\]; \[[\w ]+\]$/.test(command):
    sendEmbed(message);
    break;

Regular Expression/^\/embed \[[\w ]+\]; \[[\w ]+\]$/)可细分如下:

  • 开头/^和结束$/件意味着我们正在尝试匹配整个字符串/命令。
  • /embed与确切的文字"embed"
  • 相匹配
  • \[[\w ]+\]用于标题和描述,并匹配方括号"[]"中的文本,其中文本为字母(大写或小写),数字,下划线或空格。如果您需要更多字符,例如"!""-",我可以告诉您如何添加这些字符。
  • .test(command)正在测试正则表达式是否与命令中的文本匹配,并返回布尔值(true / false)。

现在你把那个正则表达式检查代码放在你的消息/命令监听器中,然后像这样调用你的send embed函数(我把它命名为sendEmbed):

// set message listener 
client.on('message', message => {
    let command = message.content;

    // match commands like /embed [title]; [description]
    // first \w+ is for the title, 2nd is for description
    if ( /^\/embed \[[\w ]+\]; \[[\w ]+\]$/.test(command) )
        sendEmbed(message);
});

function sendEmbed(message) {
    let command = message.content;
    let channel = message.channel;
    let author = message.author;

    // get title string coordinates in command
    let titleStart = command.indexOf('[');
    let titleEnd = command.indexOf(']');
    let title = command.substr(titleStart + 1, titleEnd - titleStart - 1);

    // get description string coordinates in command
    // -> (start after +1 so we don't count '[' or ']' twice)
    let descStart = command.indexOf('[', titleStart + 1);
    let descEnd = command.indexOf(']', titleEnd + 1);
    let description = command.substr(descStart + 1, descEnd - descStart - 1);

    // next create rich embed
    let embed = new Discord.RichEmbed({
        title: title,
        description: description
    });

    // set author based of passed-in message
    embed.setAuthor(author.username, author.displayAvatarURL);

    // send embed to channel
    channel.send(embed);
}

如果您有任何疑问,请告诉我们。