From 89366e84acaa563fc36874cf9b6f68afc978dc23 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Fri, 24 Apr 2020 21:35:44 -0700 Subject: [PATCH] Type utils --- .../discord-bot/{utils.js => utils.ts} | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) rename experiments/skin-database/discord-bot/{utils.js => utils.ts} (78%) diff --git a/experiments/skin-database/discord-bot/utils.js b/experiments/skin-database/discord-bot/utils.ts similarity index 78% rename from experiments/skin-database/discord-bot/utils.js rename to experiments/skin-database/discord-bot/utils.ts index 8b9ce2c5..320631ae 100644 --- a/experiments/skin-database/discord-bot/utils.js +++ b/experiments/skin-database/discord-bot/utils.ts @@ -1,22 +1,31 @@ -const Discord = require("discord.js"); -const rgbHex = require("rgb-hex"); -const Skins = require("../data/skins"); -const logger = require("../logger"); +import { RichEmbed, User, MessageReaction, Channel } from "discord.js"; +import rgbHex from "rgb-hex"; +import * as Skins from "../data/skins"; +import logger from "../logger"; +import { TweetStatus } from "../types"; -function isEligableToApprove(user) { +function isEligableToApprove(user: User): boolean { return !user.bot; } -const filter = reaction => { +const filter = (reaction: MessageReaction): boolean => { const hasNonBot = reaction.users.some(isEligableToApprove); return ( hasNonBot && - ["👍", "👎", "👏", "😔"].some(name => reaction.emoji.name === name) + ["👍", "👎", "👏", "😔"].some((name) => reaction.emoji.name === name) ); }; -async function postSkin({ md5, title, dest }) { +async function postSkin({ + md5, + title: _title, + dest, +}: { + md5: string; + title: (filename: string | null) => string; + dest: Channel; +}) { const skin = await Skins.getSkinByMd5(md5); if (skin == null) { console.warn("Could not find skin for md5", { md5, alert: true }); @@ -35,11 +44,11 @@ async function postSkin({ md5, title, dest }) { tweetStatus, internetArchiveUrl, internetArchiveItemName, - readmeText + readmeText, } = skin; - title = title ? title(canonicalFilename) : canonicalFilename; + const title = _title ? _title(canonicalFilename) : canonicalFilename; - const embed = new Discord.RichEmbed() + const embed = new RichEmbed() .setTitle(title) .addField("Try Online", `[webamp.org](${webampUrl})`, true) .addField("Download", `[${canonicalFilename}](${skinUrl})`, true) @@ -59,7 +68,7 @@ async function postSkin({ md5, title, dest }) { logger.warn("Did not get a safe color", { averageColor, color, - warn: true + warn: true, }); } } catch (e) { @@ -89,11 +98,12 @@ async function postSkin({ md5, title, dest }) { ); } + // @ts-ignore WAT? const msg = await dest.send(embed); await Promise.all([msg.react("👍"), msg.react("👎")]); // TODO: Timeout at some point - await msg.awaitReactions(filter, { max: 1 }).then(async collected => { + await msg.awaitReactions(filter, { max: 1 }).then(async (collected) => { const vote = collected.first(); const user = vote.users.find(isEligableToApprove); switch (vote.emoji.name) { @@ -119,7 +129,7 @@ async function postSkin({ md5, title, dest }) { }); } -function getPrettyTwitterStatus(status) { +function getPrettyTwitterStatus(status: TweetStatus): string { switch (status) { case "APPROVED": return "Approved ✅";