# Description - Create a command to generate an embed for the user to be able to buy more effects - This embed will contain the details about the effect as well as 2 buttons; Confirm and Cancel - The confirm button will call the button event to: - Remove the currency from the user - Give the user the effect to their inventory - The cancel button will just disable the buttons, so the user can't accidentally use it if they don't want to. #381 ## Type of change Please delete options that are not relevant. - [x] New feature (non-breaking change which adds functionality) # How Has This Been Tested? - Have created unit tests and tested locally # Checklist - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that provde my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules Reviewed-on: #424 Reviewed-by: VylpesTester <tester@vylpes.com> Co-authored-by: Ethan Lane <ethan@vylpes.com> Co-committed-by: Ethan Lane <ethan@vylpes.com>
62 lines
No EOL
2.1 KiB
TypeScript
62 lines
No EOL
2.1 KiB
TypeScript
import { ActionRowBuilder, ButtonBuilder, ButtonStyle, CommandInteraction, EmbedBuilder } from "discord.js";
|
|
import { EffectDetails } from "../../constants/EffectDetails";
|
|
import AppLogger from "../../client/appLogger";
|
|
import EffectHelper from "../../helpers/EffectHelper";
|
|
import TimeLengthInput from "../../helpers/TimeLengthInput";
|
|
import EmbedColours from "../../constants/EmbedColours";
|
|
|
|
export default async function Use(interaction: CommandInteraction) {
|
|
const id = interaction.options.get("id", true).value!.toString();
|
|
|
|
const effectDetail = EffectDetails.get(id);
|
|
|
|
if (!effectDetail) {
|
|
AppLogger.LogWarn("Commands/Effects", `Unable to find effect details for ${id}`);
|
|
|
|
await interaction.reply("Unable to find effect!");
|
|
return;
|
|
}
|
|
|
|
const canUseEffect = await EffectHelper.CanUseEffect(interaction.user.id, id);
|
|
|
|
if (!canUseEffect) {
|
|
await interaction.reply("Unable to use effect! Please make sure you have it in your inventory and is not on cooldown");
|
|
return;
|
|
}
|
|
|
|
const timeLengthInput = TimeLengthInput.ConvertFromMilliseconds(effectDetail.duration);
|
|
|
|
const embed = new EmbedBuilder()
|
|
.setTitle("Effect Confirmation")
|
|
.setDescription("Would you like to use this effect?")
|
|
.setColor(EmbedColours.Ok)
|
|
.addFields([
|
|
{
|
|
name: "Effect",
|
|
value: effectDetail.friendlyName,
|
|
inline: true,
|
|
},
|
|
{
|
|
name: "Length",
|
|
value: timeLengthInput.GetLengthShort(),
|
|
inline: true,
|
|
},
|
|
]);
|
|
|
|
const row = new ActionRowBuilder<ButtonBuilder>()
|
|
.addComponents([
|
|
new ButtonBuilder()
|
|
.setLabel("Confirm")
|
|
.setCustomId(`effects use confirm ${effectDetail.id}`)
|
|
.setStyle(ButtonStyle.Primary),
|
|
new ButtonBuilder()
|
|
.setLabel("Cancel")
|
|
.setCustomId(`effects use cancel ${effectDetail.id}`)
|
|
.setStyle(ButtonStyle.Danger),
|
|
]);
|
|
|
|
await interaction.reply({
|
|
embeds: [ embed ],
|
|
components: [ row ],
|
|
});
|
|
} |