Create sacrifice command #225
5 changed files with 84 additions and 32 deletions
24
package-lock.json
generated
24
package-lock.json
generated
|
@ -1900,9 +1900,9 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "20.12.8",
|
"version": "20.12.11",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.8.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz",
|
||||||
"integrity": "sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==",
|
"integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~5.26.4"
|
"undici-types": "~5.26.4"
|
||||||
}
|
}
|
||||||
|
@ -5154,21 +5154,21 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/glob": {
|
"node_modules/glob": {
|
||||||
"version": "10.3.12",
|
"version": "10.3.15",
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz",
|
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz",
|
||||||
"integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==",
|
"integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"foreground-child": "^3.1.0",
|
"foreground-child": "^3.1.0",
|
||||||
"jackspeak": "^2.3.6",
|
"jackspeak": "^2.3.6",
|
||||||
"minimatch": "^9.0.1",
|
"minimatch": "^9.0.1",
|
||||||
"minipass": "^7.0.4",
|
"minipass": "^7.0.4",
|
||||||
"path-scurry": "^1.10.2"
|
"path-scurry": "^1.11.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"glob": "dist/esm/bin.mjs"
|
"glob": "dist/esm/bin.mjs"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16 || 14 >=14.17"
|
"node": ">=16 || 14 >=14.18"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
@ -9335,15 +9335,15 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/path-scurry": {
|
"node_modules/path-scurry": {
|
||||||
"version": "1.10.2",
|
"version": "1.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz",
|
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
|
||||||
"integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==",
|
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"lru-cache": "^10.2.0",
|
"lru-cache": "^10.2.0",
|
||||||
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
|
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16 || 14 >=14.17"
|
"node": ">=16 || 14 >=14.18"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
|
|
@ -42,7 +42,7 @@ export default class Claim extends ButtonEvent {
|
||||||
|
|
||||||
await inventory.Save(Inventory, inventory);
|
await inventory.Save(Inventory, inventory);
|
||||||
|
|
||||||
let user = await User.FetchOneById(User, userId) || new User(userId, 300);
|
const user = await User.FetchOneById(User, userId) || new User(userId, 300);
|
||||||
|
|
||||||
AppLogger.LogSilly("Button/Claim", `${user.Id} has ${user.Currency} currency`);
|
AppLogger.LogSilly("Button/Claim", `${user.Id} has ${user.Currency} currency`);
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import Config from "../database/entities/app/Config";
|
||||||
import CardDropHelperMetadata from "../helpers/CardDropHelperMetadata";
|
import CardDropHelperMetadata from "../helpers/CardDropHelperMetadata";
|
||||||
import Inventory from "../database/entities/app/Inventory";
|
import Inventory from "../database/entities/app/Inventory";
|
||||||
import AppLogger from "../client/appLogger";
|
import AppLogger from "../client/appLogger";
|
||||||
|
import User from "../database/entities/app/User";
|
||||||
|
|
||||||
export default class Give extends Command {
|
export default class Give extends Command {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -14,19 +15,57 @@ export default class Give extends Command {
|
||||||
.setName("give")
|
.setName("give")
|
||||||
.setDescription("Give a user a card manually, in case bot breaks")
|
.setDescription("Give a user a card manually, in case bot breaks")
|
||||||
.setDefaultMemberPermissions(PermissionsBitField.Flags.Administrator)
|
.setDefaultMemberPermissions(PermissionsBitField.Flags.Administrator)
|
||||||
|
.addSubcommand(x =>
|
||||||
|
x
|
||||||
|
.setName("card")
|
||||||
|
.setDescription("Give a user a card manually")
|
||||||
.addStringOption(x =>
|
.addStringOption(x =>
|
||||||
x
|
x
|
||||||
.setName("cardnumber")
|
.setName("cardnumber")
|
||||||
.setDescription("G")
|
.setDescription("The card to give")
|
||||||
.setRequired(true))
|
.setRequired(true))
|
||||||
.addUserOption(x =>
|
.addUserOption(x =>
|
||||||
x
|
x
|
||||||
.setName("user")
|
.setName("user")
|
||||||
.setDescription("The user to give the card to")
|
.setDescription("The user to give the card to")
|
||||||
.setRequired(true));
|
.setRequired(true)))
|
||||||
|
.addSubcommand(x =>
|
||||||
|
x
|
||||||
|
.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>) {
|
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) {
|
if (!CoreClient.AllowDrops) {
|
||||||
await interaction.reply("Bot is currently syncing, please wait until its done.");
|
await interaction.reply("Bot is currently syncing, please wait until its done.");
|
||||||
return;
|
return;
|
||||||
|
@ -37,17 +76,10 @@ export default class Give extends Command {
|
||||||
return;
|
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 cardNumber = interaction.options.get("cardnumber", true);
|
||||||
const user = interaction.options.getUser("user", 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());
|
const card = CardDropHelperMetadata.GetCardByCardNumber(cardNumber.value!.toString());
|
||||||
|
|
||||||
|
@ -66,6 +98,21 @@ export default class Give extends Command {
|
||||||
|
|
||||||
await inventory.Save(Inventory, inventory);
|
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;
|
this.Currency = currency;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AddCurrency(amount: number) {
|
||||||
|
this.Currency += amount;
|
||||||
|
}
|
||||||
|
|
||||||
public RemoveCurrency(amount: number): boolean {
|
public RemoveCurrency(amount: number): boolean {
|
||||||
if (this.Currency < amount) return false;
|
if (this.Currency < amount) return false;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import { CommandInteraction, SlashCommandBuilder } from "discord.js";
|
import { CommandInteraction } from "discord.js";
|
||||||
|
|
||||||
export abstract class Command {
|
export abstract class Command {
|
||||||
public CommandBuilder: Omit<SlashCommandBuilder, "addSubcommand" | "addSubcommandGroup">;
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- CommandBuilder type is dynamic depending on options and can't be strictly typed
|
||||||
|
public CommandBuilder: any;
|
||||||
|
|
||||||
abstract execute(interaction: CommandInteraction): Promise<void>;
|
abstract execute(interaction: CommandInteraction): Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue