mirror of
https://github.com/sern-handler/handler
synced 2026-06-22 07:42:14 +00:00
refactor : modify module typings to override
This commit is contained in:
@@ -2,6 +2,7 @@ import type { Message } from "discord.js";
|
||||
import { map, filter, fromEvent, Observable, of, concatMap, tap } from "rxjs";
|
||||
import { None, Some } from "ts-results";
|
||||
import { CommandType } from "../sern";
|
||||
import type { TextCommand } from "../structures/commands/module";
|
||||
import Context from "../structures/context";
|
||||
import type Wrapper from "../structures/wrapper";
|
||||
import { isNotFromDM, isNotFromBot, hasPrefix, fmt } from "../utilities/messageHelpers";
|
||||
@@ -25,7 +26,7 @@ export const onMessageCreate = (wrapper : Wrapper) => {
|
||||
),
|
||||
filter( ([mod]) => mod !== undefined && (mod.type & CommandType.TEXT) != 0 ),
|
||||
tap ( ([ mod, ctx, args ]) => {
|
||||
mod!.execute(ctx, ['text', args])
|
||||
(mod as TextCommand)!.execute(ctx, ['text', args])
|
||||
}),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1,30 +1,34 @@
|
||||
import type { ApplicationCommandOptionData, Awaitable, Interaction } from "discord.js";
|
||||
import type { Args } from "../../../types/handler";
|
||||
import type { ApplicationCommandOptionData, Awaitable, ChatInputCommandInteraction, Interaction } from "discord.js";
|
||||
import type { Args, Override } from "../../../types/handler";
|
||||
import type { CommandType } from "../../sern";
|
||||
import type Context from "../context";
|
||||
|
||||
|
||||
type executeSlash = { execute : (ctx : Context<ChatInputCommandInteraction>, args: Args) => Awaitable<void> };
|
||||
|
||||
export interface BaseModule {
|
||||
name? : string;
|
||||
description : string;
|
||||
execute: (ctx: Context<Interaction>, args: Args) => Awaitable<void>;
|
||||
}
|
||||
export type Text = {
|
||||
export type TextCommand = {
|
||||
type : CommandType.TEXT;
|
||||
alias : string[] | [],
|
||||
};
|
||||
export type Slash = {
|
||||
} & BaseModule;
|
||||
|
||||
export type SlashCommand = {
|
||||
type : CommandType.SLASH;
|
||||
options : ApplicationCommandOptionData[] | [],
|
||||
};
|
||||
} & Override<BaseModule, executeSlash>;
|
||||
|
||||
export type Both = {
|
||||
export type BothCommand = {
|
||||
type : CommandType.BOTH;
|
||||
alias : string[] | [];
|
||||
options : ApplicationCommandOptionData[] | [],
|
||||
}
|
||||
} & Override<BaseModule, executeSlash>;
|
||||
|
||||
|
||||
export type Module =
|
||||
(BaseModule & Slash) | (BaseModule & Both) | (BaseModule & Text);
|
||||
|
||||
TextCommand
|
||||
| SlashCommand
|
||||
| BothCommand;
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import { CommandType } from "../../sern";
|
||||
import type { Text, Both, Slash, BaseModule } from "./module";
|
||||
import type { TextCommand, BothCommand, SlashCommand, BaseModule } from "./module";
|
||||
|
||||
//https://stackoverflow.com/questions/64092736/alternative-to-switch-statement-for-typescript-discriminated-union
|
||||
|
||||
// Explicit Module Definitions for mapping
|
||||
export type ModuleDefs = {
|
||||
[CommandType.TEXT] : Text & BaseModule,
|
||||
[CommandType.SLASH] : Slash & BaseModule,
|
||||
[CommandType.BOTH] : Both & BaseModule,
|
||||
[CommandType.TEXT] : TextCommand,
|
||||
[CommandType.SLASH] : SlashCommand,
|
||||
[CommandType.BOTH] : BothCommand,
|
||||
}
|
||||
|
||||
//Keys of ModuleDefs
|
||||
|
||||
@@ -11,7 +11,7 @@ function firstSome<T>(...args : Option<T>[]) : T | null {
|
||||
return null;
|
||||
}
|
||||
|
||||
export default class Context<I extends Interaction> {
|
||||
export default class Context<I extends Interaction = Interaction> {
|
||||
private msg: Option<Message> = None;
|
||||
private interac: Option<I> = None;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user