mirror of
https://github.com/sern-handler/handler
synced 2026-06-26 09:42:15 +00:00
feat!:(2.0 global services) (#156)
* style: prettier line feed changes
* style: prettier line feed changes
* feat: prototyping module manager
* feat: removing unused types
* feat: update location of module typings
* revert: port back to original interaction type checkers
* revert: port back to original interaction type checkers
* revert: remove unneeded type predicates
* feat: moving modules to its own contained class
* feat: getting global plugins some typings and adding contracts
* chore: fixing up and cleaning code
* feat: adding ModuleConfiguration helper fn and default module manager
* feat: solidifying contract
* revert: delete files
* chore: saving for later
* feat: prototyping module manager
* feat: removing unused types
* feat: update location of module typings
* revert: port back to original interaction type checkers
* revert: port back to original interaction type checkers
* revert: remove unneeded type predicates
* feat: moving modules to its own contained class
* feat: getting global plugins some typings and adding contracts
* chore: fixing up and cleaning code
* feat: adding ModuleConfiguration helper fn and default module manager
* feat: solidifying contract
* revert: delete files
* chore: saving for later
* feat: more merge conflicts
* feat: starting from scratch, add new typings
* feat: refactor ScopedPlugin typing
* feat: strengthening contracts
* chore: edit eslint
* feat: add addDependencies
* feat: add iti di
* feat: constfn util
* revert: delete old files
* remove: ModuleConfiguration
* feat: add sanity checker
* feat: add new error and update dependency
* feat: add sanity check for iti
* feat: add function helpers for di
* feat: add POC for sern di IOC
* feat: refactor DependenciesMap
* revert: remove old code
* feat: refactor makeDependencies fn
* chore(deps): update dependency @typescript-eslint/parser to v5.36.1 (#127)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* chore(deps): update dependency @typescript-eslint/eslint-plugin to v5.36.1 (#126)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* docs: Fix the code example (#128)
* chore(deps): update dependency @typescript-eslint/eslint-plugin to v5.36.2 (#130)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: xxDeveloper <77380166+Murtatrxx@users.noreply.github.com>
* chore(deps): update dependency @typescript-eslint/parser to v5.36.2 (#131)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: xxDeveloper <77380166+Murtatrxx@users.noreply.github.com>
* feat: allow constructable modules (#133)
* Update readFile.ts
* Update userDefinedEventsHandling.ts
* Update readyHandler.ts
* fix: ts error
Co-authored-by: Jacob Nguyen <76754747+jacoobes@users.noreply.github.com>
Co-authored-by: xxDeveloper <77380166+Murtatrxx@users.noreply.github.com>
* revert: feat of allow constructable modules (#138)
Revert "feat: allow constructable modules (#133)"
This reverts commit 03936eb2ea.
* feat: update CODEOWNERS
* feat: classmodules@arcs (#143)
* feat: add class based commands
* docs: add deprecation warnings
* feat: add deprecation warnings
* feat: add more deprecation warnings
* feat: add prototype ClassModule abstract class
* feat: add EventModuleClass prototype, change names
* feat: more flexible contract
* feat: EventExecutable
* fix: typo
* feat: made abstract classes because of defaults
* fix: typings
* feat: update Context typings, update to djs v15
* chore: update typescript dependency
* chore: bump version
* chore: update ignore
* chore: prettier
* docs: change readme to be docusaurus compliant
* chore(main): release 1.2.0 (#145)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* fix(autocomplete): now support multiple autocomplete options (#147)
* chore(main): release 1.2.1 (#148)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* feat: update location of module typings
* feat: getting global plugins some typings and adding contracts
* feat: adding ModuleConfiguration helper fn and default module manager
* feat: solidifying contract
* feat: removing unused types
* feat: update location of module typings
* feat: moving modules to its own contained class
* feat: getting global plugins some typings and adding contracts
* feat: solidifying contract
* revert: delete files
* chore: saving for later
* feat: more merge conflicts
* feat: starting from scratch, add new typings
* feat: strengthening contracts
* feat: add sanity check for iti
* feat: refactor DependenciesMap
* feat: adding POC back
* docs: add some deprecation warnings
* feat: remove client and sernEmitter
* feat: rebase global_services
* chore: oops rebase pkgjson fix
* fix: typings
* feat: iti update and getting di working
* feat: adding contracts and default provider
* feat: update typings and change logger
* fix: MapDeps typings and useContainer typings
* feat: moving handlers to 2.0
* feat: injecting crash handler
* feat: alpha logging injection?
* feat: injecting modulemanager in interactionhandler
* fix: typos and fixups
* fix: typos and fixups
* feat: moduleManager injection
* fix: crash on no module
* feat: i think optional dependencies work
* feat: add more optional support
* feat: make exclusion optional
* perf: simplify typings and reduce compile time
* fix: some typings adjustment, deprecating a field
* perf: simplifying plugin typings
* feat: remove addExternal
* feat: more simplifying typings
* perf: allow any and interfacify some types
* revert: remove horrendous Override type
* revert: delete interaction type predicates
* fix: unchecked cast to EventEmitter
* perf: remove unneeded creation of instance members
* feat: init test dir
* refactor: rename fn and short circuit name fn
* refactor: insert function
* feat: starting event module onEvent plugins and log payload
* feat: basic eventmodule event plugins?
* refactor: DRY
* feat: unify warning typing
* fix: typings
* feat: more progress on new eventModules
* feat: event modules with plugins!!?!?
* feat: making sernEmitter create default!!, readjust typings
* feat: inject sernEmitter emits and catch possible errors
* feat: add optionality to Logger dep type
* feat: context upgrade, fix circular emissions, crap ton of shit
* feat!: Module -> AnyModule, Added new SelectMenuInteractions, Changed some CommandType names
* feat: rudimentary onClick handler
* feat!: rename select menu command types, no distinguishing between text and alias
* docs: adding docs
* fix: forgot to change
* fix: logging undefined
* revert: remove spreadparams
* feat: export useContainerRaw function and fix smol bug
* feat: add iti DI disposeAll on crash
* fix: deferred execute
* feat!: rename BasePlugin -> Plugin
* feat: commandplugins for event modules, ill test later
* refactor: rename
* refactor: remove import
* feat: add deprecation warnings
* feat: update documentation comments
* perf: static'ify command plugin and event plugin typings
* refactor: remove redundant assignment
* feat: switch to pnpm
* chore: update pnpm lock
* fix: errors crashing and completing subscription
* feat: update example
* fix: overriding dependencies no matter what
* fix: bad rxjs docs
* refactor: destructuring
* feat: update typings for addDisposer
* feat: update packageManager field in package.json
* feat: grammar
Co-authored-by: jacoobes <jacobnguyend@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: xxDeveloper <77380166+Murtatrxx@users.noreply.github.com>
Co-authored-by: Arcs <73959934+HighArcs@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Evo <85353424+EvolutionX-10@users.noreply.github.com>
This commit is contained in:
215
src/types/module.ts
Normal file
215
src/types/module.ts
Normal file
@@ -0,0 +1,215 @@
|
||||
import type {
|
||||
ApplicationCommandAttachmentOption,
|
||||
ApplicationCommandChannelOptionData,
|
||||
ApplicationCommandChoicesData,
|
||||
ApplicationCommandNonOptionsData,
|
||||
ApplicationCommandNumericOptionData,
|
||||
ApplicationCommandOptionData,
|
||||
ApplicationCommandOptionType,
|
||||
ApplicationCommandSubCommandData,
|
||||
ApplicationCommandSubGroupData,
|
||||
AutocompleteInteraction,
|
||||
Awaitable,
|
||||
BaseApplicationCommandOptionsData,
|
||||
ButtonInteraction,
|
||||
MessageContextMenuCommandInteraction,
|
||||
ModalSubmitInteraction,
|
||||
UserContextMenuCommandInteraction,
|
||||
ChannelSelectMenuInteraction,
|
||||
MentionableSelectMenuInteraction,
|
||||
RoleSelectMenuInteraction,
|
||||
StringSelectMenuInteraction
|
||||
} from 'discord.js';
|
||||
import type {
|
||||
DiscordEventCommand,
|
||||
ExternalEventCommand,
|
||||
SernEventCommand,
|
||||
} from '../handler/structures/events';
|
||||
import { CommandType } from '../handler/structures/enums';
|
||||
import type { Args, SlashOptions } from './handler';
|
||||
import type Context from '../handler/structures/context';
|
||||
import type { AutocompletePlugin, CommandPlugin, EventPlugin } from '../handler/plugins/plugin';
|
||||
import { EventType } from '../handler/structures/enums';
|
||||
import type { UserSelectMenuInteraction } from 'discord.js';
|
||||
|
||||
export interface Module {
|
||||
type?: CommandType | EventType;
|
||||
name?: string;
|
||||
description?: string;
|
||||
execute: (...args: any[]) => any
|
||||
}
|
||||
|
||||
export interface TextCommand extends Module {
|
||||
type: CommandType.Text;
|
||||
onEvent: EventPlugin<CommandType.Text>[];
|
||||
plugins: CommandPlugin[];
|
||||
alias?: string[];
|
||||
execute: (ctx: Context, args: ['text', string[]]) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface SlashCommand extends Module {
|
||||
type: CommandType.Slash;
|
||||
onEvent: EventPlugin<CommandType.Slash>[];
|
||||
plugins: CommandPlugin[];
|
||||
options?: SernOptionsData[];
|
||||
execute: (ctx: Context, args: ['slash', SlashOptions]) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface BothCommand extends Module {
|
||||
type: CommandType.Both;
|
||||
onEvent: EventPlugin<CommandType.Both>[];
|
||||
plugins: CommandPlugin[];
|
||||
alias?: string[];
|
||||
options?: SernOptionsData[];
|
||||
execute: (ctx: Context, args: Args) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface ContextMenuUser extends Module {
|
||||
type: CommandType.CtxUser;
|
||||
onEvent: EventPlugin<CommandType.CtxUser>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: UserContextMenuCommandInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface ContextMenuMsg extends Module {
|
||||
type: CommandType.CtxMsg;
|
||||
onEvent: EventPlugin<CommandType.CtxMsg>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: MessageContextMenuCommandInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface ButtonCommand extends Module {
|
||||
type: CommandType.Button;
|
||||
onEvent: EventPlugin<CommandType.Button>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: ButtonInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface StringSelectCommand extends Module {
|
||||
type: CommandType.StringSelect;
|
||||
onEvent: EventPlugin<CommandType.StringSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: StringSelectMenuInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface ChannelSelectCommand extends Module {
|
||||
type: CommandType.ChannelSelect;
|
||||
onEvent: EventPlugin<CommandType.ChannelSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: ChannelSelectMenuInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface RoleSelectCommand extends Module {
|
||||
type: CommandType.RoleSelect;
|
||||
onEvent: EventPlugin<CommandType.RoleSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: RoleSelectMenuInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface MentionableSelectCommand extends Module {
|
||||
type: CommandType.MentionableSelect;
|
||||
onEvent: EventPlugin<CommandType.MentionableSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: MentionableSelectMenuInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface UserSelectCommand extends Module {
|
||||
type: CommandType.UserSelect;
|
||||
onEvent: EventPlugin<CommandType.UserSelect>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: UserSelectMenuInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface ModalSubmitCommand extends Module {
|
||||
type: CommandType.Modal;
|
||||
onEvent: EventPlugin<CommandType.Modal>[];
|
||||
plugins: CommandPlugin[];
|
||||
execute: (ctx: ModalSubmitInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export interface AutocompleteCommand extends Module {
|
||||
name?: never;
|
||||
description?: never;
|
||||
type?: never;
|
||||
onEvent: AutocompletePlugin[];
|
||||
execute: (ctx: AutocompleteInteraction) => Awaitable<unknown>;
|
||||
}
|
||||
|
||||
export type EventModule = DiscordEventCommand | SernEventCommand | ExternalEventCommand;
|
||||
export type CommandModule =
|
||||
| TextCommand
|
||||
| SlashCommand
|
||||
| BothCommand
|
||||
| ContextMenuUser
|
||||
| ContextMenuMsg
|
||||
| ButtonCommand
|
||||
| StringSelectCommand
|
||||
| MentionableSelectCommand
|
||||
| UserSelectCommand
|
||||
| ChannelSelectCommand
|
||||
| RoleSelectCommand
|
||||
| ModalSubmitCommand;
|
||||
|
||||
export type AnyModule = CommandModule | EventModule;
|
||||
|
||||
//https://stackoverflow.com/questions/64092736/alternative-to-switch-statement-for-typescript-discriminated-union
|
||||
// Explicit Module Definitions for mapping
|
||||
export type CommandModuleDefs = {
|
||||
[CommandType.Text]: TextCommand;
|
||||
[CommandType.Slash]: SlashCommand;
|
||||
[CommandType.Both]: BothCommand;
|
||||
[CommandType.CtxMsg]: ContextMenuMsg;
|
||||
[CommandType.CtxUser]: ContextMenuUser;
|
||||
[CommandType.Button]: ButtonCommand;
|
||||
[CommandType.StringSelect]: StringSelectCommand;
|
||||
[CommandType.RoleSelect] : RoleSelectCommand;
|
||||
[CommandType.ChannelSelect] : ChannelSelectCommand;
|
||||
[CommandType.MentionableSelect] : MentionableSelectCommand;
|
||||
[CommandType.UserSelect] : UserSelectCommand;
|
||||
[CommandType.Modal]: ModalSubmitCommand;
|
||||
};
|
||||
|
||||
export type EventModuleDefs = {
|
||||
[EventType.Sern]: SernEventCommand;
|
||||
[EventType.Discord]: DiscordEventCommand;
|
||||
[EventType.External]: ExternalEventCommand;
|
||||
};
|
||||
|
||||
export interface SernAutocompleteData extends Omit<BaseApplicationCommandOptionsData, 'autocomplete'> {
|
||||
autocomplete: true;
|
||||
type:
|
||||
| ApplicationCommandOptionType.String
|
||||
| ApplicationCommandOptionType.Number
|
||||
| ApplicationCommandOptionType.Integer;
|
||||
command: AutocompleteCommand;
|
||||
}
|
||||
|
||||
/**
|
||||
* Type that replaces autocomplete with {@link SernAutocompleteData}
|
||||
*/
|
||||
export type BaseOptions =
|
||||
| ApplicationCommandChoicesData
|
||||
| ApplicationCommandNonOptionsData
|
||||
| ApplicationCommandChannelOptionData
|
||||
| ApplicationCommandNumericOptionData
|
||||
| ApplicationCommandAttachmentOption
|
||||
| SernAutocompleteData;
|
||||
|
||||
export interface SernSubCommandData extends BaseApplicationCommandOptionsData {
|
||||
type: ApplicationCommandOptionType.Subcommand;
|
||||
required?: never;
|
||||
options?: BaseOptions[];
|
||||
}
|
||||
|
||||
export interface SernSubCommandGroupData extends BaseApplicationCommandOptionsData {
|
||||
type: ApplicationCommandOptionType.SubcommandGroup;
|
||||
required?: never;
|
||||
options?: SernSubCommandData[];
|
||||
}
|
||||
|
||||
export type SernOptionsData<U extends ApplicationCommandOptionData = ApplicationCommandOptionData> =
|
||||
U extends ApplicationCommandSubCommandData
|
||||
? SernSubCommandData
|
||||
: U extends ApplicationCommandSubGroupData
|
||||
? SernSubCommandGroupData
|
||||
: BaseOptions;
|
||||
Reference in New Issue
Block a user