Skip to main content
Latest
File
import { ApplicationCommandOption, ApplicationCommandOptionTypes, Bot } from "../deps.ts";
export function validateApplicationCommandOptions(bot: Bot, options: ApplicationCommandOption[]) { const requiredOptions: ApplicationCommandOption[] = []; const optionalOptions: ApplicationCommandOption[] = [];
for (const option of options) { option.name = option.name.toLowerCase();
if (option.choices?.length) { if (option.choices.length > 25) throw new Error("Too many application command options provided.");
if ( option.type !== ApplicationCommandOptionTypes.String && option.type !== ApplicationCommandOptionTypes.Integer ) { throw new Error("Only string or integer options can have choices."); } }
if (!bot.utils.validateLength(option.name, { min: 1, max: 32 })) { throw new Error("Invalid application command option name."); }
if (!bot.utils.validateLength(option.description, { min: 1, max: 100 })) { throw new Error("Invalid application command description."); }
option.choices?.every((choice) => { if (!bot.utils.validateLength(choice.name, { min: 1, max: 100 })) { throw new Error("Invalid application command option choice name. Must be between 1-100 characters long."); }
if ( option.type === ApplicationCommandOptionTypes.String && (typeof choice.value !== "string" || choice.value.length < 1 || choice.value.length > 100) ) { throw new Error("Invalid slash options choice value type."); }
if (option.type === ApplicationCommandOptionTypes.Integer && typeof choice.value !== "number") { throw new Error("A number must be set for Integer types."); } });
if (option.required) { requiredOptions.push(option); continue; }
optionalOptions.push(option); }
return [...requiredOptions, ...optionalOptions];}