Command to allow the user to buy more effects (#424)
# 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>
This commit is contained in:
parent
c6b458199c
commit
5089ad6ab6
20 changed files with 942 additions and 97 deletions
|
@ -2,6 +2,9 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "disc
|
|||
import UserEffect from "../database/entities/app/UserEffect";
|
||||
import EmbedColours from "../constants/EmbedColours";
|
||||
import { EffectDetails } from "../constants/EffectDetails";
|
||||
import User from "../database/entities/app/User";
|
||||
import CardConstants from "../constants/CardConstants";
|
||||
import AppLogger from "../client/appLogger";
|
||||
|
||||
export default class EffectHelper {
|
||||
public static async AddEffectToUserInventory(userId: string, name: string, quantity: number = 1) {
|
||||
|
@ -66,7 +69,7 @@ export default class EffectHelper {
|
|||
return true;
|
||||
}
|
||||
|
||||
public static async GenerateEffectEmbed(userId: string, page: number): Promise<{
|
||||
public static async GenerateEffectListEmbed(userId: string, page: number): Promise<{
|
||||
embed: EmbedBuilder,
|
||||
row: ActionRowBuilder<ButtonBuilder>,
|
||||
}> {
|
||||
|
@ -126,4 +129,66 @@ export default class EffectHelper {
|
|||
row,
|
||||
};
|
||||
}
|
||||
|
||||
public static async GenerateEffectBuyEmbed(userId: string, id: string, quantity: number, disabled: boolean): Promise<{
|
||||
embed: EmbedBuilder,
|
||||
row: ActionRowBuilder<ButtonBuilder>,
|
||||
} | string> {
|
||||
const effectDetail = EffectDetails.get(id);
|
||||
|
||||
if (!effectDetail) {
|
||||
return "Effect detail not found!";
|
||||
}
|
||||
|
||||
const totalCost = effectDetail.cost * quantity;
|
||||
|
||||
let user = await User.FetchOneById(User, userId);
|
||||
|
||||
if (!user) {
|
||||
user = new User(userId, CardConstants.StartingCurrency);
|
||||
await user.Save(User, user);
|
||||
|
||||
AppLogger.LogInfo("EffectHelper", `Created initial user entity for : ${userId}`);
|
||||
}
|
||||
|
||||
if (user.Currency < totalCost) {
|
||||
return `You don't have enough currency to buy this! You have \`${user.Currency} Currency\` and need \`${totalCost} Currency\`!`;
|
||||
}
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle("Buy Effect")
|
||||
.setDescription(effectDetail.friendlyName)
|
||||
.setColor(EmbedColours.Ok)
|
||||
.addFields([
|
||||
{
|
||||
name: "Cost",
|
||||
value: `${totalCost}`,
|
||||
inline: true,
|
||||
},
|
||||
{
|
||||
name: "Quantity",
|
||||
value: `${quantity}`,
|
||||
inline: true,
|
||||
},
|
||||
]);
|
||||
|
||||
const row = new ActionRowBuilder<ButtonBuilder>()
|
||||
.addComponents([
|
||||
new ButtonBuilder()
|
||||
.setCustomId(`effects buy confirm ${id} ${quantity}`)
|
||||
.setLabel("Confirm")
|
||||
.setStyle(ButtonStyle.Success)
|
||||
.setDisabled(disabled),
|
||||
new ButtonBuilder()
|
||||
.setCustomId(`effects buy cancel ${id} ${quantity}`)
|
||||
.setLabel("Cancel")
|
||||
.setStyle(ButtonStyle.Danger)
|
||||
.setDisabled(disabled),
|
||||
]);
|
||||
|
||||
return {
|
||||
embed,
|
||||
row,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue