如何检查嵌入图像是否具有有效/有效的链接?

时间:2020-10-30 17:39:47

标签: javascript node.js discord discord.js

我想做的是将嵌入图片设置为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.

2 个答案:

答案 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);