From d874cb7a12b16e2ad693f097f2b9bacab5c2eafd Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Mon, 16 Dec 2024 19:32:28 +0000 Subject: [PATCH] WIP: Start creating confirmation embed --- src/buttonEvents/Effects.ts | 55 +++++++++++++++++++++++++++++++++- src/commands/effects.ts | 44 +++++++++++++-------------- src/helpers/EffectHelper.ts | 20 ++++++++++--- src/helpers/TimeLengthInput.ts | 3 ++ 4 files changed, 94 insertions(+), 28 deletions(-) diff --git a/src/buttonEvents/Effects.ts b/src/buttonEvents/Effects.ts index 0810c94..8cefbf7 100644 --- a/src/buttonEvents/Effects.ts +++ b/src/buttonEvents/Effects.ts @@ -1,6 +1,7 @@ -import {ButtonInteraction} from "discord.js"; +import {ButtonInteraction,EmbedBuilder} from "discord.js"; import {ButtonEvent} from "../type/buttonEvent"; import EffectHelper from "../helpers/EffectHelper"; +import { EffectDetails } from "../constants/EffectDetails"; export default class Effects extends ButtonEvent { public override async execute(interaction: ButtonInteraction) { @@ -10,6 +11,9 @@ export default class Effects extends ButtonEvent { case "list": await this.List(interaction); break; + case "use": + await this.Use(interaction); + break; } } @@ -30,4 +34,53 @@ export default class Effects extends ButtonEvent { components: [ result.row ], }); } + + private async Use(interaction: ButtonInteraction) { + const subaction = interaction.customId.split(" ")[2]; + + switch (subaction) { + case "confirm": + await this.UseConfirm(interaction); + break; + } + } + + private async UseConfirm(interaction: ButtonInteraction) { + const id = interaction.customId.split(" ")[3]; + + const effectDetail = EffectDetails.get(id); + + if (!effectDetail) { + await interaction.reply("Unable to find effect!"); + return; + } + + const now = new Date(); + const whenExpires = new Date(now.getMilliseconds() + effectDetail.duration); + + const result = await EffectHelper.UseEffect(interaction.user.id, id, whenExpires); + + if (result) { + const embed = new EmbedBuilder() + .setTitle("Effect Used") + .setDescription("You now have an active effect!") + .addFields([ + { + name: "Effect", + value: effectDetail.friendlyName, + inline: true, + }, + { + name: "Expires", + value: ``, + inline: true, + }, + ]); + + await interaction.update({ embeds: [ embed ] }); + return; + } + + await interaction.reply("Unable to use effect! Please make sure you have it in your inventory and is not on cooldown"); + } } diff --git a/src/commands/effects.ts b/src/commands/effects.ts index c7059e8..3fe30ef 100644 --- a/src/commands/effects.ts +++ b/src/commands/effects.ts @@ -2,6 +2,7 @@ import {CommandInteraction, EmbedBuilder, SlashCommandBuilder} from "discord.js" import {Command} from "../type/command"; import EffectHelper from "../helpers/EffectHelper"; import {EffectDetails} from "../constants/EffectDetails"; +import UserEffect from "../database/entities/app/UserEffect"; export default class Effects extends Command { constructor() { @@ -67,32 +68,29 @@ export default class Effects extends Command { return; } - const now = new Date(); - const whenExpires = new Date(now.getMilliseconds() + effectDetail.duration); + const canUseEffect = await EffectHelper.CanUseEffect(interaction.user.id, id) - const result = await EffectHelper.UseEffect(interaction.user.id, id, whenExpires); - - if (result) { - const embed = new EmbedBuilder() - .setTitle("Effect Used") - .setDescription("You now have an active effect!") - .addFields([ - { - name: "Effect", - value: effectDetail.friendlyName, - inline: true, - }, - { - name: "Expires", - value: ``, - inline: true, - }, - ]); - - await interaction.reply({ embeds: [ embed ] }); + if (!canUseEffect) { + await interaction.reply("Unable to use effect! Please make sure you have it in your inventory and is not on cooldown"); return; } - await interaction.reply("Unable to use effect! Please make sure you have it in your inventory and is not on cooldown"); + const embed = new EmbedBuilder() + .setTitle("Effect Confirmation") + .setDescription("Would you like to use this effect?") + .addFields([ + { + name: "Effect", + value: effectDetail.friendlyName, + inline: true, + }, + { + name: "Length", + value: "", + inline: true, + }, + ]); + + await interaction.reply({ embeds: [ embed ] }); } } diff --git a/src/helpers/EffectHelper.ts b/src/helpers/EffectHelper.ts index 3aaca15..26aab8c 100644 --- a/src/helpers/EffectHelper.ts +++ b/src/helpers/EffectHelper.ts @@ -17,6 +17,22 @@ export default class EffectHelper { } public static async UseEffect(userId: string, name: string, whenExpires: Date): Promise { + const canUseEffect = await this.CanUseEffect(userId, name); + + if (!canUseEffect) return false; + + const effect = await UserEffect.FetchOneByUserIdAndName(userId, name); + + if (!effect) return false; + + effect.UseEffect(whenExpires); + + await effect.Save(UserEffect, effect); + + return true; + } + + public static async CanUseEffect(userId: string, name: string): Promise { const effect = await UserEffect.FetchOneByUserIdAndName(userId, name); const now = new Date(); @@ -34,10 +50,6 @@ export default class EffectHelper { return false; } - effect.UseEffect(whenExpires); - - await effect.Save(UserEffect, effect); - return true; } diff --git a/src/helpers/TimeLengthInput.ts b/src/helpers/TimeLengthInput.ts index d1d8734..8fa232d 100644 --- a/src/helpers/TimeLengthInput.ts +++ b/src/helpers/TimeLengthInput.ts @@ -118,4 +118,7 @@ export default class TimeLengthInput { return desNumber; } + + public static ConvertFromMilliseconds(ms: number): TimeLengthInput { + } } \ No newline at end of file