import { Message } from "discord.js"; import got from "got"; import { logger } from "src/logging"; import { Command, ICommandData, Plugin } from "src/model/plugin"; import { tryDo } from "@shared/common/async_utils"; const rcgRe = //i; interface XkcdResponse { img: string; } @Plugin export class Rcg { async sendErrorMessage(msg: Message): Promise { const xkcdResult = await tryDo(got.get("https://xkcd.com/info.0.json", { responseType: "json" })); if(!xkcdResult.ok || !xkcdResult.result) { await msg.reply("sorry, I couldn't get any comics :(."); return; } await msg.reply("sorry, I couldn't get a random comic! Here is today's XKCD instead:", { files: [ xkcdResult.result.body.img ] }); } @Command({ type: "mention", pattern: "random comic", auth: false, documentation: {description: "Generates a comic just for you!", example: "random comic"} }) async randomComic({ message }: ICommandData): Promise { const result = await tryDo(got.get("http://explosm.net/rcg/view/?promo=false")); if (!result.ok) { logger.error("Failed to get RCG. Got error: %s", result.error); await this.sendErrorMessage(message); return; } const regexResult = rcgRe.exec(result.result.body); if(!regexResult) { logger.error("Could not find RCG from body. Got response body: %s", result.result.body); await this.sendErrorMessage(message); return; } const messagePostResult = await tryDo(message.reply("I find this very funny:", { files: [ regexResult[1].trim() ] })); if (!messagePostResult.ok) { logger.error("Failed to get RCG. Got error: %s", messagePostResult.error); await this.sendErrorMessage(message); } } }