Skip to content

Commit 86c9128

Browse files
committed
Db modules
1 parent b5f4ad9 commit 86c9128

35 files changed

Lines changed: 8248 additions & 2 deletions

.env.example

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Bot Configuration
2+
DISCORD_TOKEN=your_bot_token_here
3+
CLIENT_ID=your_client_id_here
4+
GUILD_ID=your_guild_id_here_optional
5+
6+
# Environment
7+
NODE_ENV=development
8+
9+
# Logging
10+
LOG_LEVEL=info
11+
12+
# Configurações do Supabase (Banco Persistente)
13+
SUPABASE_URL=https://seu-projeto.supabase.co
14+
SUPABASE_KEY=sua_chave_anon_do_supabase_aqui
15+
16+
# Configurações opcionais do SQLite
17+
SQLITE_PATH=./data/shortterm.db

.eslintrc.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"env": {
3+
"browser": false,
4+
"es2021": true,
5+
"node": true,
6+
"jest": true
7+
},
8+
"extends": [
9+
"eslint:recommended"
10+
],
11+
"parserOptions": {
12+
"ecmaVersion": "latest",
13+
"sourceType": "module"
14+
},
15+
"rules": {
16+
"indent": ["error", 2],
17+
"linebreak-style": ["error", "unix"],
18+
"quotes": ["error", "single"],
19+
"semi": ["error", "always"],
20+
"no-console": "warn",
21+
"no-unused-vars": "error"
22+
}
23+
}

.gitignore

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Dependencies
2+
node_modules/
3+
yarn-error.log
4+
package-lock.json
5+
6+
# Environment variables
7+
.env
8+
.env.local
9+
10+
# Logs
11+
logs
12+
*.log
13+
npm-debug.log*
14+
yarn-debug.log*
15+
yarn-error.log*
16+
17+
# Coverage directory used by tools like istanbul
18+
coverage/
19+
*.lcov
20+
21+
# Jest cache
22+
.jest/
23+
24+
# IDE
25+
.vscode/
26+
.idea/
27+
*.swp
28+
*.swo
29+
30+
# OS generated files
31+
.DS_Store
32+
.DS_Store?
33+
._*
34+
.Spotlight-V100
35+
.Trashes
36+
ehthumbs.db
37+
Thumbs.db

CONTRIBUTING.md

