我再次需要帮助创建我的不和谐机器人。我正在尝试让机器人使用命令发送嵌入。我的代码太复杂了,无法通过此消息发送,因为我在该命令中具有所有额外的功能,所以我只想说出命令应该是什么样的;
/embed [title]; [description]
之前标题和说明将是
setAuthor(`${message.author.username}`, message.author.displayAvatarURL)
所以嵌入的作者会出现。有关如何做到这一点的任何想法?
答案 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);
}
如果您有任何疑问,请告诉我们。