Um bot Discord simples e eficiente para monitorar usuários em canais de voz, registrando atividades em um arquivo JSON para sistemas de recompensas baseados em tempo de atividade.
O Next Bot foi desenvolvido para atender à necessidade de um servidor Discord de monitorar quem está ativo nos canais de voz para distribuir recompensas baseadas no tempo conectado. O bot:
- 📊 Monitora usuários em canais de voz em tempo real
- 💾 Salva informações em arquivo JSON (
status/voice-status.json) - ⏱️ Calcula tempo de conexão automaticamente
- 🎯 Permite monitoramento de canais específicos ou todos os canais
- 🔄 Sincronização automática quando o bot inicia
- Detecção automática quando usuários entram/saem de canais
- Tracking de tempo preciso de conexão
- Exclusão de bots do monitoramento
- Suporte a múltiplos servidores
- Salva dados automaticamente em
status/voice-status.json - Estrutura organizada com informações detalhadas
- Backup e recuperação de dados automática
- Timestamps em formato brasileiro (pt-BR)
- Monitora todos os canais por padrão
- Opção de monitorar canais específicos via
.env - Sincronização manual disponível
- Sistema de logs detalhado
all- Lista todos os usuários conectadoschannel- Usuários de um canal específicouser- Status de um usuário específicoconfig- Mostra configuração atualcanais- Lista canais de voz do servidorsincronizar- Força sincronização com Discord
- Mostra estatísticas do arquivo JSON
- Tamanho, última modificação e preview dos dados
- Estatísticas gerais do bot
- Uso de memória e uptime
- Latência e servidores conectados
- Verifica latência do bot e API do Discord
servidor- IP do servidor FiveMconectar- Guia de conexãostatus- Status do servidorcomandos- Lista comandos FiveMsolucoes- Soluções de problemas
# Node.js 16+ instalado
node --version
# Git instalado
git --versiongit clone https://github.com/melloxyz/next-bot.git
cd next-botnpm installCrie o arquivo .env com base no .env.example:
# Token do seu bot Discord
DISCORD_TOKEN=seu_token_aqui
# ID da aplicação Discord
CLIENT_ID=id_do_cliente
# ID do servidor (opcional - para comandos locais)
GUILD_ID=id_do_servidor
# Canais específicos para monitorar (opcional)
# Deixe vazio para monitorar todos os canais
VOICE_CHANNELS_TO_MONITOR=123456789,987654321node deploy-commands.jsnode index.jsnext-bot/
├── 📁 commands/ # Comandos slash do Discord
│ ├── botinfo.js # Informações do bot
│ ├── connect.js # Comandos FiveM
│ ├── json-info.js # Info do arquivo JSON
│ ├── ping.js # Teste de latência
│ └── voice-status.js # Gerenciamento de voz
├── 📁 events/ # Eventos do Discord
│ ├── ready.js # Bot pronto
│ └── voiceStateUpdate.js # Mudanças de voz
├── 📁 status/ # Arquivos de status
│ └── voice-status.json # Dados dos usuários (gerado automaticamente)
├── 📁 utils/ # Utilitários
│ ├── errorHandler.js # Tratamento de erros
│ └── voiceTracker.js # Sistema de tracking
├── deploy-commands.js # Deploy de comandos
├── index.js # Arquivo principal
├── package.json # Dependências
└── .env.example # Exemplo de configuração
A classe VoiceTracker é o coração do sistema:
class VoiceTracker {
constructor() {
this.userSessions = new Map(); // Armazena sessões ativas
this.jsonFilePath = path.join(__dirname, '..', 'status', 'voice-status.json');
this.loadFromFile(); // Carrega dados existentes
}
// Principais métodos:
joinChannel(userId, channelId, username, channelName) // Usuário entra
leaveChannel(userId) // Usuário sai
switchChannel(userId, newChannelId, username, newChannelName) // Muda canal
saveToFile() // Salva no JSON
getConnectedUsers() // Lista conectados
}O bot escuta mudanças nos canais de voz:
execute(oldState, newState) {
// Ignora bots
if (newState.member.user.bot) return;
// Verifica se deve monitorar o canal
const targetChannels = process.env.VOICE_CHANNELS_TO_MONITOR;
// Usuário entrou em canal
if (!oldState.channel && newState.channel) {
voiceTracker.joinChannel(userId, channelId, username, channelName);
}
// Usuário saiu do canal
if (oldState.channel && !newState.channel) {
voiceTracker.leaveChannel(userId);
}
// Usuário mudou de canal
if (oldState.channel && newState.channel && oldState.channel.id !== newState.channel.id) {
voiceTracker.switchChannel(userId, newChannelId, username, newChannelName);
}
}O arquivo voice-status.json segue esta estrutura:
{
"lastUpdated": "14/09/2025 15:30:45",
"totalConnected": 3,
"connectedUsers": [
{
"userId": "123456789012345678",
"username": "Usuario1",
"channelId": "987654321098765432",
"channelName": "Canal Geral"
},
{
"userId": "234567890123456789",
"username": "Usuario2",
"channelId": "876543210987654321",
"channelName": "Canal Gaming"
}
]
}Os comandos usam Discord.js v14 com Slash Commands:
// Exemplo de comando
module.exports = {
data: new SlashCommandBuilder()
.setName('voice-status')
.setDescription('Gerencia monitoramento de voz')
.addSubcommand(subcommand =>
subcommand
.setName('all')
.setDescription('Lista todos os usuários')
),
async execute(interaction) {
const connectedUsers = voiceTracker.getConnectedUsers();
// Gera embed com informações...
await interaction.reply({ embeds: [embed] });
}
}- Distribute recompensas baseadas em tempo de atividade
- Verifique usuários mais ativos em determinados períodos
- Implemente rankings por tempo conectado
- Monitore picos de atividade nos canais
- Identifique canais mais populares
- Colete dados para relatórios administrativos
- Verifique participação em eventos
- Monitore atividade durante transmissões
- Organize atividades baseadas em presença
# Monitora apenas canais específicos
VOICE_CHANNELS_TO_MONITOR=123456789,987654321,456789123# Deixe vazio ou comente a linha para monitorar todos
# VOICE_CHANNELS_TO_MONITOR=- Verifique se o token está correto
- Confirme se o bot tem permissões necessárias
- Execute
node deploy-commands.jsnovamente
- Verifique permissões de escrita na pasta
status/ - Use
/voice-status sincronizarpara forçar atualização - Verifique logs no console
- Execute
node deploy-commands.js - Aguarde até 1 hora para comandos globais
- Use
GUILD_IDpara comandos instantâneos no servidor
- Faça fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para detalhes.
Desenvolvido por melloxyz para atender às necessidades de monitoramento de atividade em servidores Discord.
💡 Dica: Use /voice-status config para verificar sua configuração atual e /botinfo para estatísticas gerais do bot!