npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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

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


📦 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

  1. Clone o repositório
git clone https://github.com/nathan-lucca/botgate-bot.git
cd botgate-bot
  1. Instale as dependências
npm install
  1. 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.

  1. 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 dev

Ou para iniciar normalmente:

npm start

Modo Sharding (Produção)

Para iniciar o bot com sharding (recomendado para produção):

npm run shard

Com auto-reload:

npm run shard:dev

Registrar Comandos Manualmente

Se precisar registrar os comandos slash manualmente:

node register-commands.js

Ou 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.js gerencia 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:

  1. Faça um fork do repositório
  2. Crie uma branch para sua feature (git checkout -b feature/MinhaFeature)
  3. Commit suas mudanças (git commit -m 'Adiciona MinhaFeature')
  4. Push para a branch (git push origin feature/MinhaFeature)
  5. 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:


🙏 Agradecimentos

Agradecimentos especiais a todos os contribuidores e à comunidade Discord.js por tornar este projeto possível.