Skip to content

Commit 7b79888

Browse files
committed
Help system, backtacelog economy, encrypt minigame, achievements etc.
1 parent 607a2b8 commit 7b79888

36 files changed

Lines changed: 6309 additions & 60 deletions

commands/achievements.js

Lines changed: 891 additions & 0 deletions
Large diffs are not rendered by default.

commands/avatar.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,46 @@ module.exports = {
99
// Se mencionou alguém, mostrar avatar dessa pessoa
1010
const user = message.mentions.users.first() || message.author;
1111

12+
// Verificar conquistas criativas (apenas para quem executou o comando)
13+
if (user.id === message.author.id) {
14+
try {
15+
const achievementsModule = require('./achievements');
16+
const { PrismaClient } = require('@prisma/client');
17+
const prisma = new PrismaClient();
18+
19+
const userData = await achievementsModule.getUserCompleteData(message.author.id, message.guild.id, prisma);
20+
const unlockedAchievements = await achievementsModule.checkAchievements(userData);
21+
22+
// Verificar conquistas criativas
23+
const creativeAchievements = unlockedAchievements.filter(a =>
24+
a.id === 'creative'
25+
);
26+
27+
if (creativeAchievements.length > 0) {
28+
setTimeout(async () => {
29+
try {
30+
await message.channel.send({
31+
embeds: [{
32+
title: '🏆 Conquista Desbloqueada!',
33+
description: `**${message.author.username}** desbloqueou: ${creativeAchievements[0].emoji} **${creativeAchievements[0].name}**`,
34+
color: 0xffd700,
35+
footer: { text: 'Use l~achievements para ver todas suas conquistas!' }
36+
}]
37+
});
38+
39+
await achievementsModule.giveRewards(message.author.id, message.guild.id, creativeAchievements, prisma);
40+
} catch (error) {
41+
console.log('Erro notificando conquista criativa:', error.message);
42+
}
43+
}, 1000);
44+
}
45+
46+
await prisma.$disconnect();
47+
} catch (error) {
48+
console.log('Erro verificando conquistas criativas:', error.message);
49+
}
50+
}
51+
1252
return message.reply({
1353
embeds: [{
1454
title: `🖼️ Avatar de ${user.username}`,

commands/bughunt.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,40 @@ module.exports = {
614614

615615
if (result.success) {
616616
xpAmount += 50; // Bônus por sucesso do grupo
617+
618+
// Verificar conquistas para participantes quando há sucesso
619+
try {
620+
const achievementsModule = require('./achievements');
621+
const userData = await achievementsModule.getUserCompleteData(participant.userId, message.guild.id, prisma);
622+
const unlockedAchievements = await achievementsModule.checkAchievements(userData);
623+
624+
// Verificar conquistas de Bug Hunt
625+
const bugHuntAchievements = unlockedAchievements.filter(a =>
626+
['bug_hunter', 'bug_master', 'game_god'].includes(a.id)
627+
);
628+
629+
if (bugHuntAchievements.length > 0) {
630+
setTimeout(async () => {
631+
try {
632+
const user = await message.client.users.fetch(participant.userId);
633+
await message.channel.send({
634+
embeds: [{
635+
title: '🏆 Conquista Desbloqueada!',
636+
description: `**${user.username}** desbloqueou: ${bugHuntAchievements[0].emoji} **${bugHuntAchievements[0].name}**`,
637+
color: 0xffd700,
638+
footer: { text: 'Use l~achievements para ver todas suas conquistas!' }
639+
}]
640+
});
641+
642+
await achievementsModule.giveRewards(participant.userId, message.guild.id, bugHuntAchievements, prisma);
643+
} catch (error) {
644+
console.log('Erro notificando conquista de Bug Hunt:', error.message);
645+
}
646+
}, 3000 + Math.random() * 2000); // Evitar spam de notificações
647+
}
648+
} catch (error) {
649+
console.log('Erro verificando conquistas de Bug Hunt:', error.message);
650+
}
617651
}
618652

619653
// Bônus por número de contribuições

commands/codegolf.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,40 @@ module.exports = {
346346
if (!tie) {
347347
await this.updatePlayerStats(winnerId, duel.guildId, true, prisma);
348348
await this.updatePlayerStats(loserId, duel.guildId, false, prisma);
349+
350+
// Verificar conquistas do vencedor
351+
try {
352+
const achievementsModule = require('./achievements');
353+
const userData = await achievementsModule.getUserCompleteData(winnerId, duel.guildId, prisma);
354+
const unlockedAchievements = await achievementsModule.checkAchievements(userData);
355+
356+
// Verificar conquistas de Code Golf
357+
const golfAchievements = unlockedAchievements.filter(a =>
358+
['golfer', 'golf_master', 'game_god'].includes(a.id)
359+
);
360+
361+
if (golfAchievements.length > 0) {
362+
setTimeout(async () => {
363+
try {
364+
const winner = await message.client.users.fetch(winnerId);
365+
await message.channel.send({
366+
embeds: [{
367+
title: '🏆 Conquista Desbloqueada!',
368+
description: `**${winner.username}** desbloqueou: ${golfAchievements[0].emoji} **${golfAchievements[0].name}**`,
369+
color: 0xffd700,
370+
footer: { text: 'Use l~achievements para ver todas suas conquistas!' }
371+
}]
372+
});
373+
374+
await achievementsModule.giveRewards(winnerId, duel.guildId, golfAchievements, prisma);
375+
} catch (error) {
376+
console.log('Erro notificando conquista de Code Golf:', error.message);
377+
}
378+
}, 2000);
379+
}
380+
} catch (error) {
381+
console.log('Erro verificando conquistas de Code Golf:', error.message);
382+
}
349383
}
350384

351385
await prisma.$disconnect();

commands/daily.js

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ module.exports = {
5454

5555
// Dar moedas diárias
5656
const dailyCoins = 100;
57+
const balanceBefore = economy.coins;
58+
5759
economy = await prisma.economy.update({
5860
where: {
5961
userId_guildId: {
@@ -67,18 +69,59 @@ module.exports = {
6769
}
6870
});
6971

72+
// Registrar transação para rastreamento
73+
try {
74+
const transactionId = `TXN-${Date.now().toString(36).toUpperCase()}`;
75+
await prisma.economyTransaction.create({
76+
data: {
77+
userId: message.author.id,
78+
guildId: message.guild.id,
79+
transactionId: transactionId,
80+
type: 'daily',
81+
amount: dailyCoins,
82+
balanceBefore: balanceBefore,
83+
balanceAfter: economy.coins,
84+
metadata: JSON.stringify({ command: 'daily', source: 'system' })
85+
}
86+
});
87+
} catch (transactionError) {
88+
// Não quebrar o comando principal se houver erro no log
89+
console.log('Erro ao registrar transação daily:', transactionError.message);
90+
}
91+
7092
await prisma.$disconnect();
7193

94+
// Verificar se desbloqueou conquistas
95+
let achievementNotification = '';
96+
try {
97+
const achievementsModule = require('./achievements');
98+
const userData = await achievementsModule.getUserCompleteData(message.author.id, message.guild.id, prisma);
99+
const unlockedAchievements = await achievementsModule.checkAchievements(userData);
100+
101+
// Verificar conquistas relacionadas a coins e daily streaks
102+
const allAchievements = unlockedAchievements.filter(a =>
103+
['first_coins', 'coin_collector', 'millionaire', 'dedicated', 'persistent', 'daily_addict'].includes(a.id)
104+
);
105+
106+
if (allAchievements.length > 0) {
107+
achievementNotification = `\n\n🏆 **Conquista desbloqueada!** ${allAchievements[0].emoji} ${allAchievements[0].name}`;
108+
await achievementsModule.giveRewards(message.author.id, message.guild.id, allAchievements, prisma);
109+
}
110+
} catch (error) {
111+
// Ignorar erros de conquistas para não quebrar o comando principal
112+
console.log('Erro verificando conquistas do daily:', error.message);
113+
}
114+
72115
return message.reply({
73116
embeds: [{
74117
title: '🎁 Daily Coletado!',
75-
description: `Você recebeu **${dailyCoins}** moedas!`,
118+
description: `Você recebeu **${dailyCoins}** moedas!${achievementNotification}`,
76119
fields: [
77120
{ name: '💰 Saldo Atual', value: `${economy.coins} moedas`, inline: true },
78121
{ name: '🎯 Próximo Daily', value: 'Em 24 horas', inline: true }
79122
],
80123
color: 0x00ff00,
81-
footer: { text: 'Volte amanhã para mais moedas!' }
124+
footer: { text: 'Volte amanhã para mais moedas! • Use l~achievements para ver suas conquistas' }
82125
}]
83126
});
84127

0 commit comments

Comments
 (0)