2022-06-05 22:58:18 +10:00
|
|
|
const { Message } = require("../models")
|
|
|
|
const axios = require("axios")
|
|
|
|
const ogs = require("open-graph-scraper")
|
|
|
|
const cryptoRandomString = require("crypto-random-string")
|
|
|
|
const blacklist = require("./blacklist.json")
|
|
|
|
module.exports = async function (req, message) {
|
|
|
|
return new Promise(async (resolve, reject) => {
|
|
|
|
try {
|
|
|
|
if (message.content) {
|
2023-02-12 17:01:08 +11:00
|
|
|
const regex = /(https?:\/\/\S+)/g
|
2022-06-05 22:58:18 +10:00
|
|
|
let links = message.content.match(regex)
|
|
|
|
if (links && links.length > 3) {
|
|
|
|
links = links.slice(0, 3)
|
|
|
|
}
|
|
|
|
let embeds = []
|
|
|
|
if (links) {
|
|
|
|
for (let [i, link] of links.entries()) {
|
|
|
|
const linkURL = new URL(link)
|
|
|
|
if (blacklist.includes(linkURL.hostname)) {
|
|
|
|
console.log("Blacklisted link " + linkURL.hostname)
|
|
|
|
embeds.push({
|
|
|
|
link: link,
|
|
|
|
type: "openGraph",
|
|
|
|
openGraph: {
|
|
|
|
ogTitle: "Blacklisted link",
|
|
|
|
ogDescription:
|
|
|
|
"This link cannot be mediaproxied at this time."
|
|
|
|
}
|
|
|
|
})
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
await ogs({
|
|
|
|
url: link,
|
|
|
|
followRedirect: true,
|
|
|
|
followAllRedirects: true,
|
|
|
|
headers: {
|
|
|
|
"user-agent": "Googlebot/2.1 (+http://www.google.com/bot.html)"
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.then(({ result }) => {
|
|
|
|
if (result) {
|
|
|
|
embeds.push({
|
|
|
|
openGraph: result,
|
|
|
|
link: link,
|
|
|
|
type: "openGraph"
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
2023-02-12 17:01:08 +11:00
|
|
|
.catch(async () => {
|
2022-06-05 22:58:18 +10:00
|
|
|
await axios
|
|
|
|
.get(link, {
|
|
|
|
headers: {
|
|
|
|
"user-agent":
|
|
|
|
"Googlebot/2.1 (+http://www.google.com/bot.html)"
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.then((res) => {
|
|
|
|
// if content type is image
|
|
|
|
if (res.headers["content-type"].startsWith("image/")) {
|
|
|
|
const securityToken = cryptoRandomString({ length: 32 })
|
|
|
|
embeds.push({
|
|
|
|
type: "image",
|
|
|
|
link: link,
|
|
|
|
securityToken,
|
|
|
|
mediaProxyLink:
|
|
|
|
"/api/v1/mediaproxy/" +
|
|
|
|
message.id +
|
|
|
|
"/" +
|
|
|
|
i +
|
|
|
|
"/" +
|
|
|
|
securityToken
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.catch(() => {})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
await Message.update(
|
|
|
|
{
|
|
|
|
embeds: embeds
|
|
|
|
},
|
|
|
|
{
|
|
|
|
where: {
|
|
|
|
id: message.id
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
resolve(embeds)
|
|
|
|
} else {
|
|
|
|
reject()
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
reject()
|
|
|
|
}
|
|
|
|
} catch (err) {
|
|
|
|
console.log(err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|