Base de bot de discord

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.

src/index.ts
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.

src/index.ts
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.

src/index.ts
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).

src/index.ts
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.

src/index.ts
await bootstrap({ 
    meta: import.meta,
    generateImportsFile: true
});

O resultado é algo parecido com isso:

src/imports.ts
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:

src/helpers/imports.ts
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:

src/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


On this page