Skip to content

Commit

Permalink
feat: add mentionable options
Browse files Browse the repository at this point in the history
  • Loading branch information
Nyameliaaaa committed Mar 23, 2023
1 parent 52c872f commit 4a19750
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 15 deletions.
44 changes: 31 additions & 13 deletions src/mixins/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
} from '@discordjs/builders';
import { getAllStrings, getDefaultString, joinKeys } from 'lib';
import { AutocompletableMixin, BaseKeyMixin, BuilderMixin, NameAndDescriptionMixin, OptionMixin } from 'mixins';
import { IntegerOption, NumberOption } from 'options';
import { IntegerOption, MentionableOption, NumberOption, RoleOption, UserOption } from 'options';
import { hasMixin, mix } from 'ts-mixer';
import { OptionInput, OptionResolvable } from 'types';

Expand Down Expand Up @@ -154,10 +154,16 @@ export class SharedOptionsMixin<T extends SlashCommandBuilder | SlashCommandSubc
return this;
}

// addMentionableOption(key: string, input: (option: MentionableOption) => MentionableOption = option => option) {
// this.addOption(input(new MentionableOption(key)));
// return this;
// }
addMentionableOption(key: string, input?: OptionInput<MentionableOption>): this;
addMentionableOption(option: OptionInput<MentionableOption>): this;
addMentionableOption(option: MentionableOption): this;
addMentionableOption(
keyOrInput: string | OptionInput<MentionableOption> | MentionableOption,
input: OptionInput<MentionableOption> = option => option
) {
this.handleCall(keyOrInput, input, MentionableOption);
return this;
}

addNumberOption(key: string, input?: OptionInput<NumberOption>): this;
addNumberOption(option: OptionInput<NumberOption>): this;
Expand All @@ -170,20 +176,32 @@ export class SharedOptionsMixin<T extends SlashCommandBuilder | SlashCommandSubc
return this;
}

// addRoleOption(key: string, input: (option: RoleOption) => RoleOption = option => option) {
// this.addOption(input(new RoleOption(key)));
// return this;
// }
addRoleOption(key: string, input?: OptionInput<RoleOption>): this;
addRoleOption(option: OptionInput<RoleOption>): this;
addRoleOption(option: RoleOption): this;
addRoleOption(
keyOrInput: string | OptionInput<RoleOption> | RoleOption,
input: OptionInput<RoleOption> = option => option
) {
this.handleCall(keyOrInput, input, RoleOption);
return this;
}

// addStringOption(key: string, input: (option: StringOption) => StringOption = option => option) {
// this.addOption(input(new StringOption(key)));
// return this;
// }

// addUserOption(key: string, input: (option: UserOption) => UserOption = option => option) {
// this.addOption(input(new UserOption(key)));
// return this;
// }
addUserOption(key: string, input?: OptionInput<UserOption>): this;
addUserOption(option: OptionInput<UserOption>): this;
addUserOption(option: UserOption): this;
addUserOption(
keyOrInput: string | OptionInput<UserOption> | UserOption,
input: OptionInput<UserOption> = option => option
) {
this.handleCall(keyOrInput, input, UserOption);
return this;
}

hydrateOptions() {
for (const option of this.optionQueue) {
Expand Down
1 change: 1 addition & 0 deletions src/options/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from './numbers';
export * from './mentionables';
27 changes: 27 additions & 0 deletions src/options/mentionables.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { SlashCommandMentionableOption, SlashCommandRoleOption, SlashCommandUserOption } from '@discordjs/builders';
import { BaseKeyMixin, OptionMixin } from 'mixins';
import { mix } from 'ts-mixer';

export interface MentionableOption extends OptionMixin<SlashCommandMentionableOption>, BaseKeyMixin {}
@mix(OptionMixin, BaseKeyMixin)
export class MentionableOption {
constructor(baseKey?: string) {
this.builder = new SlashCommandMentionableOption();
}
}

export interface UserOption extends OptionMixin<SlashCommandUserOption>, BaseKeyMixin {}
@mix(OptionMixin, BaseKeyMixin)
export class UserOption {
constructor(baseKey?: string) {
this.builder = new SlashCommandUserOption();
}
}

export interface RoleOption extends OptionMixin<SlashCommandRoleOption>, BaseKeyMixin {}
@mix(OptionMixin, BaseKeyMixin)
export class RoleOption {
constructor(baseKey?: string) {
this.builder = new SlashCommandRoleOption();
}
}
2 changes: 0 additions & 2 deletions src/options/numbers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { mix } from 'ts-mixer';
export interface NumberOption extends MinMaxNumberMixin<SlashCommandNumberOption>, BaseKeyMixin {}
@mix(MinMaxNumberMixin, BaseKeyMixin)
export class NumberOption {
// eslint-disable-next-line
constructor(baseKey?: string) {
this.builder = new SlashCommandNumberOption();
}
Expand All @@ -14,7 +13,6 @@ export class NumberOption {
export interface IntegerOption extends MinMaxNumberMixin<SlashCommandIntegerOption>, BaseKeyMixin {}
@mix(MinMaxNumberMixin, BaseKeyMixin)
export class IntegerOption {
// eslint-disable-next-line
constructor(baseKey?: string) {
this.builder = new SlashCommandIntegerOption();
}
Expand Down

0 comments on commit 4a19750

Please sign in to comment.