From e8dcfd834060eb6bd11c194b36ec78f64040556e Mon Sep 17 00:00:00 2001 From: kenobi Date: Mon, 26 Jun 2023 23:47:43 +0200 Subject: [PATCH] add votecontroller to consolidate handling of votes --- server/helper/vote.controller.ts | 33 ++++++++++++++++++++++++++++++++ server/structures/client.ts | 2 ++ 2 files changed, 35 insertions(+) create mode 100644 server/helper/vote.controller.ts diff --git a/server/helper/vote.controller.ts b/server/helper/vote.controller.ts new file mode 100644 index 0000000..8d342e6 --- /dev/null +++ b/server/helper/vote.controller.ts @@ -0,0 +1,33 @@ +import { Message, MessageReaction, User } from "discord.js" +import { client } from "../.." +import { NONE_OF_THAT } from "../constants" +import { logger } from "../logger" +import { messageIsVoteMessage } from "./messageIdentifiers" +import { getMembersWithRoleFromGuild } from "./roleFilter" +import { config } from "../configuration" + +export default class VoteController { + + public async handleNoneOfThatVote(messageReaction: MessageReaction, user: User, reactedUponMessage: Message, requestId: string, guildId: string) { + if (!messageReaction.message.guild) return 'No guild' + if (messageIsVoteMessage(reactedUponMessage)) { + logger.debug(`${reactedUponMessage.id} is vote message`, { requestId, guildId }) + if (messageReaction.message.reactions.cache.find(reaction => reaction.emoji.toString() == NONE_OF_THAT)) { + const watcherRoleMember = await getMembersWithRoleFromGuild(config.bot.announcement_role, messageReaction.message.guild) + logger.info("ROLE MEMBERS " + JSON.stringify(watcherRoleMember), { requestId, guildId }) + const watcherRoleMemberCount = watcherRoleMember.size + logger.info(`MEMBER COUNT: ${watcherRoleMemberCount}`, { requestId, guildId }) + let noneOfThatReactions = messageReaction.message.reactions.cache.get(NONE_OF_THAT)?.users.cache.filter(x => x.id !== client.user?.id).size ?? 0 + + const memberThreshold = (watcherRoleMemberCount / 2) + logger.info(`Reroll ${noneOfThatReactions} > ${memberThreshold} ?`, { requestId, guildId }) + if (noneOfThatReactions > memberThreshold) { + logger.info('Starting poll reroll', { requestId, guildId }) + messageReaction.message.edit((messageReaction.message.content ?? "").concat('\nDiese Abstimmung muss wiederholt werden.')) + } + logger.info(`No reroll`, { requestId, guildId }) + } + } + + } +} diff --git a/server/structures/client.ts b/server/structures/client.ts index fe08582..9e0c2d8 100644 --- a/server/structures/client.ts +++ b/server/structures/client.ts @@ -10,6 +10,7 @@ import { logger } from "../logger"; import { CommandType } from "../types/commandTypes"; import { checkForPollsToClose } from "../commands/closepoll"; import { messageIsInitialAnnouncement } from "../helper/messageIdentifiers"; +import VoteController from "../helper/vote.controller"; @@ -17,6 +18,7 @@ export class ExtendedClient extends Client { private eventFilePath = `${__dirname}/../events` private commandFilePath = `${__dirname}/../commands` private jellyfin: JellyfinHandler + public VoteController: VoteController = new VoteController() public commands: Collection = new Collection() private announcementChannels: Collection = new Collection() //guildId to TextChannel private announcementRoleHandlerTask: Collection = new Collection() //one task per guild