Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 1 addition & 26 deletions packages/skin-database/api/DiscordEventHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ export default class DiscordEventHandler {
_clientPromise: Promise<Discord.Client>;

constructor() {
logger.info("DiscordEventHandler: constructing");
const _client = new Discord.Client();
_client.on("ready", () => {
logger.info("DiscordEventHandler: client ready", {
Expand All @@ -35,16 +34,6 @@ export default class DiscordEventHandler {
stack: err?.stack,
});
});
_client.on("messageReactionAdd", (reaction: any, user: any) => {
logger.info("DiscordEventHandler: messageReactionAdd", {
emoji: reaction?.emoji?.name,
msgId: reaction?.message?.id,
channelId: reaction?.message?.channel?.id,
userId: user?.id,
username: user?.username,
userIsBot: user?.bot,
});
});
this._clientPromise = _client
.login(Config.discordToken)
.then(() => _client)
Expand Down Expand Up @@ -76,14 +65,10 @@ export default class DiscordEventHandler {
}

async handle(action: ApiAction): Promise<void> {
const actionMd5 = "md5" in action ? action.md5 : undefined;
logger.info("DiscordEventHandler.handle: entry", {
type: action.type,
md5: actionMd5,
});
try {
await this._handle(action);
} catch (err: any) {
const actionMd5 = "md5" in action ? action.md5 : undefined;
logger.error("DiscordEventHandler.handle: failed", {
type: action.type,
md5: actionMd5,
Expand Down Expand Up @@ -219,19 +204,13 @@ export default class DiscordEventHandler {
}

private async requestReview(md5: string, ctx: UserContext) {
logger.info("requestReview: entry", { md5 });
const skin = await SkinModel.fromMd5(ctx, md5);
if (skin == null) {
logger.warn("requestReview: skin not found", { md5 });
return;
}
const dest = await this.getChannel(Config.NSFW_SKIN_CHANNEL_ID);
const tweetStatus = await skin.getTweetStatus();
logger.info("requestReview: resolved", {
md5,
tweetStatus,
channelId: Config.NSFW_SKIN_CHANNEL_ID,
});
if (tweetStatus === "UNREVIEWED") {
await DiscordUtils.postSkin({
md5,
Expand All @@ -240,10 +219,6 @@ export default class DiscordEventHandler {
source: "graphql:request_nsfw_review_for_skin",
});
} else {
logger.info("requestReview: skipping post, already reviewed", {
md5,
tweetStatus,
});
// Too much nosie
// await DiscordUtils.sendAlreadyReviewed({ md5, dest });
}
Expand Down
51 changes: 6 additions & 45 deletions packages/skin-database/discord-bot/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,6 @@ export async function postSkin({
}) {
const ctx = new UserContext();

const destName = "name" in dest ? dest.name : "DM";
logger.info("postSkin: entry", { md5, source, dest: destName });
const skin = await SkinModel.fromMd5(ctx, md5);
if (skin == null) {
console.warn("Could not find skin for md5", { md5, alert: true });
Expand Down Expand Up @@ -111,62 +109,25 @@ export async function postSkin({

// @ts-ignore WAT?
const msg = await dest.send(embed);
const msgId = Array.isArray(msg) ? msg.map((m) => m.id).join(",") : msg.id;
logger.info("postSkin: sent message", { md5, source, msgId, isArray: Array.isArray(msg) });
if (tweetStatus !== "UNREVIEWED") {
logger.info("postSkin: skipping reactions, not UNREVIEWED", { md5, source, msgId, tweetStatus });
return;
}
const msgId = Array.isArray(msg) ? msg.map((m) => m.id).join(",") : msg.id;
logger.info("postSkin: posted review", { md5, source, msgId });

// Don't await
Promise.all([msg.react("👍"), msg.react("👎"), msg.react("🔞")])
.then(() => logger.info("postSkin: bot reactions added", { md5, source, msgId }))
.catch((err) =>
Promise.all([msg.react("👍"), msg.react("👎"), msg.react("🔞")]).catch(
(err) =>
logger.error("postSkin: bot reactions failed", {
md5,
source,
msgId,
err: err?.message,
stack: err?.stack,
})
);

const loggingFilter = async (
reaction: MessageReaction,
user: User
): Promise<boolean> => {
let passes = false;
let err: string | undefined;
try {
passes = await filter(reaction);
} catch (e: any) {
err = e?.message ?? String(e);
}
logger.info("postSkin: reaction observed", {
md5,
source,
msgId,
emoji: reaction.emoji.name,
userId: user?.id,
username: user?.username,
userIsBot: user?.bot,
passes,
filterErr: err,
});
return passes;
};

logger.info("postSkin: awaiting reactions", { md5, source, msgId });
);
// TODO: Timeout at some point
await msg
.awaitReactions(loggingFilter, { max: 1 })
.then(async (collected) => {
logger.info("postSkin: awaitReactions resolved", {
md5,
source,
msgId,
collectedSize: collected.size,
});
await msg.awaitReactions(filter, { max: 1 }).then(async (collected) => {
const vote = collected.first();
if (vote == null) {
throw new Error("Did not expect vote to be empty");
Expand Down
Loading