random_react.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { Message } from "discord.js";
  2. import { getRepository } from "typeorm";
  3. import { RandomMessageReaction } from "@shared/db/entity/RandomMesssageReaction";
  4. import { client } from "src/client";
  5. import { Event, BotEventData, Plugin } from "src/model/plugin";
  6. import { tryDo } from "@shared/common/async_utils";
  7. import { logger } from "src/logging";
  8. const timeout = (ms: number) => new Promise(r => setTimeout(r, ms));
  9. @Plugin
  10. export class RandomReact {
  11. @Event("message")
  12. async showHelp({ actionsDone }: BotEventData, msg: Message): Promise<void> {
  13. if(actionsDone)
  14. return;
  15. const repo = getRepository(RandomMessageReaction);
  16. const reactInfo = await repo.findOne({ where: { userId: msg.author.id } });
  17. if(!reactInfo)
  18. return;
  19. const emote = client.bot.emojis.resolve(reactInfo.reactionEmoteId);
  20. if(!emote)
  21. return;
  22. if(Math.random() < reactInfo.reactProbability) {
  23. await timeout(Math.random() * reactInfo.maxWaitMs);
  24. const result = await tryDo(msg.react(emote));
  25. if (!result.ok) {
  26. logger.error("Failed to react to user %s#%s (%s): %s", msg.author.username, msg.author.discriminator, msg.author.id, result.error);
  27. }
  28. }
  29. }
  30. }