mirror of
https://github.com/sern-handler/handler
synced 2026-06-28 02:32:15 +00:00
* step 1 * Refactorings * command modules do not depend on anything but itself * tearing it up * Remove module store, manager, and Intializable type * consolidate interfaces in single file * consolidate default services in single file * TEAR IT UP * fix text compile * the end of sern init?? * Presence namespaced types removed * internal namespace * clean up dependencies * fix test * fix circular dependency * still broken but progress * remove barrel for core/structs * reffactor * refactor allat * more refactoring * prototyping linking static handler * cleanup tests, codegen, and importing handler * some refactor * generify partition * for now copy paste new ioc system * removeiti * fdsfD * ensure container is init'd * fix absPath gen * working on bun compat * refactor and clean up and reenter v3 module loading * dsfsd * refactor, add cron types, reinstante module loader * ready handler revamped so much cleaner * fdssdf * refactor deps list * add more tests, polish up ioc * up to speed with event modules * i think cron works * cron works now, poc * ksdjkldsfld * updating ioc api, experimenting with cron * save b4 thunder and lightning * plugin data reduction & args changes * freeze module after plugins, updateModule, and more * simplify plugin args and prepare for reduction among plugins * add deps to plugin calls and execute * plugin system loking better, tbd type * porg * initplugins inject deps, inconspicuos * fix faiklling test * fix initPlugins not reassigning * parsingParams kinda * proper mapping * dynamic customIds * handling customId params working * testing n shi * inlineinignsd * consolidate fmt * once on eventModules * refact,simplf * readd vitest and Asset fn * fix typings * assets fn complete * more intuitive context.options and Asset typings * add init hooks not firing * -file,-updateModule,publish? * fix: ioc deps not created correctly * documentation, add json for Asset * remove asset * ss * finish ioc transition * nvm, now i did * s * update locals api, docs, tests * fix tests * fix up tests and cleanup * fix * Update src/core/functions.ts Co-authored-by: Evo <85353424+EvolutionX-10@users.noreply.github.com> * better documentation * temp fix * namespace presence types again * revising cron modules and better error messages * scheduler ids * more descriptive errors * refactor to not type leak and job cancellation * refactor n better signatures for task scheduler * documentation * fix swap not accepting functions * change task signature --------- Co-authored-by: Evo <85353424+EvolutionX-10@users.noreply.github.com>
75 lines
3.1 KiB
TypeScript
75 lines
3.1 KiB
TypeScript
import { ApplicationCommandType, ComponentType, type Interaction, InteractionType } from 'discord.js';
|
|
import { CommandType, EventType } from './structures/enums';
|
|
|
|
const parseParams = (event: { customId: string }, append: string) => {
|
|
const hasSlash = event.customId.indexOf('/')
|
|
if(hasSlash === -1) {
|
|
return { id:event.customId+append };
|
|
}
|
|
const baseid = event.customId.substring(0, hasSlash);
|
|
const params = event.customId.substring(hasSlash+1);
|
|
return { id: baseid+append, params }
|
|
}
|
|
/**
|
|
* Construct unique ID for a given interaction object.
|
|
* @param event The interaction object for which to create an ID.
|
|
* @returns An array of unique string IDs based on the type and properties of the interaction object.
|
|
*/
|
|
export function reconstruct<T extends Interaction>(event: T) {
|
|
switch (event.type) {
|
|
case InteractionType.MessageComponent: {
|
|
const data = parseParams(event, `_C${event.componentType}`)
|
|
return [data];
|
|
}
|
|
case InteractionType.ApplicationCommand:
|
|
case InteractionType.ApplicationCommandAutocomplete:
|
|
return [{ id: `${event.commandName}_A${event.commandType}` }, { id: `${event.commandName}_B` }];
|
|
//Modal interactions are classified as components for sern
|
|
case InteractionType.ModalSubmit: {
|
|
const data = parseParams(event, '_M');
|
|
return [data];
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
*
|
|
* A magic number to represent any commandtype that is an ApplicationCommand.
|
|
*/
|
|
const PUBLISHABLE = 0b000000001111;
|
|
|
|
|
|
const TypeMap = new Map<number, number>([[CommandType.Text, 0],
|
|
[CommandType.Both, 0],
|
|
[CommandType.Slash, ApplicationCommandType.ChatInput],
|
|
[CommandType.CtxUser, ApplicationCommandType.User],
|
|
[CommandType.CtxMsg, ApplicationCommandType.Message],
|
|
[CommandType.Button, ComponentType.Button],
|
|
[CommandType.StringSelect, ComponentType.StringSelect],
|
|
[CommandType.Modal, InteractionType.ModalSubmit],
|
|
[CommandType.UserSelect, ComponentType.UserSelect],
|
|
[CommandType.MentionableSelect, ComponentType.MentionableSelect],
|
|
[CommandType.RoleSelect, ComponentType.RoleSelect],
|
|
[CommandType.ChannelSelect, ComponentType.ChannelSelect]]);
|
|
|
|
/*
|
|
* Generates an id based on name and CommandType.
|
|
* A is for any ApplicationCommand. C is for any ComponentCommand
|
|
* Then, another number fetched from TypeMap
|
|
*/
|
|
export function create(name: string, type: CommandType | EventType) {
|
|
if(type == CommandType.Text) {
|
|
return `${name}_T`;
|
|
}
|
|
if(type == CommandType.Both) {
|
|
return `${name}_B`;
|
|
}
|
|
if(type == CommandType.Modal) {
|
|
return `${name}_M`;
|
|
}
|
|
const am = (PUBLISHABLE & type) !== 0 ? 'A' : 'C';
|
|
return `${name}_${am}${TypeMap.get(type)!}`
|
|
}
|
|
|
|
|
|
|