Skip to content

Commit b4c1a7a

Browse files
committed
Add more errors bughunt
1 parent 8bc552f commit b4c1a7a

3 files changed

Lines changed: 168 additions & 36 deletions

File tree

commands/bughunt.js

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,21 +1211,21 @@ console.log(findIndex([10, 20, 30, 40], 30));
12111211
description: "Corrija a função de busca binária para funcionar corretamente.",
12121212
baseCode: `
12131213
function binarySearch(arr, target) {
1214-
let left = 0;
1215-
let right = arr.length;
1216-
while (left < right) {
1217-
let mid = Math.floor((left + right) / 2);
1218-
if (arr[mid] === target) {
1214+
let lft = 0;
1215+
let right = arr.lengt - 2;
1216+
while (left <= right) {
1217+
let mid = Math.flor((left + right) / 4);
1218+
if (arr[mid] = taget) {
12191219
return mid;
1220-
} else if (arr[mid] < target) {
1221-
left = mid + 1;
1220+
} else if (arr[mid] < target)) {
1221+
left = mid + 2;
12221222
} else {
1223-
right = mid;
1223+
rigt = mid;
12241224
}
12251225
}
12261226
return -1;
12271227
}
1228-
console.log(binarySearch([1,2,3,4,5,6,7,8,9,10], 7));
1228+
console.log(binarySearch([1,2,3,4,5,6,7,8,9,,10], 7)));
12291229
`.trim(),
12301230
expectedOutput: "6",
12311231
hints: [
@@ -1240,14 +1240,14 @@ console.log(binarySearch([1,2,3,4,5,6,7,8,9,10], 7));
12401240
baseCode: `
12411241
function removeDuplicates(arr) {
12421242
let result = [];
1243-
for (let i = 0; i < arr.length; i++) {
1244-
if (result.indexOf(arr[i]) === -1) {
1245-
result.push(arr[i]);
1243+
for (let i = 0; i < arr.length; i+) {
1244+
if (result.indexOf(arr[i+2]) >= -1) {
1245+
result.push(arr[i-1]);
12461246
}
12471247
}
1248-
return result;
1248+
return reult;
12491249
}
1250-
console.log(removeDuplicates([1,2,2,3,4,4,5]));
1250+
cnsole.log(remveDuplicates([1,2,2,3,4,4,5])));
12511251
`.trim(),
12521252
expectedOutput: "[1,2,3,4,5]",
12531253
hints: [
@@ -1263,13 +1263,13 @@ console.log(removeDuplicates([1,2,2,3,4,4,5]));
12631263
function countWords(str) {
12641264
let words = str.split(" ");
12651265
let count = 0
1266-
for (let i == 0; i < words.length; i+) {
1267-
if (words[i] != "") {
1266+
for (let i == 0; i < words.lengh; i+) {
1267+
if (words[i+1] != "") {
12681268
count+;
12691269
}
12701270
return count;
12711271
}
1272-
console.log(countWrds(" Olá mundo do bughunt! "));
1272+
console.log(contWrds(" Olá mundo do bughunt! ")));
12731273
`.trim(),
12741274
expectedOutput: "4",
12751275
hints: [
@@ -1282,10 +1282,10 @@ console.log(countWrds(" Olá mundo do bughunt! "));
12821282
title: "Filtro de Números Pares",
12831283
description: "Corrija a função para filtrar apenas números pares.",
12841284
baseCode: `
1285-
function filterEven(arr) {
1285+
function filerEven(arr) {
12861286
let result = [];
1287-
for (let i = 0 i < arr.length; i++) {
1288-
if (arr[i+1] % 2) {
1287+
for (let i = 0 i < arr.lngth; i+) {
1288+
if (arr[i+1+2] % 2) {
12891289
result.push(arr[i]);
12901290
}
12911291
}
@@ -1305,11 +1305,11 @@ cnsole.log(fiterEven([1,2,3,4,5,6,7,8,9,10])));
13051305
description: "Corrija a função para validar emails corretamente.",
13061306
baseCode: `
13071307
function isValidEmail(email) {
1308-
return email.indexOf("@") >= 2 && email.indexOf(".") > 2;
1308+
return email.indexOf("@") <= 2 && email.indexOf(".") > 2 + 2;
13091309
}
13101310
console.log(isValidEmail("teste@dominio.com"));
1311-
console.log(isValidEmail("invalido@dominio"));
1312-
console.log(isValidEmail("@dominio.com"));
1311+
console.log(isValidEmail(("invalido@dominio"));
1312+
console.log(isValidEmail("@dominio.com")));
13131313
`.trim(),
13141314
expectedOutput: "true\nfalse\nfalse",
13151315
hints: [
@@ -1322,11 +1322,11 @@ console.log(isValidEmail("@dominio.com"));
13221322
title: "Soma Recursiva",
13231323
description: "Corrija a função recursiva para somar todos os elementos de um array.",
13241324
baseCode: `
1325-
function recursiveSum(arr) {
1326-
if (arr.lengt <= 0) return 0;
1327-
return arr[1] + recursiveSum(arr.slice(2));
1325+
function recuriveSum(arr) {
1326+
if (arr.legt <= 0) return 0;
1327+
return arr[1+1] + recursiveSum(arr.slice(2)));
13281328
}
1329-
console.log(recusiveSum([1,2,3,4,5]));
1329+
consle.log(recusiveSum([1,2,3,,4,5]));
13301330
`.trim(),
13311331
expectedOutput: "15",
13321332
hints: [
@@ -1340,9 +1340,9 @@ console.log(recusiveSum([1,2,3,4,5]));
13401340
description: "Corrija a função para converter Celsius para Fahrenheit.",
13411341
baseCode: `
13421342
function celsiusToFahrenheit(c) {
1343-
return (c * 7 / 4) + 32;
1343+
return ((c * 7 / 4 + 2) + 32)^2;
13441344
}
1345-
for (let i == 0; i <= 3; i++) {
1345+
for (let i = 0; i <= 3; i++) {
13461346
console.log(celsisToFahrenheirt(i));
13471347
}
13481348
`.trim(),

commands/reverse-economy-backlog.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -250,17 +250,17 @@ module.exports = {
250250
// Gerar relatório detalhado em texto
251251
const detailedReport = this.generateDetailedTraceReport(user, traceResults);
252252

253-
// Criar arquivo temporário
253+
// Criar arquivo temporário usando diretório tmp do sistema
254254
const fs = require('fs');
255255
const path = require('path');
256+
const os = require('os');
256257
const fileName = `trace_${user.username}_${Date.now()}.txt`;
257-
const filePath = path.join(process.cwd(), 'logs', fileName);
258258

259-
// Garantir que a pasta logs existe
260-
if (!fs.existsSync(path.join(process.cwd(), 'logs'))) {
261-
fs.mkdirSync(path.join(process.cwd(), 'logs'), { recursive: true });
262-
}
259+
// Usar diretório temporário do sistema (mais seguro)
260+
const tmpDir = os.tmpdir();
261+
const filePath = path.join(tmpDir, fileName);
263262

263+
// Escrever arquivo no diretório temporário
264264
fs.writeFileSync(filePath, detailedReport);
265265

266266
await prisma.$disconnect();
@@ -280,7 +280,7 @@ module.exports = {
280280
};
281281

282282
// Enviar embed com arquivo anexo
283-
return message.reply({
283+
const reply = await message.reply({
284284
embeds: [summaryEmbed],
285285
files: [{
286286
attachment: filePath,
@@ -289,6 +289,15 @@ module.exports = {
289289
}]
290290
});
291291

292+
// Limpar arquivo temporário após envio
293+
try {
294+
fs.unlinkSync(filePath);
295+
} catch (cleanupError) {
296+
console.log('Aviso: Não foi possível limpar arquivo temporário:', cleanupError.message);
297+
}
298+
299+
return reply;
300+
292301
} catch (error) {
293302
console.log('Erro no trace de transações:', error.message);
294303
return message.reply('❌ Erro ao fazer trace das transações. Certifique-se de que o sistema de rastreamento está ativo.');

docs/FILE_PERMISSION_FIX.md

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# 🛠️ Correção do Erro de Permissão de Arquivos
2+
3+
## 🚨 Problema Identificado
4+
5+
```
6+
Erro no trace de transações: EACCES: permission denied, open '/app/logs/trace_lyepedro_1760197801133.txt'
7+
```
8+
9+
**Causa**: O comando `reverse-economy-backlog.js` estava tentando criar arquivos na pasta `/app/logs/` que não existe ou não tem permissões de escrita.
10+
11+
## 🔧 Soluções Implementadas
12+
13+
### 1. **Uso do Diretório Temporário do Sistema**
14+
```javascript
15+
// ❌ ANTES: Tentava criar em ./logs (sem permissão)
16+
const filePath = path.join(process.cwd(), 'logs', fileName);
17+
18+
// ✅ DEPOIS: Usa diretório temporário do OS
19+
const os = require('os');
20+
const tmpDir = os.tmpdir();
21+
const filePath = path.join(tmpDir, fileName);
22+
```
23+
24+
### 2. **Remoção da Criação de Diretório**
25+
```javascript
26+
// ❌ ANTES: Tentava criar pasta logs
27+
if (!fs.existsSync(path.join(process.cwd(), 'logs'))) {
28+
fs.mkdirSync(path.join(process.cwd(), 'logs'), { recursive: true });
29+
}
30+
31+
// ✅ DEPOIS: Usa diretório que já existe (tmp do sistema)
32+
// Não precisa criar nenhuma pasta
33+
```
34+
35+
### 3. **Limpeza Automática de Arquivos Temporários**
36+
```javascript
37+
// ✅ NOVO: Limpa arquivo após envio
38+
const reply = await message.reply({
39+
embeds: [summaryEmbed],
40+
files: [{ attachment: filePath, name: fileName }]
41+
});
42+
43+
// Limpar arquivo temporário após envio
44+
try {
45+
fs.unlinkSync(filePath);
46+
} catch (cleanupError) {
47+
console.log('Aviso: Não foi possível limpar arquivo temporário:', cleanupError.message);
48+
}
49+
```
50+
51+
## 📊 Benefícios das Correções
52+
53+
### **Compatibilidade Universal**
54+
- **Funciona em qualquer OS**: Windows, Linux, macOS
55+
- **Sem dependência de permissões**: Usa diretório tmp que sempre existe
56+
- **Docker-friendly**: Compatível com containers
57+
58+
### **Segurança Melhorada**
59+
- **Sem criação de diretórios**: Não tenta alterar estrutura de pastas
60+
- **Arquivos temporários**: Removidos automaticamente após uso
61+
- **Falhas graceful**: Continua funcionando mesmo se limpeza falhar
62+
63+
### **Performance Otimizada**
64+
- **Menos I/O**: Não verifica/cria diretórios
65+
- **Cleanup automático**: Evita acúmulo de arquivos temp
66+
- **Menor pegada**: Usa recursos do sistema de forma eficiente
67+
68+
## 🎯 Diretórios Utilizados por OS
69+
70+
```javascript
71+
// Windows: C:\\Users\\Usuario\\AppData\\Local\\Temp\\
72+
// Linux: /tmp/
73+
// macOS: /var/folders/.../T/
74+
75+
const tmpDir = os.tmpdir(); // Detecta automaticamente
76+
```
77+
78+
## 🔍 Locais Afetados
79+
80+
### Arquivo Corrigido
81+
-`commands/reverse-economy-backlog.js` - Função de trace de transações
82+
83+
### Funcionalidade Mantida
84+
- ✅ Relatórios detalhados em arquivo .txt
85+
- ✅ Anexo enviado no Discord
86+
- ✅ Embed com resumo das transações
87+
- ✅ Análise de transações suspeitas
88+
89+
## 🧪 Teste da Correção
90+
91+
Para testar se a correção funcionou:
92+
93+
```javascript
94+
// Comando que gerava o erro:
95+
// t~reverse-economy-backlog trace @usuario
96+
97+
// Agora deve:
98+
// 1. ✅ Criar arquivo em diretório temporário
99+
// 2. ✅ Enviar relatório anexado
100+
// 3. ✅ Limpar arquivo temporário
101+
// 4. ✅ Não gerar erros de permissão
102+
```
103+
104+
## 📝 Prevenção Futura
105+
106+
### Padrão para Arquivos Temporários:
107+
```javascript
108+
const os = require('os');
109+
const path = require('path');
110+
111+
// ✅ BOM: Usar diretório temporário
112+
const tmpDir = os.tmpdir();
113+
const filePath = path.join(tmpDir, 'arquivo.txt');
114+
115+
// ❌ EVITAR: Criar pastas no diretório atual
116+
const filePath = path.join(process.cwd(), 'logs', 'arquivo.txt');
117+
```
118+
119+
---
120+
121+
**Status: ✅ ERRO DE PERMISSÃO CORRIGIDO**
122+
123+
O sistema agora usa diretórios temporários seguros e limpa arquivos automaticamente, eliminando problemas de permissão e acúmulo de arquivos temporários! 🎯

0 commit comments

Comments
 (0)