discord-botlist-bot
v1.0.1
Published
Bot Discord para gerenciamento de botlist com comando /setup
Readme
🤖 BotGate - Discord Bot
Bot Discord oficial da plataforma BotGate, uma botlist moderna e completa para gerenciamento de bots Discord. Este bot oferece funcionalidades avançadas de submissão, votação, moderação e integração com a API da plataforma.
📋 Índice
- Sobre
- Funcionalidades
- Tecnologias
- Pré-requisitos
- Instalação
- Configuração
- Uso
- Estrutura do Projeto
- Comandos Disponíveis
- Sharding
- Contribuindo
- Licença
🎯 Sobre
O BotGate Bot é o coração da plataforma BotGate, responsável por gerenciar todo o fluxo de submissão, aprovação, votação e moderação de bots Discord. Desenvolvido com Discord.js v14 e arquitetura escalável com suporte a sharding, o bot é capaz de atender milhares de servidores simultaneamente.
Destaques
- ✅ Sistema completo de submissão e aprovação de bots
- 🗳️ Sistema de votação com cooldown e lembretes
- 🛡️ Ferramentas de moderação (ban, kick, clear)
- 📊 Estatísticas detalhadas e rankings
- 🔔 Sistema de notificações e logs personalizáveis
- 🎨 Interface rica com embeds e componentes interativos
- 🚀 Suporte a sharding para escalabilidade
- 📦 Integração com a API BotGate
✨ Funcionalidades
Para Usuários
/enviarbot- Submeta seu bot para a plataforma/editarbot- Edite informações do seu bot aprovado/editarsubmissao- Edite uma submissão pendente/meusbot- Visualize todos os seus bots/votar- Vote em bots da plataforma/botinfo- Veja informações detalhadas de um bot/ranking- Confira o ranking de bots mais votados/ajuda- Menu de ajuda interativo
Para Staff
/submissao- Visualize submissões pendentes/aprovar- Aprove bots submetidos/rejeitar- Rejeite bots com feedback/fila- Veja a fila de aprovação/logs- Configure logs de eventos/ban- Bana usuários da plataforma/kick- Remove usuários temporariamente/clear- Limpa mensagens em massa
Sistema de Logs
O bot oferece logs detalhados para diversos eventos:
- 📝 Submissões de bots
- ✅ Aprovações e rejeições
- 🗳️ Votos recebidos
- ✏️ Edições de bots
- 🚫 Ações de moderação
- 👥 Entrada/saída de membros
- 📊 Estatísticas de uso
🛠️ Tecnologias
- Node.js (v18+)
- Discord.js v14.25.1
- MySQL v8.0+
- dotenv - Gerenciamento de variáveis de ambiente
- @botgate/botgate-stats-reporter - Biblioteca para reportar estatísticas
📦 Pré-requisitos
Antes de começar, certifique-se de ter instalado:
- Node.js 18.0.0 ou superior
- MySQL 8.0 ou superior
- Git (para clonar o repositório)
- Uma aplicação Discord criada no Discord Developer Portal
🚀 Instalação
- Clone o repositório
git clone https://github.com/nathan-lucca/botgate-bot.git
cd botgate-bot- Instale as dependências
npm install- Configure o banco de dados
Execute os scripts SQL necessários para criar as tabelas. Consulte a documentação do backend em backend/README.md para mais detalhes sobre a estrutura do banco de dados.
- Configure as variáveis de ambiente
Crie um arquivo .env na raiz do projeto (veja a seção Configuração).
⚙️ Configuração
Crie um arquivo .env na raiz do projeto com as seguintes variáveis:
# Discord
DISCORD_TOKEN=seu_token_do_bot
DISCORD_CLIENT_ID=id_da_aplicacao
DISCORD_GUILD_ID=id_do_servidor_principal (opcional)
# Banco de Dados
DB_HOST=localhost
DB_PORT=3306
DB_USER=seu_usuario
DB_PASSWORD=sua_senha
DB_NAME=botgate
# Opcional
BOT_PREFIX=!Variáveis Obrigatórias
| Variável | Descrição |
| ------------------- | ----------------------------------------------- |
| DISCORD_TOKEN | Token do bot obtido no Discord Developer Portal |
| DISCORD_CLIENT_ID | ID da aplicação Discord |
| DB_USER | Usuário do banco de dados MySQL |
| DB_PASSWORD | Senha do banco de dados MySQL |
| DB_NAME | Nome do banco de dados |
Variáveis Opcionais
| Variável | Descrição | Padrão |
| ------------------ | ----------------------------------------------------------------------- | ----------- |
| DISCORD_GUILD_ID | ID do servidor para registrar comandos (se vazio, registra globalmente) | - |
| DB_HOST | Host do banco de dados | localhost |
| DB_PORT | Porta do banco de dados | 3306 |
| BOT_PREFIX | Prefixo para comandos de texto (legado) | ! |
🎮 Uso
Modo Normal (Desenvolvimento)
Para iniciar o bot em modo de desenvolvimento com auto-reload:
npm run devOu para iniciar normalmente:
npm startModo Sharding (Produção)
Para iniciar o bot com sharding (recomendado para produção):
npm run shardCom auto-reload:
npm run shard:devRegistrar Comandos Manualmente
Se precisar registrar os comandos slash manualmente:
node register-commands.jsOu para registrar um por um (útil para debug):
node register-one-by-one.js📁 Estrutura do Projeto
botgate-bot/
├── src/ # Código-fonte principal do bot
│ ├── commands/ # Comandos slash do Discord
│ │ ├── public/ # Comandos públicos
│ │ │ ├── ajuda.js # Menu de ajuda
│ │ │ ├── botinfo.js # Informações de bots
│ │ │ ├── editarBot.js # Editar bot aprovado
│ │ │ ├── editarSubmissao.js # Editar submissão
│ │ │ ├── enviarBot.js # Submeter novo bot
│ │ │ ├── meusBots.js # Listar bots do usuário
│ │ │ ├── ranking.js # Ranking de bots
│ │ │ └── votar.js # Sistema de votação
│ │ ├── staff/ # Comandos de moderação
│ │ │ ├── aprovar.js # Aprovar submissões
│ │ │ ├── ban.js # Banir usuários
│ │ │ ├── clear.js # Limpar mensagens
│ │ │ ├── fila.js # Fila de aprovação
│ │ │ ├── kick.js # Expulsar usuários
│ │ │ ├── logs.js # Configurar logs
│ │ │ ├── rejeitar.js # Rejeitar submissões
│ │ │ └── submissao.js # Ver submissões
│ │ ├── statistics/ # Comandos de estatísticas
│ │ └── system/ # Comandos de sistema
│ ├── config/ # Configurações
│ │ └── env.js # Gerenciamento de variáveis de ambiente
│ ├── database/ # Conexão com banco de dados
│ │ └── pool.js # Pool de conexões MySQL
│ ├── events/ # Event handlers do Discord.js
│ │ ├── logs/ # Eventos de log
│ │ ├── error.js # Tratamento de erros
│ │ ├── guildCreate.js # Bot entra em servidor
│ │ ├── guildDelete.js # Bot sai de servidor
│ │ ├── guildMemberAdd.js # Membro entra no servidor
│ │ ├── guildMemberRemove.js # Membro sai do servidor
│ │ ├── interactionCreate.js # Interações (comandos, botões, etc)
│ │ ├── ready.js # Bot fica online
│ │ ├── shardDisconnect.js # Shard desconecta
│ │ ├── shardError.js # Erro em shard
│ │ ├── shardReady.js # Shard fica pronto
│ │ ├── shardReconnecting.js # Shard reconectando
│ │ ├── shardResume.js # Shard retoma conexão
│ │ └── warn.js # Avisos do Discord
│ ├── handlers/ # Gerenciadores de recursos
│ │ ├── commandHandler.js # Carrega e registra comandos
│ │ ├── eventHandler.js # Carrega eventos
│ │ └── statsReporter.js # Reporta estatísticas para API
│ ├── repositories/ # Camada de acesso a dados
│ │ ├── auditRepository.js # Logs de auditoria
│ │ ├── botEditCooldownRepository.js # Cooldown de edições
│ │ ├── botRepository.js # Operações de bots
│ │ ├── configRepository.js # Configurações de servidor
│ │ ├── logSettingsRepository.js # Configurações de logs
│ │ ├── submissionRepository.js # Submissões de bots
│ │ ├── userRepository.js # Dados de usuários
│ │ └── voteRepository.js # Sistema de votação
│ ├── services/ # Lógica de negócio
│ │ ├── configService.js # Serviço de configuração
│ │ ├── editBotService.js # Serviço de edição de bots
│ │ ├── logService.js # Serviço de logs
│ │ ├── moderationService.js # Serviço de moderação
│ │ ├── reviewService.js # Serviço de avaliações
│ │ ├── setupService.js # Serviço de setup inicial
│ │ └── submissionService.js # Serviço de submissões
│ ├── ui/ # Componentes de interface
│ │ ├── botInfoEmbeds.js # Embeds de informações de bot
│ │ ├── components.js # Componentes reutilizáveis
│ │ ├── configEmbeds.js # Embeds de configuração
│ │ ├── configMenus.js # Menus de configuração
│ │ ├── editBotEmbeds.js # Embeds de edição
│ │ ├── editBotModals.js # Modais de edição
│ │ ├── embeds.js # Embeds gerais
│ │ ├── helpEmbeds.js # Embeds de ajuda
│ │ ├── helpMenus.js # Menus de ajuda
│ │ ├── logConfigEmbeds.js # Embeds de config de logs
│ │ ├── logConfigMenus.js # Menus de config de logs
│ │ ├── logEmbeds.js # Embeds de logs
│ │ ├── roleConfigEmbeds.js # Embeds de config de cargos
│ │ ├── roleConfigMenus.js # Menus de config de cargos
│ │ ├── setupComponents.js # Componentes de setup
│ │ ├── setupEmbeds.js # Embeds de setup
│ │ ├── voteComponents.js # Componentes de votação
│ │ ├── voteEmbeds.js # Embeds de votação
│ │ └── voteLogEmbeds.js # Embeds de logs de voto
│ ├── utils/ # Utilitários
│ │ ├── botInfoHelper.js # Helpers de info de bot
│ │ ├── cooldownManager.js # Gerenciador de cooldowns
│ │ ├── dateUtils.js # Utilitários de data
│ │ ├── discordHelpers.js # Helpers do Discord
│ │ ├── editBotHelper.js # Helpers de edição
│ │ ├── logger.js # Sistema de logs
│ │ ├── pagination.js # Sistema de paginação
│ │ ├── shardUtils.js # Utilitários de sharding
│ │ ├── validators.js # Validadores
│ │ └── voteCooldownManager.js # Cooldown de votos
│ └── index.js # Ponto de entrada principal
├── backend/ # API Backend (ver backend/README.md)
├── images/ # Imagens e assets
├── .env # Variáveis de ambiente (não versionado)
├── .gitignore # Arquivos ignorados pelo Git
├── package.json # Dependências e scripts
├── register-commands.js # Script de registro de comandos
├── register-one-by-one.js # Script de registro individual
└── shard.js # Gerenciador de shards🎯 Comandos Disponíveis
Comandos Públicos
| Comando | Descrição | Uso |
| ------------------ | --------------------------------------- | ------------------- |
| /ajuda | Exibe o menu de ajuda interativo | /ajuda |
| /botinfo | Mostra informações detalhadas de um bot | /botinfo [bot_id] |
| /editarbot | Edita informações de um bot aprovado | /editarbot |
| /editarsubmissao | Edita uma submissão pendente | /editarsubmissao |
| /enviarbot | Submete um novo bot para aprovação | /enviarbot |
| /meusbots | Lista todos os seus bots | /meusbots |
| /ranking | Exibe o ranking de bots mais votados | /ranking |
| /votar | Vote em um bot da plataforma | /votar [bot_id] |
Comandos de Staff
| Comando | Descrição | Permissão Necessária |
| ------------ | ----------------------------------- | -------------------- |
| /aprovar | Aprova uma submissão de bot | Moderador |
| /ban | Bane um usuário da plataforma | Administrador |
| /clear | Limpa mensagens em massa | Moderador |
| /fila | Visualiza a fila de aprovação | Moderador |
| /kick | Expulsa um usuário temporariamente | Moderador |
| /logs | Configura os logs do servidor | Administrador |
| /rejeitar | Rejeita uma submissão com feedback | Moderador |
| /submissao | Visualiza detalhes de uma submissão | Moderador |
🚀 Sharding
O bot suporta sharding para escalabilidade horizontal. Sharding permite que o bot distribua a carga entre múltiplos processos, cada um gerenciando um conjunto de servidores.
Como Funciona
- O arquivo
shard.jsgerencia múltiplos processos (shards) - Cada shard executa uma instância do bot (
src/index.js) - O Discord.js calcula automaticamente o número ideal de shards
- Shards podem ser reiniciados individualmente em caso de falha
Configuração
No arquivo shard.js, você pode ajustar:
const manager = new ShardingManager(join(__dirname, "src", "index.js"), {
token: process.env.DISCORD_TOKEN,
totalShards: "auto", // 'auto' ou número específico (ex: 2, 3, 4)
respawn: true, // Reinicia shards que crasharem
mode: "process", // 'process' ou 'worker'
});Monitoramento
O shard manager exibe estatísticas detalhadas a cada 30 minutos:
- Número de servidores por shard
- Número de usuários por shard
- Uso de memória RAM
- Latência (ping)
- Tempo de atividade (uptime)
🤝 Contribuindo
Contribuições são bem-vindas! Se você deseja contribuir com o projeto:
- Faça um fork do repositório
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Diretrizes
- Siga o padrão de código existente
- Adicione comentários em código complexo
- Teste suas mudanças antes de submeter
- Atualize a documentação se necessário
📄 Licença
Este projeto é licenciado sob a licença ISC.
📞 Suporte
Para suporte, dúvidas ou sugestões:
- 🌐 Website: BotGate
- 📧 Email: [email protected]
- 💬 Discord: Servidor de Suporte
🙏 Agradecimentos
Agradecimentos especiais a todos os contribuidores e à comunidade Discord.js por tornar este projeto possível.
