Handle missing skins better and move s3 update from Python to JS

This commit is contained in:
Jordan Eldredge 2019-10-10 09:32:12 -04:00
parent b98667d1c5
commit b76eadf10e
3 changed files with 35 additions and 18 deletions

View file

@ -7,6 +7,7 @@ const path = require("path");
const logger = require("./logger");
const Skins = require("./data/skins");
const db = require("./db");
const S3 = require("./s3");
const { spawn } = require("child_process");
@ -39,7 +40,12 @@ function spawnPromise(command, args) {
async function main() {
switch (argv._[0]) {
case "tweet":
const { md5, filename } = await findTweetableSkin();
const tweetableSkin = await findTweetableSkin();
if(tweetableSkin == null) {
logger.info("Could not find a skin to tweet");
break;
}
const { md5, filename } = tweetableSkin;
const output = await spawnPromise(
path.resolve(__dirname, "../tweetBot/tweet.py"),
[
@ -49,6 +55,7 @@ async function main() {
//, "--dry"
]
);
S3.markAsTweeted(md5);
logger.info("Tweeted a skin", { md5, filename, output });
break;
case "fetch-metadata":

View file

@ -60,25 +60,23 @@ async function getStats() {
getFile("approved.txt"),
getFile("rejected.txt"),
getFile("tweeted.txt"),
getTweetableSkins()
getTweetableSkins(),
]);
return {
approved: new Set(getLines(approved)).size,
rejected: new Set(getLines(rejected)).size,
tweeted: new Set(getLines(tweeted)).size,
tweetable: tweetable.length
tweetable: tweetable.length,
};
}
async function getSkinToReview() {
console.log("Reading from s3...");
const [filenames, approved, rejected, tweeted] = await Promise.all([
getFile("filenames.txt"),
getFile("approved.txt"),
getFile("rejected.txt"),
getFile("tweeted.txt"),
]);
console.log("Got all files");
const approvedSet = new Set(getLines(approved));
const rejectedSet = new Set(getLines(rejected));
@ -89,38 +87,38 @@ async function getSkinToReview() {
const [md5, ...filename] = line.split(" ");
return { md5, filename: filename.join(" ") };
});
const toReview = skins.filter(({ md5 }) => {
return skins.find(({ md5 }) => {
return !(
approvedSet.has(md5) ||
rejectedSet.has(md5) ||
tweetedSet.has(md5)
);
});
console.log(toReview.length, "skins to review");
return toReview[0];
}
async function getTweetableSkins() {
console.log("Reading from s3...");
const [filenames, approved, rejected, tweeted] = await Promise.all([
getFile("filenames.txt"),
getFile("approved.txt"),
getFile("rejected.txt"),
getFile("tweeted.txt"),
]);
console.log("Got all files");
const rejectedSet = new Set(getLines(rejected));
const tweetedSet = new Set(getLines(tweeted));
const approvedSet = new Set(getLines(approved));
const filenameLines = getLines(filenames);
return filenameLines.map(line => {
const [md5, ...filename] = line.split(" ");
return { md5, filename: filename.join(" ") };
}).filter(({md5}) => {
return approvedSet.has(md5) && !rejectedSet.has(md5) && !tweetedSet.has(md5);
});
return filenameLines
.map(line => {
const [md5, ...filename] = line.split(" ");
return { md5, filename: filename.join(" ") };
})
.filter(({ md5 }) => {
return (
approvedSet.has(md5) && !rejectedSet.has(md5) && !tweetedSet.has(md5)
);
});
}
async function getSkinToTweet() {
const tweetableSkins = await getTweetableSkins();
@ -141,4 +139,16 @@ async function reject(md5) {
return appendLine("rejected.txt", md5);
}
module.exports = { getSkinToReview, approve, reject, getStatus, getStats, getSkinToTweet };
async function markAsTweeted(md5) {
return appendLine("tweeted.txt", md5);
}
module.exports = {
getSkinToReview,
approve,
reject,
getStatus,
getStats,
getSkinToTweet,
markAsTweeted,
};

View file

@ -151,7 +151,7 @@ Download: %s""" % (
if not dry:
url = tweet(status_message, screenshot_path)
Webhook(CONFIG["discord_url"], msg=url).post()
append_line("tweeted.txt", md5)
# append_line("tweeted.txt", md5)
else:
print("Would have tweeted: %s" % status_message)
print("With media file: %s" % screenshot_path)