import { Commands, type CommandsType } from "commands"; import type { ButtonInteraction, CacheType, ChatInputCommandInteraction, Interaction, ModalSubmitInteraction, } from "discord.js"; import client from "lib/client"; import EventEmitter from "node:events"; import DiscordService from "services/discord.service"; import config from "config"; import { WaterMeService } from "actions/waterMe/waterMe.service"; import { MedicationService } from "actions/medication/medication.service"; import { HelpService } from "actions/help/help.service"; import { custom } from "zod"; export default class DiscordController extends EventEmitter { private discordService!: DiscordService; waterMeService: WaterMeService; medicationService: MedicationService; helpService: HelpService; constructor() { super(); this.discordService = new DiscordService(); this.waterMeService = new WaterMeService(); this.medicationService = new MedicationService(); this.helpService = new HelpService(); // log when running client.once("ready", async () => { this.setActivity(); /*const channels = client.channels; const channel = channels.cache.get(config.discord.channelId); if (channel?.isTextBased && channel?.isSendable()) { await channel.send({ content: "bin wieder da :o war kurz weg :3", }); }*/ }); // listen for interactions client.on("interactionCreate", this.handleInteraction.bind(this)); } async setActivity() { client.user?.setActivity("frohes neues :3", { type: 4 }); console.log("set activity"); client.user?.setPresence({ status: "online", }); } async init() { await this.discordService.init(); } async handleInteraction(interaction: Interaction) { if (interaction.isModalSubmit()) { await this.handleModalSubmit(interaction); return; } if (interaction.isChatInputCommand()) { await this.handleChatInputCommand(interaction); return; } if (interaction.isButton()) { await this.handleButton(interaction); return; } } async handleButton(interaction: ButtonInteraction) { const { customId } = interaction; console.log(interaction.customId); if (customId.toLowerCase().includes("moreWater")) { await this.waterMeService.handleInteraction(interaction); } if (customId.toLowerCase().includes("medication")) { await this.medicationService.handleInteraction(interaction); } } async handleChatInputCommand( interaction: ChatInputCommandInteraction, ) { const commandName = interaction.commandName as CommandsType; // add commands switch (commandName) { case Commands.Enum.giessen: await this.waterMeService.handleInteraction(interaction); return; case Commands.Enum.medikamente: await this.medicationService.handleInteraction(interaction); return; case Commands.Enum.hilfe: await this.helpService.handleInteraction(interaction); return; default: break; } } // wenn neues fenster durch buttonclick or so async handleModalSubmit(interaction: ModalSubmitInteraction) { const { customId } = interaction; switch (customId) { default: break; } } }