From 5ddb7833ecf240955d539e74fe29cfa2fade4f90 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Wed, 2 Dec 2020 15:18:18 -0500 Subject: [PATCH] Add !debug command --- packages/skin-database/data/IaItemModel.ts | 10 ++++++ packages/skin-database/data/SkinModel.ts | 5 ++- .../discord-bot/commands/debug.ts | 31 +++++++++++++++++++ packages/skin-database/discord-bot/index.js | 1 + 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 packages/skin-database/discord-bot/commands/debug.ts diff --git a/packages/skin-database/data/IaItemModel.ts b/packages/skin-database/data/IaItemModel.ts index 2f272849..8d27064f 100644 --- a/packages/skin-database/data/IaItemModel.ts +++ b/packages/skin-database/data/IaItemModel.ts @@ -6,6 +6,10 @@ import { knex } from "../db"; const IA_URL = /^(https:\/\/)?archive.org\/details\/([^/]+)\/?/; +export type IaItemDebugData = { + row: IaItemRow; +}; + export default class IaItemModel { constructor(readonly ctx: UserContext, readonly row: IaItemRow) {} @@ -65,6 +69,12 @@ export default class IaItemModel { } return identifier; } + + async debug(): Promise { + return { + row: this.row, + }; + } } const getIaItemLoader = ctxWeakMapMemoize>( diff --git a/packages/skin-database/data/SkinModel.ts b/packages/skin-database/data/SkinModel.ts index 6bf71e71..dcf047d8 100644 --- a/packages/skin-database/data/SkinModel.ts +++ b/packages/skin-database/data/SkinModel.ts @@ -2,7 +2,7 @@ import { getScreenshotUrl, getSkinUrl } from "./skins"; import { TweetStatus, SkinRow, ReviewRow } from "../types"; import UserContext, { ctxWeakMapMemoize } from "./UserContext"; import TweetModel, { TweetDebugData } from "./TweetModel"; -import IaItemModel from "./IaItemModel"; +import IaItemModel, { IaItemDebugData } from "./IaItemModel"; import FileModel, { FileDebugData } from "./FileModel"; import { MD5_REGEX } from "../utils"; import DataLoader from "dataloader"; @@ -136,14 +136,17 @@ export default class SkinModel { reviews: ReviewRow[]; tweets: TweetDebugData[]; files: FileDebugData[]; + iaItem: IaItemDebugData | null; }> { const tweets = await this.getTweets(); const files = await this.getFiles(); + const iaItem = await this.getIaItem(); return { row: this.row, reviews: await this.getReviews(), tweets: await Promise.all(tweets.map((tweet) => tweet.debug())), files: await Promise.all(files.map((file) => file.debug())), + iaItem: iaItem == null ? null : await iaItem.debug(), }; } } diff --git a/packages/skin-database/discord-bot/commands/debug.ts b/packages/skin-database/discord-bot/commands/debug.ts new file mode 100644 index 00000000..fc506e44 --- /dev/null +++ b/packages/skin-database/discord-bot/commands/debug.ts @@ -0,0 +1,31 @@ +import { Message } from "discord.js"; + +import UserContext from "../../data/UserContext"; +import SkinModel from "../../data/SkinModel"; + +const TRIPPLE = "```"; + +async function handler(message: Message, args: [string]) { + const ctx = new UserContext(); + const [anything] = args; + if (anything == null) { + message.channel.send(` is required.`); + return; + } + const skin = await SkinModel.fromAnything(ctx, anything); + if (skin == null) { + message.channel.send(`Could not find a skin matching ${anything}`); + return; + } + const data = await skin.debug(); + await message.channel.send( + [TRIPPLE, JSON.stringify(data, null, 2), TRIPPLE].join("") + ); +} + +module.exports = { + usage: "", + description: "Show debug information about a skin", + command: "debug", + handler, +}; diff --git a/packages/skin-database/discord-bot/index.js b/packages/skin-database/discord-bot/index.js index d9f57fa9..5b25e131 100644 --- a/packages/skin-database/discord-bot/index.js +++ b/packages/skin-database/discord-bot/index.js @@ -12,6 +12,7 @@ const commands = [ require("./commands/review"), require("./commands/screenshot"), require("./commands/skin"), + require("./commands/debug"), require("./commands/stats"), require("./commands/tweet"), ];