Lines changed: 303 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,303 @@
1+
# Contribuindo para Lucy Bot
2+
3+
Obrigado pelo interesse em contribuir com o Lucy Bot! Este guia vai te ajudar a entender como contribuir efetivamente.
4+
5+
## 🚀 Como Começar
6+
7+
### 1. Configuração do Ambiente
8+
9+
1. Faça fork do repositório
10+
2. Clone seu fork:
11+
```bash
12+
git clone https://github.com/seu-usuario/lucy.git
13+
cd lucy
14+
```
15+
3. Instale as dependências:
16+
```bash
17+
npm install
18+
```
19+
4. Configure o ambiente:
20+
```bash
21+
cp .env.example .env
22+
# Edite o .env com suas credenciais
23+
```
24+
25+
### 2. Executar Testes
26+
27+
Antes de fazer qualquer alteração, certifique-se de que todos os testes passam:
28+
29+
```bash
30+
npm test
31+
```
32+
33+
## 📝 Padrões de Desenvolvimento
34+
35+
### Test-Driven Development (TDD)
36+
37+
**SEMPRE** escreva os testes primeiro, depois implemente a funcionalidade:
38+
39+
1. **Red**: Escreva um teste que falhe
40+
2. **Green**: Escreva o código mínimo para passar
41+
3. **Refactor**: Melhore o código mantendo os testes passando
42+
43+
### Padrão de Commits
44+
45+
Use commits semânticos:
46+
47+
- `Add: nova funcionalidade`
48+
- `Fix: correção de bug`
49+
- `Update: alteração em funcionalidade existente`
50+
- `Remove: remoção de código`
51+
- `Docs: alterações na documentação`
52+
- `Test: adição ou alteração de testes`
53+
- `Refactor: refatoração sem mudança de funcionalidade`
54+
55+
### Estrutura de Branch
56+
57+
- `main` - Branch principal (protegida)
58+
- `develop` - Branch de desenvolvimento
59+
- `feature/nome-da-feature` - Novas funcionalidades
60+
- `fix/nome-do-bug` - Correções
61+
- `hotfix/nome-do-hotfix` - Correções urgentes
62+
63+
## 🛠️ Tipos de Contribuição
64+
65+
### 1. Adicionando Comandos
66+
67+
#### Exemplo: Comando de Ajuda
68+
69+
**1. Criar teste primeiro:**
70+
```javascript
71+
// tests/commands/help.test.js
72+
const HelpCommand = require('../../src/commands/help');
73+
74+
describe('HelpCommand', () => {
75+
test('should list available commands', async () => {
76+
const command = new HelpCommand();
77+
const mockInteraction = {
78+
reply: jest.fn()
79+
};
80+
81+
await command.execute(mockInteraction);
82+
83+
expect(mockInteraction.reply).toHaveBeenCalled();
84+
});
85+
});
86+
```
87+
88+
**2. Implementar comando:**
89+
```javascript
90+
// src/commands/help.js
91+
const { SlashCommandBuilder } = require('discord.js');
92+
93+
class HelpCommand {
94+
constructor() {
95+
this.name = 'help';
96+
this.description = 'Mostra lista de comandos disponíveis';
97+
// ... resto da implementação
98+
}
99+
100+
async execute(interaction) {
101+
// Implementação
102+
}
103+
}
104+
105+
module.exports = HelpCommand;
106+
```
107+
108+
### 2. Adicionando Eventos
109+
110+
Similar aos comandos, mas na pasta `src/events/`:
111+
112+
```javascript
113+
// src/events/guildMemberAdd.js
114+
class GuildMemberAddEvent {
115+
constructor() {
116+
this.name = 'guildMemberAdd';
117+
this.once = false;
118+
}
119+
120+
async execute(member) {
121+
// Lógica do evento
122+
}
123+
}
124+
125+
module.exports = GuildMemberAddEvent;
126+
```
127+
128+
### 3. Adicionando Utilitários
129+
130+
Funções reutilizáveis em `src/utils/index.js`:
131+
132+
```javascript
133+
/**
134+
* Nova função utilitária
135+
* @param {string} input - Entrada
136+
* @returns {string} Saída processada
137+
*/
138+
function minhaFuncao(input) {
139+
// Implementação
140+
return input.toUpperCase();
141+
}
142+
143+
module.exports = {
144+
// ... outras funções
145+
minhaFuncao
146+
};
147+
```
148+
149+
## 🧪 Padrões de Teste
150+
151+
### 1. Estrutura de Teste
152+
153+
```javascript
154+
describe('NomeDoComponente', () => {
155+
let component;
156+
let mockDependencies;
157+
158+
beforeEach(() => {
159+
// Setup antes de cada teste
160+
mockDependencies = {
161+
// mocks necessários
162+
};
163+
component = new NomeDoComponente(mockDependencies);
164+
});
165+
166+
afterEach(() => {
167+
// Limpeza após cada teste
168+
jest.clearAllMocks();
169+
});
170+
171+
test('should do something specific', () => {
172+
// Arrange (preparar)
173+
const input = 'test input';
174+
175+
// Act (executar)
176+
const result = component.method(input);
177+
178+
// Assert (verificar)
179+
expect(result).toBe('expected output');
180+
});
181+
});
182+
```
183+
184+
### 2. Cobertura de Testes
185+
186+
Mantenha a cobertura acima de 80%:
187+
188+
```bash
189+
npm run test:coverage
190+
```
191+
192+
### 3. Mocking
193+
194+
Use mocks para dependências externas:
195+
196+
```javascript
197+
jest.mock('discord.js');
198+
jest.mock('../utils');
199+
200+
const mockInteraction = {
201+
reply: jest.fn(),
202+
user: { id: '123', username: 'testuser' },
203+
guild: { id: '456', name: 'Test Guild' }
204+
};
205+
```
206+
207+
## 🔍 Code Review
208+
209+
### Checklist para Pull Requests
210+
211+
- [ ] Todos os testes passam
212+
- [ ] Cobertura de testes mantida/aumentada
213+
- [ ] Código segue padrões ESLint
214+
- [ ] Documentação atualizada (se necessário)
215+
- [ ] Commits seguem padrão semântico
216+
- [ ] Funcionalidade testada manualmente
217+
- [ ] Não quebra funcionalidades existentes
218+
219+
### O que revisar
220+
221+
1. **Funcionalidade**: O código faz o que deveria?
222+
2. **Testes**: Há testes adequados?
223+
3. **Performance**: Há problemas de performance?
224+
4. **Segurança**: Há vulnerabilidades?
225+
5. **Padrões**: Segue os padrões do projeto?
226+
227+
## 🐛 Reportando Bugs
228+
229+
Use o template de issue para bugs:
230+
231+
```markdown
232+
**Descrição do Bug**
233+
Descrição clara do problema.
234+
235+
**Para Reproduzir**
236+
1. Execute comando X
237+
2. Faça Y
238+
3. Veja erro Z
239+
240+
**Comportamento Esperado**
241+
O que deveria acontecer.
242+
243+
**Screenshots/Logs**
244+
Se aplicável, adicione prints ou logs.
245+
246+
**Ambiente**
247+
- OS: [Windows/Linux/Mac]
248+
- Node.js: [versão]
249+
- Discord.js: [versão]
250+
```
251+
252+
## 💡 Sugerindo Funcionalidades
253+
254+
Use o template de feature request:
255+
256+
```markdown
257+
**Sua sugestão está relacionada a um problema?**
258+
Descrição clara do problema.
259+
260+
**Descreva a solução que você gostaria**
261+
Descrição clara do que você quer.
262+
263+
**Descreva alternativas consideradas**
264+
Outras soluções que você pensou.
265+
266+
**Contexto adicional**
267+
Qualquer contexto ou screenshot.
268+
```
269+
270+
## 📞 Comunicação
271+
272+
### Canais de Comunicação
273+
274+
- **GitHub Issues**: Para bugs e features
275+
- **GitHub Discussions**: Para perguntas gerais
276+
- **Discord da Dev's Cafe**: Para discussões em tempo real
277+
278+
### Etiqueta
279+
280+
- Seja respeitoso e construtivo
281+
- Use linguagem clara e objetiva
282+
- Forneça contexto suficiente
283+
- Seja paciente com reviews
284+
285+
## 🏆 Reconhecimento
286+
287+
Contribuições significativas serão reconhecidas:
288+
289+
- Adição ao arquivo CONTRIBUTORS.md
290+
- Menção nas release notes
291+
- Badge de contribuidor no Discord
292+
293+
## 📚 Recursos Úteis
294+
295+
- [Discord.js Guide](https://discordjs.guide/)
296+
- [Jest Documentation](https://jestjs.io/docs/)
297+
- [Node.js Best Practices](https://github.com/goldbergyoni/nodebestpractices)
298+
299+
---
300+
301+
**Dúvidas?** Abra uma issue com a tag `question` ou entre no Discord da Dev's Cafe!
302+
303+
Obrigado por contribuir! 🎉

0 commit comments

Comments
 (0)