🤖 Primeiro Bot
Neste guia você vai criar seu primeiro bot com o fluxo novo do Nexo.
🚀 Fluxo recomendado
- Crie o projeto:
npx nexo create meu-bot
- Entre na pasta:
cd meu-bot
- Inicie o bot em desenvolvimento:
npm run dev
📁 Estrutura criada
O template já vem com uma base pronta para começar:
📂 meu-bot/
┣ 📂 src/
┃ ┣ 📂 commands/
┃ ┃ ┗ 📂 utils/
┃ ┃ ┗ 📜 ping.ts
┃ ┣ 📂 events/
┃ ┃ ┗ 📜 ready.ts
┃ ┗ 📜 index.ts
┗ 📜 package.json
O template cria uma estrutura inicial com o ponto de entrada em src/index.ts, um comando de exemplo em src/commands/utils/ping.ts e um evento de inicialização em src/events/ready.ts.
Criação Manual (Avançado)
Se você quiser montar a base sem o gerador, siga o fluxo antigo abaixo.
🚀 Como funciona
- 🧠 Você cria arquivos em pastas específicas.
- 📁 Nexo carrega automaticamente comandos e eventos dos caminhos definidos em
paths.commandsepaths.events. - ⚡ O Bot inicia com
Bootstrap.init(). - ✅ Não precisa de registro manual de comandos ou eventos.
📁 Estrutura mínima (exemplo)
Exemplo de estrutura de pastas:
📂 src/
┣ 📂 commands/
┃ ┗ 📂 util/ (categoria)
┃ ┗ 📜 ping.ts (seu primeiro comando)
┣ 📂 events/
┃ ┗ 📜 ready.ts (evento de inicialização)
┗ 📜 index.ts (arquivo principal)
Este é apenas um exemplo usando src/commands e src/events.
🚀 Inicializando o bot
Crie seu arquivo principal (por exemplo, src/index.ts) com a inicialização do bot usando Bootstrap.init():
- JavaScript
- TypeScript
const { Bootstrap } = require('nexocord');
const { GatewayIntentBits } = require('discord.js');
async function main() {
await Bootstrap.init({
token: process.env.TOKEN,
intents: [GatewayIntentBits.Guilds],
paths: {
commands: 'src/commands', // exemplo
events: 'src/events', // exemplo
},
});
}
main();
import { Bootstrap } from 'nexocord';
import { GatewayIntentBits } from 'discord.js';
await Bootstrap.init({
token: process.env.TOKEN,
intents: [GatewayIntentBits.Guilds],
paths: {
commands: 'src/commands', // exemplo
events: 'src/events', // exemplo
},
});
token: Seu token de bot do Discord (mais abaixo como obter).intents: Permissões que o bot precisa. Aqui usamos apenasGuilds(o mínimo para começar).- Veja discord.js intents para mais opções.
paths: Diretórios onde o Nexo encontrará comandos e eventos para carregamento automático.await:Bootstrap.init()é assíncrono e inicializa o bot.
🔘 Primeiro comando
Crie o arquivo do comando no diretório definido em paths.commands (exemplo: src/commands/util/ping.ts):
- JavaScript
- TypeScript
const { createCommand, CommandType } = require('nexocord');
module.exports = createCommand({
name: 'ping',
description: 'Responde com pong!',
type: CommandType.ChatInput,
async run(interaction) {
await interaction.reply({ content: 'Pong! 🏓' });
},
});
import { createCommand, CommandType } from 'nexocord';
export default createCommand({
name: 'ping',
description: 'Responde com pong!',
type: CommandType.ChatInput,
async run(interaction) {
await interaction.reply({ content: 'Pong! 🏓' });
},
});
export default: Nexo busca exportações padrão em cada arquivo.createCommand(...): Função que registra um comando.CommandType.ChatInput: Comando de slash (começando com/).interaction: Objeto da interação do Discord (contém dados do usuário, servidor, etc).
✅ Evento de inicialização
Crie o arquivo do evento no diretório definido em paths.events (exemplo: src/events/ready.ts):
- JavaScript
- TypeScript
const { createEvent, EventType } = require('nexocord');
module.exports = createEvent({
name: 'ready',
once: true,
run(client) {
console.log(`✅ Bot ${client.user?.username} está online!`);
},
});
import { createEvent, EventType } from 'nexocord';
export default createEvent({
name: 'ready',
once: true, // Executar apenas uma vez
run(client) {
console.log(`✅ Bot ${client.user?.username} está online!`);
},
});
EventType.Discord: Evento nativo do Discord.js (em vez de um evento customizado).once: true: Dispara apenas uma vez quando o bot inicia.- Sem
once, dispararia toda vez que o evento ocorrer.
- Sem
name: 'ready': Nome do evento Discord.js (corresponde aclient.on('ready', ...))client: Cliente discord.js com dados do bot (usuário, guilds, etc).
▶️ Executando o bot
Rode o bot em modo desenvolvimento:
- npm
- bun
npm run dev
bun run dev
Ou use o CLI do Nexo diretamente:
# npm
npx nexo dev
# bun
bunx nexo dev
🎯 Resultado esperado
Quando tudo funcionar:
- ✅ Bot aparece online no Discord
- ✅ Console mostra:
✅ Bot [seu-bot-nome] está online! - ✅ Comando
/pingaparece na lista de comandos - ✅ Digitar
/pinge pressionar Enter → responde Pong! 🏓
Pronto! Seu primeiro bot está rodando! 🎉
💡 Dicas rápidas
🔐 Token seguro
Para não expor seu token no código:
- Crie um arquivo
.envna raiz do projeto:
DISCORD_TOKEN=MTA1Nzk4OTU5NzE2NzY0Nzc4Nw.xxx
- Nexo carrega automaticamente — você acessa via
process.env.DISCORD_TOKEN
- Nunca commite
.envno Git — adicione à.gitignore - Seu token é como uma senha — qualquer pessoa pode usar para controlar seu bot
- Se expuser o token, revogue-o imediatamente no Dashboard do Discord
⚠️ Erros comuns
| Erro | Solução |
|---|---|
Error: no token provided | Verifique se .env existe e tem DISCORD_TOKEN com valor correto |
Comando /ping não aparece | Reinicie o bot ou execute / novamente para sincronizar comandos |
Error: GUILDS intent is required | Adicione GatewayIntentBits.Guilds aos intents |
Bot não conecta | Verifique token, internet e se o token não foi revogado |
📚 Próximos passos:
- Leia Comandos → para aprender mais detalhes
- Leia Eventos → para outros eventos
- Explore Responders → para interações