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 "@constatic/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.
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")
},
});Gerar arquivo de importações (generateImportsFile)
Essa opção gera um arquivo dentro de src com todas as importações dos arquivos da pasta discord e padrões de caminhos passado para a opção modules de forma relativa.
await bootstrap({
meta: import.meta,
generateImportsFile: true
});O resultado é algo parecido com isso:
import "./discord/commands/public/ping.ts";
import "./discord/commands/public/counter.ts";
import "./discord/responders/buttons/reminder.ts";É possível customizar o local do arquivo definindo o caminho dele ao invés de true. Mas é recomendado sempre gerar dentro do diretório src:
await bootstrap({
meta: import.meta,
generateImportsFile: "./helpers/imports.ts"
});Esse recurso pode ser útil caso você queira compilar o seu projeto de bot em um arquivo executável com bun. Nesse caso o projeto precisa saber previamente quais arquivos devem ser importados antes deles serem compilados em um único arquivo. O funcionamento padrão da @constatic/base é carregar os arquivos em tempo de execução toda vez que o projeto inicia, através de uma função glob que obtem todos os arquivos válidos, o que não é possível ser feito depois do projeto ser compilado em um único arquivo.
Então você pode simplesmente adicionar essa importação no index.ts:
import { bootstrap } from "@constatic/base";
import { env } from "#env"
import "./imports.js";
await bootstrap({
meta: import.meta, env,
generateImportsFile: true
});Dessa forma o bun consegue saber todos os arquivos que ele precisa incluir no executável final