Bootstrap
Função inicial do projeto de bot de discord
Ponto de entrada
O arquivo index.ts
da pasta src
é o ponto de entrada deste projeto, é nele que a função bootstrap
é executada para ligar a aplicação de bot de discord.
import { bootstrap } from "#base";
await bootstrap({ meta: import.meta });
Neste tópico você vai conferir algumas opções interessantes dessa função.
Meta
Essa opção deve receber o import.meta do arquivo atual, ao executar o projeto em desenvolvimento, o diretório de import.meta será src
, mas quando o projeto for buildado ele será build
.
Essa opção é importante para que os arquivos da pasta discord possam ser importados antes do bot iniciar.
Modules
Você pode passar um array de padrões glob relativos à pasta atual. Todos os arquivos arquivos e diretórios encontrados neste padrão, serão importados antes do bot iniciar.
await bootstrap({
meta: import.meta,
modules: [
"./MyCommands/**",
"./alt/events",
"./tools/**/*.mod.{ts,js}"
]
});
Com isso você pode criar comandos
, eventos
e responders
dentro desses diretórios e eles serão carregados antes do bot iniciar.
Também tem a possibilidade de carregar arquivos com side effects, assim podendo registrar variáveis globais, alterar protótipos de objetos existentes e entre outros.
Mas um aviso importante sobre essa opção! Tome cuidado para não especificar um padrão que importe tudo do workdir (o diretório de trabalho atual, em desenvolvimento é a pasta src, e em produção é a pasta build) ou da pasta src/discord/base
. Isso irá causar dependências circulares e por consequência, crashando o projeto.
Então evite algo como isso:
await bootstrap({
meta: import.meta,
modules: [
"./discord/base/**",
"./**/*",
"./",
"."
]
});
Logs de carregamento (loadLogs)
É possível desabilitar as logs de carregamento das estruturas dessa base definindo falso
na opção loadLogs
da função bootstrap
.
await bootstrap({
meta: import.meta,
loadLogs: false
});
Antes de carregar (beforeLoad)
Você você pode executar um código antes dos diretórios serem carregados e recebe o client
antes de ficar online (ready).
await bootstrap({
meta: import.meta,
async beforeLoad(client) {
console.log(client.application); // null;
console.log("Isso ocorre antes do carregamento dos diretórios")
},
});