import { Message } from "discord.js"; import { getRepository } from "typeorm"; import { RandomMessageReaction } from "@shared/db/entity/RandomMesssageReaction"; import { client } from "src/client"; import { Event, BotEventData, Plugin } from "src/model/plugin"; import { tryDo } from "@shared/common/async_utils"; import { logger } from "src/logging"; const timeout = (ms: number) => new Promise(r => setTimeout(r, ms)); @Plugin export class RandomReact { @Event("message") async showHelp({ actionsDone }: BotEventData, msg: Message): Promise { if(actionsDone) return; const repo = getRepository(RandomMessageReaction); const reactInfo = await repo.findOne({ where: { userId: msg.author.id } }); if(!reactInfo) return; const emote = client.bot.emojis.resolve(reactInfo.reactionEmoteId); if(!emote) return; if(Math.random() < reactInfo.reactProbability) { await timeout(Math.random() * reactInfo.maxWaitMs); const result = await tryDo(msg.react(emote)); if (!result.ok) { logger.error("Failed to react to user %s#%s (%s): %s", msg.author.username, msg.author.discriminator, msg.author.id, result.error); } } } }