sheweny
Version:
The powerful framework for create discord bots
169 lines (168 loc) • 6.5 kB
TypeScript
import type { ApplicationCommandOptionData, PermissionResolvable, Collection, ClientOptions, Snowflake, LocalizationMap } from 'discord.js';
import type { EventEmitter } from 'node:events';
import type { ButtonsManager, CommandsManager, EventsManager, InhibitorsManager, ModalsManager, SelectMenusManager, Button, Command, Event, Inhibitor, SelectMenu, Modal } from '../index.js';
import type { CLIENT_MODE, COMMAND_CHANNEL, COMMAND_MESSAGE_ARGS_TYPE, COMMAND_TYPE, INHIBITOR_TYPE } from '../constants/constants.js';
import type { CommandManagerRegisterStrategy, CustomId, InhibitorType, MessageCommandPrefix } from './types.js';
/**
* Interfaces of managers
*/
export interface BaseManagerOptions {
directory: string;
asyncRead?: boolean;
}
export interface CommandsManagerOptions extends BaseManagerOptions {
guildId?: Snowflake | Snowflake[];
prefix?: MessageCommandPrefix;
applicationPermissions?: boolean;
autoRegisterApplicationCommands?: boolean;
default?: CommandsManagerDefaultOptions;
registerStrategy?: CommandManagerRegisterStrategy;
}
export interface CommandsManagerDefaultOptions {
adminOnly?: boolean;
registerApplicationCommand?: boolean;
category?: string;
channel?: typeof COMMAND_CHANNEL.dm | typeof COMMAND_CHANNEL.global | typeof COMMAND_CHANNEL.guild;
clientPermissions?: PermissionResolvable[];
cooldown?: number;
description?: string;
descriptionLocalizations?: LocalizationMap;
examples?: string | string[];
type?: typeof COMMAND_TYPE.cmdSlash | typeof COMMAND_TYPE.cmdMsg | typeof COMMAND_TYPE.ctxMsg | typeof COMMAND_TYPE.ctxUser;
usage?: string | string[];
userPermissions?: PermissionResolvable[];
}
export interface EventsManagerOptions extends BaseManagerOptions {
default?: EventsManagerDefaultOptions;
}
export interface EventsManagerDefaultOptions {
emitter?: EventEmitter;
once?: boolean;
}
export interface InhibitorsManagerOptions extends BaseManagerOptions {
default?: InhibitorsManagerDefaultOptions;
}
export interface InhibitorsManagerDefaultOptions {
priority?: number;
type?: typeof INHIBITOR_TYPE.message[] | typeof INHIBITOR_TYPE.appCommand[] | typeof INHIBITOR_TYPE.button[] | typeof INHIBITOR_TYPE.select[] | typeof INHIBITOR_TYPE.all[];
}
export interface ButtonsManagerOptions extends BaseManagerOptions {
default?: ButtonsManagerDefaultOptions;
}
export interface ButtonsManagerDefaultOptions {
cooldown?: number;
}
export interface SelectMenusManagerOptions extends BaseManagerOptions {
default?: SelectMenusManagerDefaultOptions;
}
export interface SelectMenusManagerDefaultOptions {
cooldown?: number;
}
export interface ModalsManagerOptions extends BaseManagerOptions {
default?: ModalsManagerDefaultOptions;
}
export interface ModalsManagerDefaultOptions {
cooldown?: number;
}
interface BaseCommand {
name: string;
description?: string;
category?: string;
usage?: string | string[];
enabled?: boolean;
examples?: string | string[];
channel?: typeof COMMAND_CHANNEL.dm | typeof COMMAND_CHANNEL.guild | typeof COMMAND_CHANNEL.global;
cooldown?: number;
adminsOnly?: boolean;
registerApplicationCommand?: boolean;
userPermissions?: PermissionResolvable[];
clientPermissions?: PermissionResolvable[];
}
interface BaseApplicationCommand extends BaseCommand {
nameLocalizations?: LocalizationMap;
descriptionLocalizations?: LocalizationMap;
}
export interface SlashCommandData extends BaseApplicationCommand {
descriptionLocalizations?: LocalizationMap;
type?: typeof COMMAND_TYPE.cmdSlash;
options?: ApplicationCommandOptionData[];
}
export interface ContextMenuUserData extends BaseApplicationCommand {
type?: typeof COMMAND_TYPE.ctxUser;
}
export interface ContextMenuMessageData extends BaseApplicationCommand {
type?: typeof COMMAND_TYPE.ctxMsg;
}
export interface MessageData extends BaseCommand {
type?: typeof COMMAND_TYPE.cmdMsg;
args?: MessageCommandOptionData[];
aliases?: string[];
}
export interface MessageCommandOptionData {
name: string;
type: typeof COMMAND_MESSAGE_ARGS_TYPE.string | typeof COMMAND_MESSAGE_ARGS_TYPE.number | typeof COMMAND_MESSAGE_ARGS_TYPE.boolean | typeof COMMAND_MESSAGE_ARGS_TYPE.rest | typeof COMMAND_MESSAGE_ARGS_TYPE.guild | typeof COMMAND_MESSAGE_ARGS_TYPE.channel | typeof COMMAND_MESSAGE_ARGS_TYPE.member | typeof COMMAND_MESSAGE_ARGS_TYPE.guild_emoji | typeof COMMAND_MESSAGE_ARGS_TYPE.role | typeof COMMAND_MESSAGE_ARGS_TYPE.user | typeof COMMAND_MESSAGE_ARGS_TYPE.command;
default?: unknown;
}
export interface CommandMessageArgsResolved {
[index: string]: unknown;
}
export interface EventData {
description?: string;
emitter?: EventEmitter;
once?: boolean;
}
export interface ButtonData {
enabled?: boolean;
cooldown?: number;
}
export interface ModalData {
enabled?: boolean;
cooldown?: number;
}
export interface SelectMenuData {
enabled?: boolean;
cooldown?: number;
}
export interface InhibitorData {
enabled?: boolean;
type?: InhibitorType[];
priority?: number;
}
export interface ShewenyClientOptions extends ClientOptions {
admins?: Snowflake[];
disableCooldownsForAdmins?: boolean;
joinThreadsOnCreate?: boolean;
managers?: ManagersOptions;
mode?: typeof CLIENT_MODE.dev | typeof CLIENT_MODE.prod;
}
export interface Cooldowns {
commands: Collection<string, Collection<string, number>>;
buttons: Collection<CustomId, Collection<string, number>>;
selectMenus: Collection<CustomId, Collection<string, number>>;
modals: Collection<CustomId, Collection<string, number>>;
}
export interface Managers {
buttons?: ButtonsManager;
commands?: CommandsManager;
events?: EventsManager;
inhibitors?: InhibitorsManager;
modals?: ModalsManager;
selectMenus?: SelectMenusManager;
}
export interface ManagersCollections {
buttons: Collection<CustomId, Button[]>;
commands: Collection<string, Command[]>;
events: Collection<string, Event[]>;
inhibitors: Collection<string, Inhibitor[]>;
modals: Collection<CustomId, Modal[]>;
selectMenus: Collection<CustomId, SelectMenu[]>;
}
interface ManagersOptions {
commands?: CommandsManagerOptions;
events?: EventsManagerOptions;
buttons?: BaseManagerOptions;
selectMenus?: BaseManagerOptions;
modals?: BaseManagerOptions;
inhibitors?: InhibitorsManagerOptions;
}
export {};