import type { APIUserSelectComponent, Snowflake } from "discord.js"; import { UserSelectMenuBuilder } from "discord.js"; export class V2UserSelectBuilder extends UserSelectMenuBuilder { setCustomId(custom_id: Snowflake) { if (custom_id.length > 100) throw new Error("Max length for custom ids is 100 characters."); super.setCustomId(custom_id); return this; } setPlaceholder(placeholder: Snowflake) { if (placeholder.length > 150) throw new Error("Max length for placeholders is 150 characters."); super.setPlaceholder(placeholder); return this; } setMinValues(min_values: number) { if (min_values < 0) throw new Error("Min values must be positive."); if (min_values > 25) throw new Error("Min values must be less than 25."); super.setMinValues(min_values); return this; } setMaxValues(max_values: number) { if (max_values < 1) throw new Error("Max values must be positive."); if (max_values > 25) throw new Error("Max values must be less than 25."); super.setMaxValues(max_values); return this; } setDisabled(disabled: boolean) { super.setDisabled(disabled); return this; } setDefaultUsers(default_users: Snowflake[]) { if (default_users.length > 25) throw new Error("Default users must be less than 25."); super.setDefaultUsers(default_users); return this; } toJSON(): APIUserSelectComponent { const data = super.toJSON(); if (!data.custom_id) { throw new Error("User select menu must have a custom_id"); } return data; } } interface UserSelectOptions { custom_id: Snowflake; placeholder?: Snowflake; min_values?: number; max_values?: number; disabled?: boolean; default_users?: Snowflake[]; } export function makeUserSelect( options: UserSelectOptions, ): V2UserSelectBuilder { const select = new V2UserSelectBuilder(); select.setCustomId(options.custom_id); if (options.placeholder) select.setPlaceholder(options.placeholder); if (options.min_values !== undefined) select.setMinValues(options.min_values); if (options.max_values !== undefined) select.setMaxValues(options.max_values); if (options.disabled) select.setDisabled(options.disabled); if (options.default_users) select.setDefaultUsers(options.default_users); return select; }