Obrigado pelo interesse em contribuir com o Lucy Bot! Este guia vai te ajudar a entender como contribuir efetivamente.
- Faça fork do repositório
- Clone seu fork:
git clone https://github.com/seu-usuario/lucy.git cd lucy - Instale as dependências:
npm install
- Configure o ambiente:
cp .env.example .env # Edite o .env com suas credenciais
Antes de fazer qualquer alteração, certifique-se de que todos os testes passam:
npm testSEMPRE escreva os testes primeiro, depois implemente a funcionalidade:
- Red: Escreva um teste que falhe
- Green: Escreva o código mínimo para passar
- Refactor: Melhore o código mantendo os testes passando
Use commits semânticos:
Add: nova funcionalidadeFix: correção de bugUpdate: alteração em funcionalidade existenteRemove: remoção de códigoDocs: alterações na documentaçãoTest: adição ou alteração de testesRefactor: refatoração sem mudança de funcionalidade
main- Branch principal (protegida)develop- Branch de desenvolvimentofeature/nome-da-feature- Novas funcionalidadesfix/nome-do-bug- Correçõeshotfix/nome-do-hotfix- Correções urgentes
1. Criar teste primeiro:
// tests/commands/help.test.js
const HelpCommand = require('../../src/commands/help');
describe('HelpCommand', () => {
test('should list available commands', async () => {
const command = new HelpCommand();
const mockInteraction = {
reply: jest.fn()
};
await command.execute(mockInteraction);
expect(mockInteraction.reply).toHaveBeenCalled();
});
});2. Implementar comando:
// src/commands/help.js
const { SlashCommandBuilder } = require('discord.js');
class HelpCommand {
constructor() {
this.name = 'help';
this.description = 'Mostra lista de comandos disponíveis';
// ... resto da implementação
}
async execute(interaction) {
// Implementação
}
}
module.exports = HelpCommand;Similar aos comandos, mas na pasta src/events/:
// src/events/guildMemberAdd.js
class GuildMemberAddEvent {
constructor() {
this.name = 'guildMemberAdd';
this.once = false;
}
async execute(member) {
// Lógica do evento
}
}
module.exports = GuildMemberAddEvent;Funções reutilizáveis em src/utils/index.js:
/**
* Nova função utilitária
* @param {string} input - Entrada
* @returns {string} Saída processada
*/
function minhaFuncao(input) {
// Implementação
return input.toUpperCase();
}
module.exports = {
// ... outras funções
minhaFuncao
};describe('NomeDoComponente', () => {
let component;
let mockDependencies;
beforeEach(() => {
// Setup antes de cada teste
mockDependencies = {
// mocks necessários
};
component = new NomeDoComponente(mockDependencies);
});
afterEach(() => {
// Limpeza após cada teste
jest.clearAllMocks();
});
test('should do something specific', () => {
// Arrange (preparar)
const input = 'test input';
// Act (executar)
const result = component.method(input);
// Assert (verificar)
expect(result).toBe('expected output');
});
});Mantenha a cobertura acima de 80%:
npm run test:coverageUse mocks para dependências externas:
jest.mock('discord.js');
jest.mock('../utils');
const mockInteraction = {
reply: jest.fn(),
user: { id: '123', username: 'testuser' },
guild: { id: '456', name: 'Test Guild' }
};- Todos os testes passam
- Cobertura de testes mantida/aumentada
- Código segue padrões ESLint
- Documentação atualizada (se necessário)
- Commits seguem padrão semântico
- Funcionalidade testada manualmente
- Não quebra funcionalidades existentes
- Funcionalidade: O código faz o que deveria?
- Testes: Há testes adequados?
- Performance: Há problemas de performance?
- Segurança: Há vulnerabilidades?
- Padrões: Segue os padrões do projeto?
Use o template de issue para bugs:
**Descrição do Bug**
Descrição clara do problema.
**Para Reproduzir**
1. Execute comando X
2. Faça Y
3. Veja erro Z
**Comportamento Esperado**
O que deveria acontecer.
**Screenshots/Logs**
Se aplicável, adicione prints ou logs.
**Ambiente**
- OS: [Windows/Linux/Mac]
- Node.js: [versão]
- Discord.js: [versão]Use o template de feature request:
**Sua sugestão está relacionada a um problema?**
Descrição clara do problema.
**Descreva a solução que você gostaria**
Descrição clara do que você quer.
**Descreva alternativas consideradas**
Outras soluções que você pensou.
**Contexto adicional**
Qualquer contexto ou screenshot.- GitHub Issues: Para bugs e features
- GitHub Discussions: Para perguntas gerais
- Discord da Dev's Cafe: Para discussões em tempo real
- Seja respeitoso e construtivo
- Use linguagem clara e objetiva
- Forneça contexto suficiente
- Seja paciente com reviews
Contribuições significativas serão reconhecidas:
- Adição ao arquivo CONTRIBUTORS.md
- Menção nas release notes
- Badge de contribuidor no Discord
Dúvidas? Abra uma issue com a tag question ou entre no Discord da Dev's Cafe!
Obrigado por contribuir! 🎉