Los siguientes códigos puedes utilizarlos dentro de cualquier archivo TypeScript de tu proyecto. Lo recomendable es colocar un único declare module 'seyfert' en el archivo principal src/index.ts que contenga todo lo necesario para tu bot.
Clientes
Seyfert ofrece varios tipos de cliente para instanciar tu bot, lo que podría generar confusión al referenciar el cliente en distintas partes de tu código. Para evitar esto, puedes indicarle a TypeScript qué tipo de cliente estás utilizando. Asegúrate de elegir solo una de las siguientes tres implementaciones:
importtype {
typeParseClient<TextendsBaseClient> =T
ParseClient,
classClient<Readyextendsboolean=boolean>
Client,
classHttpClient
HttpClient,
classWorkerClient<Readyextendsboolean=boolean>
WorkerClient } from'seyfert';
declaremodule'seyfert' {
interface
interfaceUsingClient
UsingClientextends
typeParseClient<TextendsBaseClient> =T
ParseClient<
classClient<Readyextendsboolean=boolean>
Client<true>> { }
interface
interfaceUsingClient
UsingClientextends
typeParseClient<TextendsBaseClient> =T
ParseClient<
classHttpClient
HttpClient> { }
interface
interfaceUsingClient
UsingClientextends
typeParseClient<TextendsBaseClient> =T
ParseClient<
classWorkerClient<Readyextendsboolean=boolean>
WorkerClient<true>> { }
}
Intermediarios (Middlewares)
Para utilizar tus middlewares en todo el proyecto, es necesario nuevamente informar a TypeScript sobre su estructura y composición. Exporta todos los middlewares de tu código y proporciónaselos a Seyfert de la siguiente manera:
// Suponiendo que exportaste todos los middlewares de './middlewares';
Esto se aplica de manera similar a los middlewares globales, los cuales se ejecutan automáticamente en cada comando, incluso si no han sido especificados explícitamente en él.
// Suponiendo que exportaste todos los middlewares de './globalMiddlewares';
Si aún no sabes qué es un middleware, puedes revisar sus casos de uso y estructura en su respectiva sección.
Idiomas
Para configurar correctamente los tipos para los idiomas, se recomienda establecer un idioma principal o base que siempre actualices. Así, todos los tipos se derivarán de este idioma, lo que facilitará mantener el resto de las traducciones al día.
// Suponiendo que tu lenguaje base (principal) está en './langs/en';
Error ts(2741) ― Property 'soloParaAdmins' is missing in type '{}' but required in type 'ExtraProps'.
})
class
classTest
Testextends
classCommand
Command {}
declaremodule'seyfert' {
interface
interfaceExtraProps
ExtraProps {
ExtraProps.soloParaAdmins: boolean
soloParaAdmins:boolean;
ExtraProps.deshabilitado?:true
deshabilitado?:true;
ExtraProps.categoria?:string
categoria?:string
}
}
Opciones internas
Como Seyfert admite diversas formas de operar, es necesario añadir tipos según lo requieran nuestras implementaciones. Para ello, existe InternalOptions, una interfaz diseñada para incluir propiedades que transformen los tipos de Seyfert en algo más completo.
declaremodule'seyfert' {
interface
interfaceInternalOptions
InternalOptions {
InternalOptions.withPrefix: true
withPrefix:true; // o false
InternalOptions.asyncCache: false
asyncCache:false; // o true
}
}
withPrefix
Establecer esta propiedad en true indica a Seyfert que el contexto puede incluir un mensaje o una interacción, siendo ambos opcionales. De forma predeterminada, .interaction siempre está presente en el contexto.
asyncCache
Establecer esta propiedad en true indica a Seyfert si la caché devolverá una promesa. Por defecto, Seyfert utiliza MemoryAdapter, una caché en RAM que no devuelve promesas, mientras que RedisAdapter sí lo hace.
Configuración
En Seyfert, puedes agregar más propiedades al archivo de configuración seyfert.config.mjs, independientemente de si estás utilizando la configuración http o bot. Esto se puede lograr utilizando ExtendedRC de la siguiente manera:
declaremodule'seyfert' {
interface
interfaceExtendedRC
ExtendedRC {
ExtendedRC.developers: string[]
developers:string[];
// más propiedades aquí...
}
}
Ubicaciones
Al igual que es posible extender la configuración base de Seyfert, también puedes ampliar el objeto de las ubicaciones de tus carpetas (locations) utilizando ExtendedRCLocations. Esto se realiza de la siguiente manera: