From 03d36358bf8f94f0e42fd596cf6ac0a6cebdf442 Mon Sep 17 00:00:00 2001 From: Moritz Riese Date: Sat, 28 Dec 2024 20:09:43 +0100 Subject: [PATCH] wip medication and db (sqlite) --- bun.lockb | Bin 13570 -> 37265 bytes package.json | 5 +- process.env | 1 + .../drink}/drink.service.ts | 0 src/{tasks => actions/drink}/drink.task.ts | 0 src/actions/greeting/greeting.components.ts | 2 + .../greeting}/greeting.service.ts | 19 ++-- src/actions/greeting/greeting.task.ts | 26 +++++ .../medication/medication.components.ts | 10 ++ src/actions/medication/medication.service.ts | 94 ++++++++++++++++++ src/actions/medication/medication.task.ts | 15 +++ .../waterMe/waterMe.service.ts} | 0 .../waterMe/waterMe.task.ts} | 2 +- src/components/commands.component.ts | 8 +- src/controllers/discord.controller.ts | 13 ++- .../medication.service.ts => db/schema.ts} | 0 src/index.ts | 15 ++- src/tasks/greeting.task.ts | 27 ----- src/tasks/medication.task.ts | 0 19 files changed, 191 insertions(+), 46 deletions(-) create mode 100644 process.env rename src/{services => actions/drink}/drink.service.ts (100%) rename src/{tasks => actions/drink}/drink.task.ts (100%) create mode 100644 src/actions/greeting/greeting.components.ts rename src/{services => actions/greeting}/greeting.service.ts (66%) create mode 100644 src/actions/greeting/greeting.task.ts create mode 100644 src/actions/medication/medication.components.ts create mode 100644 src/actions/medication/medication.service.ts create mode 100644 src/actions/medication/medication.task.ts rename src/{services/water-me.service.ts => actions/waterMe/waterMe.service.ts} (100%) rename src/{tasks/water-me.task.ts => actions/waterMe/waterMe.task.ts} (84%) rename src/{services/medication.service.ts => db/schema.ts} (100%) delete mode 100644 src/tasks/greeting.task.ts delete mode 100644 src/tasks/medication.task.ts diff --git a/bun.lockb b/bun.lockb index 95e0258e7a5fb5748fef196fef7cc9ab7647aa0b..0dfbcb6b144426c4d5655378ab05ce52c281a710 100755 GIT binary patch literal 37265 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 delta 2588 zcmcgueN2^Q6o205a=*ZH?>;s>a^c^xp%o~t@Vco&i%c=_c_mb z&NdElux?9jn^%?UB3#?kN{9oou@~cJrAfmRru)xz}4ugf5wV z-n6cy%yBaQ8zV$_XG^_KRQyJR=PN=a07t>&fQexq1)KtY1MeC4N+IHbL*SEu%`Nro zgFYb+hIw1CV57gIp|vg8?B9TQqtLi67!Knh7MKR)j(#qbhEL)LP6Fp5HGD>PDN zj3!?(QfG{29YIMJ!9?mNb`yorw#G!26Ex%NNV}Xqw>~D%m}qc0Z&;elv3FR=Yo}m5%m(2 zp_qK0bzL5YsJ%#nqCz5BxB6e$#WO0h!VdlmvOOZRjgFR30Sg+{>LJAGN}=;ASXe75EBICKt|`|+_j70PWq9#|kND+SVb`d4WJi34@VUYXI-zXHNks-v#Pj_&4scE~JRSGA zU|g(pDEH&`o^Z0Md8F2@jF!#o+ZuvxNSHpTD^^tcvCiR$+;#Kc;D+G5pR zq83q;&q-yDBz>&rXbQh|SN7o&o{@Fy6HT&^2}#$Xz`RFBvEdZFg@+PhLI zR!dc${X~V*efH$YZT!&>jaN3_+L4CAT(CeGx-UC5`%01zhGTtbM4I0&$8F_aN!NXL znXgc^-z^cX=C795qUcq>{a<{HcP@J{R8&rnHF9Aenq0DT=;G0-da3k;Z%5I@fL+EK zDJM|vj9l3LCwFgqFL1^Wy9#(Ha$$yE3poBMgh;Ll#)@Jt%ejEPEb^^TS95se$;20X z^*Jb2v2`L}6CW0D{qyV-sd0KRm^mSqn<>A^o*em1u(r(p`pU9BpGxIJNjbE|)r{B%-iZ%xohx64IdZWpmY{JgKfA{vW#&3EiU(J*X&wnv4jT0ss z-C~~}`6B5ntl61;XwEDQ;dZG-ZneV4n-j7>kCI#GQEjU$X$f5MSILVNrKgmRiFdyb zn*>VeK { + console.log("good morning"); + await greetingService.greet(); + }, // onTick + null, // onComplete + true, // start + "Europe/Berlin", // timeZone +); + +new CronJob( + "0 30 22 * * *", + async () => { + console.log("good night"); + await greetingService.sleep(); + }, + null, + true, + "Europe/Berlin", +); \ No newline at end of file diff --git a/src/actions/medication/medication.components.ts b/src/actions/medication/medication.components.ts new file mode 100644 index 0000000..ef4c52d --- /dev/null +++ b/src/actions/medication/medication.components.ts @@ -0,0 +1,10 @@ +import { ButtonBuilder, ButtonStyle } from "discord.js"; + +export const yesButton = new ButtonBuilder() + .setCustomId("yesMedication") + .setLabel("ja") + .setStyle(ButtonStyle.Primary); +export const noButton = new ButtonBuilder() + .setCustomId("noMedication") + .setLabel("noch nicht") + .setStyle(ButtonStyle.Secondary); diff --git a/src/actions/medication/medication.service.ts b/src/actions/medication/medication.service.ts new file mode 100644 index 0000000..7abab37 --- /dev/null +++ b/src/actions/medication/medication.service.ts @@ -0,0 +1,94 @@ +import { CronJob } from "cron"; +import { getRandomInt } from "lib/utils"; +import config from "config"; +import client from "lib/client"; +import { + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + type CacheType, + type Interaction, +} from "discord.js"; +import { yesButton, noButton } from "./medication.components"; + +export class MedicationService { + medication: string; + tookMedication: boolean; + + constructor() { + this.medication = ""; + this.tookMedication = false; + } + + async askMedication() { + const channels = client.channels; + + const channel = channels.cache.get(config.discord.channelId); + + // funkt noch nicht, beides + + const row = new ActionRowBuilder().addComponents(yesButton); + row.addComponents(noButton); + + if (channel?.isTextBased && + channel?.isSendable() && + this.tookMedication == false) { + await channel.send({ content: "hast du schon deine medis genommen? :)", components: [row as any] }); + } + + } + + getMedication() { + throw new Error("Method not implemented."); + } + + setMedication() { + const reply = this.getReply(); + console.log("medication"); + + // this.medication = input von user:in hier rein; + return { + reply, + } + } + + getReply() { + return "medication reminder"; + } + + async handleInteraction(interaction: Interaction) { + const result = this.setMedication(); + + const yesButton = new ButtonBuilder() + .setCustomId("yesMedication") + .setLabel("ja") + .setStyle(ButtonStyle.Primary); + const noButton = new ButtonBuilder() + .setCustomId("noMedication") + .setLabel("noch nicht") + .setStyle(ButtonStyle.Secondary); + + const row = new ActionRowBuilder().addComponents(yesButton); + row.addComponents(noButton); + + if (interaction.isChatInputCommand()) { + await interaction.reply({ + content: result.reply, + // biome-ignore lint/suspicious/noExplicitAny: + components: [row as any], + }); + } else if (interaction.isButton()) { + console.log("button interaction"); + if (interaction.customId == "yesMedication") { + interaction.reply({ + content: "das hast du toll gemacht <3 mach weiter so :3", + }); + } else if (interaction.customId == "noMedication") { + interaction.reply({ + content: "das passiert mal... aber versuch sie heute noch zu nehmen, oki? :)", + }); + } + + } + } +} \ No newline at end of file diff --git a/src/actions/medication/medication.task.ts b/src/actions/medication/medication.task.ts new file mode 100644 index 0000000..cff5e6f --- /dev/null +++ b/src/actions/medication/medication.task.ts @@ -0,0 +1,15 @@ +import { CronJob } from "cron"; +import { MedicationService } from "actions/medication/medication.service"; + +const medicationService = new MedicationService(); + +new CronJob( + "0 0 19 * * *", // cronTime + async () => { + console.log("askMedication()"); + await medicationService.askMedication(); + }, // onTick + null, // onComplete + true, // start + "Europe/Berlin", // timeZone +); \ No newline at end of file diff --git a/src/services/water-me.service.ts b/src/actions/waterMe/waterMe.service.ts similarity index 100% rename from src/services/water-me.service.ts rename to src/actions/waterMe/waterMe.service.ts diff --git a/src/tasks/water-me.task.ts b/src/actions/waterMe/waterMe.task.ts similarity index 84% rename from src/tasks/water-me.task.ts rename to src/actions/waterMe/waterMe.task.ts index 73b8e8a..62e1dc6 100644 --- a/src/tasks/water-me.task.ts +++ b/src/actions/waterMe/waterMe.task.ts @@ -1,5 +1,5 @@ import { CronJob } from "cron"; -import { WaterMeService } from "services/water-me.service"; +import { WaterMeService } from "actions/waterMe/waterMe.service"; const waterMeService = new WaterMeService(); diff --git a/src/components/commands.component.ts b/src/components/commands.component.ts index e7f16c7..cc0e802 100644 --- a/src/components/commands.component.ts +++ b/src/components/commands.component.ts @@ -1,14 +1,18 @@ import { SlashCommandBuilder } from "discord.js"; import { z } from "zod"; -export const Commands = z.enum(["water-me"]); +export const Commands = z.enum(["giessen", "medikamente"]); export type CommandsType = z.output; export default function getCommands() { const commands = [ new SlashCommandBuilder() - .setName(Commands.Enum["water-me"]) + .setName(Commands.Enum.giessen) .setDescription("giess mich mit etwas wasser :3"), + + new SlashCommandBuilder() + .setName(Commands.Enum.medikamente) + .setDescription("ich erinnere dich gerne daran, deine medikamente zu nehmen! :)"), ].map((command) => command.toJSON()); return commands; diff --git a/src/controllers/discord.controller.ts b/src/controllers/discord.controller.ts index 507f297..d926b09 100644 --- a/src/controllers/discord.controller.ts +++ b/src/controllers/discord.controller.ts @@ -9,17 +9,20 @@ import type { import client from "lib/client"; import EventEmitter from "node:events"; import DiscordService from "services/discord.service"; -import { WaterMeService } from "services/water-me.service"; +import { WaterMeService } from "actions/waterMe/waterMe.service"; import config from "config"; +import { MedicationService } from "actions/medication/medication.service"; export default class DiscordController extends EventEmitter { private discordService!: DiscordService; waterMeService: WaterMeService; + medicationService: MedicationService; constructor() { super(); this.discordService = new DiscordService(); this.waterMeService = new WaterMeService(); + this.medicationService = new MedicationService(); // log when running client.once("ready", async () => { console.log("hello :)"); @@ -64,6 +67,9 @@ export default class DiscordController extends EventEmitter { if (customId === "moreWater") { await this.waterMeService.handleInteraction(interaction); } + if (customId.toLowerCase().includes("medication")) { + await this.medicationService.handleInteraction(interaction); + } } async handleChatInputCommand( @@ -73,9 +79,12 @@ export default class DiscordController extends EventEmitter { // add commands switch (commandName) { - case Commands.Enum["water-me"]: + case Commands.Enum.giessen: await this.waterMeService.handleInteraction(interaction); return; + case Commands.Enum.medikamente: + await this.medicationService.handleInteraction(interaction); + return; default: break; } diff --git a/src/services/medication.service.ts b/src/db/schema.ts similarity index 100% rename from src/services/medication.service.ts rename to src/db/schema.ts diff --git a/src/index.ts b/src/index.ts index 059bbf8..84aedfe 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,17 @@ -import "tasks/water-me.task"; -import "tasks/greeting.task"; -import "tasks/drink.task"; +import "actions/waterMe/waterMe.task"; +import "actions/greeting/greeting.task"; +import "actions/medication/medication.task" +import "actions/drink/drink.task"; import DiscordController from "controllers/discord.controller"; +import 'dotenv/config'; +import { drizzle } from 'drizzle-orm/bun-sqlite'; +import { Database } from 'bun:sqlite'; + +const sqlite = new Database(process.env.DB_FILE_NAME!); +const db = drizzle({ client: sqlite }); + + // = main file // bootstrap application diff --git a/src/tasks/greeting.task.ts b/src/tasks/greeting.task.ts deleted file mode 100644 index 1abd451..0000000 --- a/src/tasks/greeting.task.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { CronJob } from "cron"; -import { GreetingService } from "services/greeting.service"; - -const greetingService = new GreetingService(); - -new CronJob( - "0 */30 7-23 * * *", // cronTime - async () => { - console.log("called greeting"); - await greetingService.greet(); - }, // onTick - null, // onComplete - true, // start - "Europe/Berlin", // timeZone -); - -new CronJob( - "0 */30 0-6 * * *", // cronTime - async () => { - console.log("called greeting"); - await greetingService.sleep(); - }, // onTick - null, // onComplete - true, // start - "Europe/Berlin", // timeZone -); -// job.start() is optional here because of the fourth parameter set to true. diff --git a/src/tasks/medication.task.ts b/src/tasks/medication.task.ts deleted file mode 100644 index e69de29..0000000