我想做的是将嵌入图片设置为args[0]
的值,如果它不起作用,则将嵌入图片设置为默认的有效链接。
我有此代码:
const exampleEmbed = new Discord.MessageEmbed();
exampleEmbed.addField('Its a title!', 'Its a value!');
try {
exampleEmbed.setImage(args[0]);
}
catch (error) {
exampleEmbed.setImage('https://i.imgur.com/wSTFkRM.png');
};
message.channel.send(exampleEmbed);
问题是,当args [0]不是有效的url(例如“ https://”或“ https://.com”之类的东西)时,try
块仍将执行成功并且catch
块将不会执行。
但是,由于链接无效,当我要发送嵌入内容时会收到以下错误消息:
(node:19196) UnhandledPromiseRejectionWarning: DiscordAPIError: Invalid Form Body embed.image.url: Not a well formed URL.
答案 0 :(得分:1)
使用URL类验证args[0]
:
const exampleEmbed = new Discord.MessageEmbed();
exampleEmbed.addField('Its a title!', 'Its a value!');
let url = validateURL(args[0]);
if (url) {
exampleEmbed.setImage(url);
} else {
exampleEmbed.setImage('https://i.imgur.com/wSTFkRM.png');
}
message.channel.send(exampleEmbed);
function validateURL(url) {
try {
return (new URL(url)).toString();
} catch (e) {
console.error(e);
return null;
}
}
答案 1 :(得分:1)
您可以使用正则表达式匹配器检查args[0]
的内容,如果它与URI模式不匹配,则可能会引发错误。
const exampleEmbed = new Discord.MessageEmbed();
exampleEmbed.addField('Its a title!', 'Its a value!');
try {
if (!(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g).test(args[0])) {
throw new Error(`Invalid URL`);
}
exampleEmbed.setImage(args[0]);
}
catch (error) {
exampleEmbed.setImage('https://i.imgur.com/wSTFkRM.png');
};
message.channel.send(exampleEmbed);