Update give command to allow currency to be given #220
3 changed files with 70 additions and 19 deletions
|
@ -5,6 +5,7 @@ import Config from "../database/entities/app/Config";
|
|||
import CardDropHelperMetadata from "../helpers/CardDropHelperMetadata";
|
||||
import Inventory from "../database/entities/app/Inventory";
|
||||
import AppLogger from "../client/appLogger";
|
||||
import User from "../database/entities/app/User";
|
||||
|
||||
export default class Give extends Command {
|
||||
constructor() {
|
||||
|
@ -14,19 +15,57 @@ export default class Give extends Command {
|
|||
.setName("give")
|
||||
.setDescription("Give a user a card manually, in case bot breaks")
|
||||
.setDefaultMemberPermissions(PermissionsBitField.Flags.Administrator)
|
||||
.addStringOption(x =>
|
||||
.addSubcommand(x =>
|
||||
x
|
||||
.setName("cardnumber")
|
||||
.setDescription("G")
|
||||
.setRequired(true))
|
||||
.addUserOption(x =>
|
||||
.setName("card")
|
||||
.setDescription("Give a user a card manually")
|
||||
.addStringOption(x =>
|
||||
x
|
||||
.setName("cardnumber")
|
||||
.setDescription("The card to give")
|
||||
.setRequired(true))
|
||||
.addUserOption(x =>
|
||||
x
|
||||
.setName("user")
|
||||
.setDescription("The user to give the card to")
|
||||
.setRequired(true)))
|
||||
.addSubcommand(x =>
|
||||
x
|
||||
.setName("user")
|
||||
.setDescription("The user to give the card to")
|
||||
.setRequired(true));
|
||||
.setName("currency")
|
||||
.setDescription("Give a user currency manually")
|
||||
.addNumberOption(x =>
|
||||
x
|
||||
.setName("amount")
|
||||
.setDescription("The amount to give")
|
||||
.setRequired(true))
|
||||
.addUserOption(x =>
|
||||
x
|
||||
.setName("user")
|
||||
.setDescription("The user to give the currency to")
|
||||
.setRequired(true)));
|
||||
}
|
||||
|
||||
public override async execute(interaction: CommandInteraction<CacheType>) {
|
||||
if (!interaction.isChatInputCommand()) return;
|
||||
|
||||
const whitelistedUsers = process.env.BOT_ADMINS!.split(",");
|
||||
|
||||
if (!whitelistedUsers.find(x => x == interaction.user.id)) {
|
||||
await interaction.reply("Only whitelisted users can use this command.");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (interaction.options.getSubcommand()) {
|
||||
case "card":
|
||||
await this.GiveCard(interaction);
|
||||
break;
|
||||
case "currency":
|
||||
await this.GiveCurrency(interaction);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private async GiveCard(interaction: CommandInteraction) {
|
||||
if (!CoreClient.AllowDrops) {
|
||||
await interaction.reply("Bot is currently syncing, please wait until its done.");
|
||||
return;
|
||||
|
@ -37,17 +76,10 @@ export default class Give extends Command {
|
|||
return;
|
||||
}
|
||||
|
||||
const whitelistedUsers = process.env.BOT_ADMINS!.split(",");
|
||||
|
||||
if (!whitelistedUsers.find(x => x == interaction.user.id)) {
|
||||
await interaction.reply("Only whitelisted users can use this command.");
|
||||
return;
|
||||
}
|
||||
|
||||
const cardNumber = interaction.options.get("cardnumber", true);
|
||||
const user = interaction.options.getUser("user", true);
|
||||
|
||||
AppLogger.LogSilly("Commands/Give", `Parameters: cardNumber=${cardNumber.value}, user=${user.id}`);
|
||||
AppLogger.LogSilly("Commands/Give/GiveCard", `Parameters: cardNumber=${cardNumber.value}, user=${user.id}`);
|
||||
|
||||
const card = CardDropHelperMetadata.GetCardByCardNumber(cardNumber.value!.toString());
|
||||
|
||||
|
@ -66,6 +98,21 @@ export default class Give extends Command {
|
|||
|
||||
await inventory.Save(Inventory, inventory);
|
||||
|
||||
await interaction.reply(`${card.card.name} given to ${user.username}, they now have ${inventory.Quantity}`);
|
||||
await interaction.reply(`Card ${card.card.name} given to ${user.username}, they now have ${inventory.Quantity}`);
|
||||
}
|
||||
|
||||
private async GiveCurrency(interaction: CommandInteraction) {
|
||||
const amount = interaction.options.get("amount", true);
|
||||
const user = interaction.options.getUser("user", true);
|
||||
|
||||
AppLogger.LogSilly("Commands/Give/GiveCurrency", `Parameters: amount=${amount.value} user=${user.id}`);
|
||||
|
||||
const userEntity = await User.FetchOneById(User, user.id) || new User(user.id, 300);
|
||||
|
||||
userEntity.AddCurrency(amount.value! as number);
|
||||
|
||||
await userEntity.Save(User, userEntity);
|
||||
|
||||
await interaction.reply(`${amount.value} currency ${amount.value! as number >= 0 ? "given to" : "taken from"} ${user.username}, they now have ${userEntity.Currency}`);
|
||||
}
|
||||
}
|
|
@ -17,6 +17,10 @@ export default class User extends AppBaseEntity {
|
|||
this.Currency = currency;
|
||||
}
|
||||
|
||||
public AddCurrency(amount: number) {
|
||||
this.Currency += amount;
|
||||
}
|
||||
|
||||
public RemoveCurrency(amount: number): boolean {
|
||||
if (this.Currency < amount) return false;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { CommandInteraction, SlashCommandBuilder } from "discord.js";
|
||||
import { CommandInteraction } from "discord.js";
|
||||
|
||||
export abstract class Command {
|
||||
public CommandBuilder: Omit<SlashCommandBuilder, "addSubcommand" | "addSubcommandGroup">;
|
||||
public CommandBuilder: any;
|
||||
|
||||
abstract execute(interaction: CommandInteraction): Promise<void>;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue