From 9edf3ccda2be2601f063aa046ed342a5cb7226bd Mon Sep 17 00:00:00 2001 From: March 7th <71698422+aiko-chan-ai@users.noreply.github.com> Date: Thu, 31 Mar 2022 12:02:56 +0700 Subject: [PATCH] Fix Channel send Slash command - Fix slash command with subcommand, choices , ... --- package.json | 2 +- src/structures/ApplicationCommand.js | 49 ++++++++++++++++++++++++---- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index f0ea2ad..05f6b05 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "discord.js-selfbot-v13", - "version": "1.2.1", + "version": "1.2.2", "description": "A unofficial discord.js fork for creating selfbots [Based on discord.js v13]", "main": "./src/index.js", "types": "./typings/index.d.ts", diff --git a/src/structures/ApplicationCommand.js b/src/structures/ApplicationCommand.js index b7f912b..b7ee645 100644 --- a/src/structures/ApplicationCommand.js +++ b/src/structures/ApplicationCommand.js @@ -485,33 +485,68 @@ class ApplicationCommand extends Base { `Expected option to be a String, got ${typeof value}`, ); } - if (!subCommandCheck && !this.options[i]) continue; - if (subCommandCheck && !subCommand.options[i]) continue; + if (!subCommandCheck && !this?.options[i]) continue; + if (subCommandCheck && subCommand && !subCommand?.options[i]) continue; if (!subCommandCheck) { + // Check value is invalid + let choice; + if (this.options[i].choices && this.options[i].choices.length > 0) { + choice = + this.options[i].choices.find((c) => c.name == value) || + this.options[i].choices.find((c) => c.value == value); + if (!choice) { + throw new Error( + `Invalid option: ${value} is not a valid choice for this option\nList of choices: ${this.options[ + i + ].choices + .map((c, i) => `#${i + 1} Name: ${c.name} Value: ${c.value}\n`) + .join('')}`, + ); + } + } const data = { type: ApplicationCommandOptionTypes[this.options[i].type], name: this.options[i].name, - value: this.options[i].type == 'INTEGER' ? Number(value) : (this.options[i].type == 'BOOLEAN' ? Boolean(value) : value), + value: choice?.value || (this.options[i].type == 'INTEGER' ? Number(value) : (this.options[i].type == 'BOOLEAN' ? Boolean(value) : value)), }; optionFormat.push(data); } else { if (!options[i + 1]) continue; + // Check value is invalid + let choice; + if ( + subCommand.options[i].choices && + subCommand.options[i].choices.length > 0 + ) { + choice = + subCommand.options[i].choices.find((c) => c.name == value) || + subCommand.options[i].choices.find((c) => c.value == value); + if (!choice) { + throw new Error( + `Invalid option: ${value} is not a valid choice for this option\nList of choices: ${subCommand.options[ + i + ].choices.map( + (c, i) => `#${i + 1} Name: ${c.name} Value: ${c.value}\n`, + ).join('')}`, + ); + } + } const data = { type: ApplicationCommandOptionTypes[subCommand.options[i].type], name: subCommand.options[i].name, - value: - subCommand.options[i].type == 'INTEGER' + value: choice?.value || + (subCommand.options[i].type == 'INTEGER' ? Number(options[i + 1]) : subCommand.options[i].type == 'BOOLEAN' ? Boolean(options[i + 1]) - : options[i + 1], + : options[i + 1]), }; optionFormat.push(data); } } if (!subCommandCheck && this.options[i]?.required) throw new Error('Value required missing'); - if (subCommandCheck && subCommand.options[i-1]?.required) + if (subCommandCheck && subCommand?.options[i-1]?.required) throw new Error('Value required missing'); await this.client.api.interactions.post({ body: {