cmd.addSubcommandGroup((g) => g .setName("char") .setDescription("Character management") .addSubcommand((s) => s.setName("add").setDescription("Add a character") .addStringOption((o) => o.setName("char_name").setDescription("Character name").setRequired(true)) .addStringOption((o) => o.setName("class").setDescription("Class").setRequired(true) .addChoices( { name: "Blader (BL)", value: "BL" }, { name: "Force Blader (FB)", value: "FB" }, { name: "Force Shielder (FS)", value: "FS" }, { name: "Force Archer (FA)", value: "FA" }, { name: "Force Gunner (FG)", value: "FG" }, { name: "Gladiator (GL)", value: "GL" }, { name: "Dark Mage (DM)", value: "DM" }, { name: "Wizard (WI)", value: "WI" }, { name: "Warrior (WA)", value: "WA" }, )) .addIntegerOption((o) => o.setName("level").setDescription("Level").setRequired(true)) .addStringOption((o) => o.setName("nation").setDescription("Nation").setRequired(true) .addChoices({ name: "Capella", value: "Capella" }, { name: "Procyon", value: "Procyon" })) .addStringOption((o) => o.setName("name").setDescription("Usermap key (officer only)").setRequired(false))) .addSubcommand((s) => s.setName("remove").setDescription("Remove a character") .addStringOption((o) => o.setName("char_name").setDescription("Character name").setRequired(true)) .addStringOption((o) => o.setName("name").setDescription("Usermap key (officer only)").setRequired(false))) .addSubcommand((s) => s.setName("set-active").setDescription("Set active character") .addStringOption((o) => o.setName("char_name").setDescription("Character name").setRequired(true)) .addStringOption((o) => o.setName("name").setDescription("Usermap key (officer only)").setRequired(false))) .addSubcommand((s) => s.setName("set-nation").setDescription("Change a character's nation") .addStringOption((o) => o.setName("nation").setDescription("Nation").setRequired(true) .addChoices({ name: "Capella", value: "Capella" }, { name: "Procyon", value: "Procyon" })) .addStringOption((o) => o.setName("char_name").setDescription("Character name (defaults to active)").setRequired(false)) .addStringOption((o) => o.setName("name").setDescription("Usermap key (officer only)").setRequired(false))) .addSubcommand((s) => s.setName("set-stats").setDescription("Set character combat stats") .addSubcommand((s) => s.setName("borrow").setDescription("Request to borrow a character for this session") .addStringOption((o) => o.setName("owner").setDescription("Owner's usermap key").setRequired(true)) .addStringOption((o) => o.setName("char_name").setDescription("Character name").setRequired(true)) .addStringOption((o) => o.setName("name").setDescription("Grant to this user (officer only)").setRequired(false))) .addSubcommand((s) => s.setName("accept").setDescription("Accept a borrow request") .addStringOption((o) => o.setName("name").setDescription("Requester's usermap key").setRequired(true))) .addSubcommand((s) => s.setName("decline").setDescription("Decline a borrow request") .addStringOption((o) => o.setName("name").setDescription("Requester's usermap key").setRequired(true))) .addSubcommand((s) => s.setName("share").setDescription("Permanently share a character") .addStringOption((o) => o.setName("char_name").setDescription("Character name").setRequired(true)) .addStringOption((o) => o.setName("name").setDescription("Usermap key to share with").setRequired(true)) .addStringOption((o) => o.setName("owner").setDescription("Owner's usermap key (officer only)").setRequired(false))) .addSubcommand((s) => s.setName("unshare").setDescription("Revoke permanent character share") .addStringOption((o) => o.setName("char_name").setDescription("Character name").setRequired(true)) .addStringOption((o) => o.setName("name").setDescription("Usermap key to revoke").setRequired(true)) .addStringOption((o) => o.setName("owner").setDescription("Owner's usermap key (officer only)").setRequired(false))) .addStringOption((o) => o.setName("char_name").setDescription("Character name (defaults to active)").setRequired(false)) .addIntegerOption((o) => o.setName("atk").setDescription("Attack score").setRequired(false)) .addIntegerOption((o) => o.setName("def").setDescription("Defense score").setRequired(false)) .addIntegerOption((o) => o.setName("heal").setDescription("Healing score").setRequired(false)) .addStringOption((o) => o.setName("name").setDescription("Usermap key (officer only)").setRequired(false))) );