mirror of
https://github.com/captbaritone/webamp.git
synced 2026-01-24 02:36:00 +00:00
94 lines
2.9 KiB
JavaScript
94 lines
2.9 KiB
JavaScript
const Discord = require("discord.js");
|
|
const rgbHex = require("rgb-hex");
|
|
const { getInfo } = require("./info");
|
|
const { approve, reject, getStatus } = require("./s3");
|
|
|
|
const filter = reaction => {
|
|
return ["👍", "👎"].some(name => reaction.emoji.name === name);
|
|
};
|
|
|
|
async function postSkin({ filename, md5, title, dest }) {
|
|
const screenshotUrl = `https://s3.amazonaws.com/webamp-uploaded-skins/screenshots/${md5}.png`;
|
|
const skinUrl = `https://s3.amazonaws.com/webamp-uploaded-skins/skins/${md5}.wsz`;
|
|
const webampUrl = `https://webamp.org?skinUrl=${skinUrl}`;
|
|
|
|
const embed = new Discord.RichEmbed()
|
|
.setTitle(title)
|
|
.addField("Try Online", `[webamp.org](${webampUrl})`, true)
|
|
.addField("Download", `[${filename}](${skinUrl})`, true)
|
|
.addField("Md5", md5, true)
|
|
.setImage(screenshotUrl);
|
|
|
|
const info = getInfo(md5);
|
|
if (info == null) {
|
|
embed.addField("Warning", "Cached metadata not found", true);
|
|
} else {
|
|
if (info.averageColor) {
|
|
const color = rgbHex(info.averageColor);
|
|
if (String(color).length === 6) {
|
|
embed.setColor(`#${color}`);
|
|
} else {
|
|
console.log("Did not get a safe color from ", info.averageColor);
|
|
console.log("Got ", color);
|
|
}
|
|
}
|
|
if (info.emails != null && info.emails.length) {
|
|
const uniqueEmails = Array.from(new Set(info.emails));
|
|
// TODO: Fix email parsing
|
|
embed.addField("Emails", uniqueEmails.join(", "), true);
|
|
}
|
|
if (info.tweetUrl != null) {
|
|
let likes = "";
|
|
if (info.twitterLikes != null) {
|
|
likes = `(${Number(info.twitterLikes).toLocaleString()} likes) `;
|
|
}
|
|
embed.addField(
|
|
"Tweet Status",
|
|
`[Tweeted](${info.tweetUrl}) ${likes}🐦`,
|
|
true
|
|
);
|
|
} else {
|
|
const status = await getStatus(md5);
|
|
if (status === "UNREVIEWED") {
|
|
embed.setFooter("React with 👍 or 👎 to approve or deny");
|
|
}
|
|
embed.addField("Tweet Status", getPrettyTwitterStatus(status), true);
|
|
}
|
|
}
|
|
|
|
const msg = await dest.send(embed);
|
|
|
|
await msg.awaitReactions(filter, { max: 1 }).then(async collected => {
|
|
const vote = collected.first();
|
|
const user = vote.users.first();
|
|
switch (vote.emoji.name) {
|
|
case "👍":
|
|
await approve(md5);
|
|
console.log(`${user.username} approved ${md5}`);
|
|
await msg.channel.send(`${filename} was approved by ${user.username}`);
|
|
msg.react("✅");
|
|
break;
|
|
case "👎":
|
|
await reject(md5);
|
|
console.log(`${user.username} rejected ${md5}`);
|
|
await msg.channel.send(`${filename} was rejected by ${user.username}`);
|
|
msg.react("❌");
|
|
break;
|
|
}
|
|
});
|
|
}
|
|
|
|
function getPrettyTwitterStatus(status) {
|
|
switch (status) {
|
|
case "APPROVED":
|
|
return "Approved ✅";
|
|
case "REJECTED":
|
|
return "Rejected ❌";
|
|
case "UNREVIEWED":
|
|
return "Unreviewed ❔";
|
|
case "TWEETED":
|
|
return "Tweeted 🐦";
|
|
}
|
|
}
|
|
|
|
module.exports = { postSkin };
|