Bot do Discord para gerenciamento remoto de servidores e serviços de infraestrutura através de comandos simples e intuitivos.
O PowerBot é uma ferramenta de automação desenvolvida em Python que permite à equipe de DevOps ligar e desligar servidores diretamente pelo Discord. Com um menu interativo, é possível ligar e desligar servidores de homologação e produção sem a necessidade de acessar painéis de controle ou servidores individualmente.
!ping: Verifica se o bot está online e respondendo!menu: Exibe o menu interativo com todas as opções de gerenciamento
O bot permite controlar servidores e serviços de infraestrutura através de requisições HTTP. Você pode configurar quantas ações desejar no arquivo menu.json, incluindo:
- Ligar/Desligar servidores em ambientes de homologação
- Ligar/Desligar servidores em ambientes de produção
- Controlar serviços e aplicações remotamente
- Executar qualquer ação que possa ser acionada via API HTTP
-
No canal do Discord onde o bot está presente, digite:
!menu -
O bot exibirá um menu numerado com todas as opções disponíveis
-
Digite o número correspondente à ação desejada
-
Aguarde a confirmação da operação
-
Para cancelar, digite
99
⏱️ Atenção: O menu expira em 30 segundos. Se não houver resposta, será necessário digitar
!menunovamente.
- Python 3.x
- discord.py: Biblioteca para interação com a API do Discord
- aiohttp: Cliente HTTP assíncrono para requisições
- python-dotenv: Gerenciamento de variáveis de ambiente
- Python 3.8 ou superior
- Conta no Discord
- Bot do Discord criado no Discord Developer Portal
-
Clone o repositório:
git clone https://github.com/pedroaop/PowerBot.git cd PowerBot -
Crie um ambiente virtual (recomendado):
python -m venv venv # Windows venv\Scripts\activate # Linux/Mac source venv/bin/activate
-
Instale as dependências:
pip install -r requirements.txt
-
Configure as variáveis de ambiente e o menu:
# Copie o arquivo de exemplo do .env cp .env.example .env # Edite o .env com suas configurações reais # (use seu editor de texto preferido) # Copie o arquivo de exemplo do menu.json cp menu.json.example menu.json # Edite o menu.json com suas ações e URLs reais # (use seu editor de texto preferido)
-
Execute o bot:
python main.py
Crie um arquivo .env na raiz do projeto com as seguintes variáveis. Você pode usar o arquivo .env.example como referência:
Nota: O arquivo
.envnão é versionado no Git por questões de segurança. Use.env.examplecomo template.
# ============================================
# TOKEN DO DISCORD (OBRIGATÓRIO)
# ============================================
DISCORD_TOKEN=seu_token_aqui
# ============================================
# CONFIGURAÇÕES DO BOT (OPCIONAIS)
# Todas têm valores padrão, então são opcionais
# ============================================
# Prefixo dos comandos (padrão: !)
COMMAND_PREFIX=!
# Timeout do menu em segundos (padrão: 30.0)
MENU_TIMEOUT=30.0
# Código HTTP considerado como sucesso (padrão: 200)
SUCCESS_HTTP_CODE=200
# Opção numérica para cancelar (padrão: 99)
CANCEL_OPTION=99
# Nome do comando do menu (padrão: menu)
MENU_COMMAND_NAME=menuNota: As URLs dos endpoints não ficam mais no
.env. Elas foram movidas para o arquivomenu.json(veja abaixo).
O arquivo menu.json contém todas as ações do menu interativo e as mensagens do bot. Este arquivo deve estar na raiz do projeto.
Nota: O arquivo
menu.jsonnão é versionado no Git por questões de segurança. Usemenu.json.examplecomo template e copie paramenu.jsoncom suas configurações reais.
Estrutura básica:
{
"actions": [
{
"id": "1",
"description": "Ligar Servidor Homologação",
"command": "https://seu-endpoint.com/ligar"
},
{
"id": "2",
"description": "Desligar Servidor Homologação",
"command": "https://seu-endpoint.com/desligar"
}
],
"cancel_option": "99",
"messages": {
"menu_title": "**O que você deseja?**",
"ping_response": "Pong!",
"cancel": "Operação cancelada.",
"waiting": "Aguarde {action}...",
"success": "Sucesso ao {action}!",
"error": "Erro ao {action}. Código HTTP: {status}.",
"timeout": "Tempo esgotado. Por favor, digite `{prefix}{command}` novamente."
}
}Campos:
actions: Array com todas as ações do menu. Cada ação tem:id: Identificador numérico usado no menudescription: Texto exibido no menucommand: URL completa do endpoint a ser chamado
cancel_option: Valor numérico para cancelar (padrão: "99")messages: Templates de mensagens com placeholders{action},{status},{prefix},{command}
💡 Dica: Você pode adicionar ou remover ações facilmente editando o
menu.json, sem precisar modificar o código!
- Acesse o Discord Developer Portal
- Crie uma nova aplicação ou selecione uma existente
- Vá para a aba "Bot"
- Copie o token (você pode precisar clicar em "Reset Token" se for a primeira vez)
- Habilite as "Message Content Intent" em "Privileged Gateway Intents"
- Convide o bot para seu servidor usando o OAuth2 URL Generator
PowerBot/
├── main.py # Código principal do bot
├── menu.py # Módulo para gerenciar o menu interativo
├── menu.json # Configurações do menu (ações e mensagens) - NÃO VERSIONADO
├── menu.json.example # Exemplo de configuração do menu
├── requirements.txt # Dependências do projeto
├── .env # Variáveis de ambiente (não versionado)
├── .env.example # Arquivo de exemplo de configuração
├── .gitignore # Arquivos ignorados pelo Git
└── README.md # Este arquivo
⚠️ IMPORTANTE:
- Nunca compartilhe seu arquivo
.envoumenu.jsoncom dados reais- Os arquivos
.envemenu.jsonjá estão no.gitignoree não serão versionados- Use os arquivos de exemplo (
.env.exampleemenu.json.example) como referência- Use URLs seguras (HTTPS) para todas as requisições
- Limite as permissões do bot apenas ao necessário
- Controle quem tem acesso aos comandos do bot no servidor Discord
- Não commite tokens, senhas, URLs de APIs ou qualquer informação sensível
Este guia descreve como realizar o deploy do PowerBot em um servidor Linux (Ubuntu), utilizando PM2 para gerenciar o processo e garantir que o bot reinicie automaticamente após reboots ou falhas.
Certifique-se de que o projeto esteja organizado no servidor:
/home/
└── seu-bot/
├── main.py
├── requirements.txt
├── .env
└── ...outros arquivos...
sudo apt update
sudo apt upgrade -y
rebootpython3 --version
which python3sudo apt install python3-venv python3 pip -yNavegue até a pasta do bot e instale as dependências:
cd /home/seu-bot
pip install -r requirements.txtPM2 será utilizado para rodar o bot em background e reiniciar automaticamente quando necessário:
sudo apt update
sudo apt install nodejs npm -y
# Verificar instalação
node -v
npm -v
# Instalar PM2 globalmente
sudo npm install pm2 -g
pm2 --versionpm2 start main.py --interpreter python3 --name powerbotComandos úteis:
Listar processos:
pm2 listMonitorar em tempo real:
pm2 monitVer logs:
pm2 logs powerbotPara garantir que o bot inicie automaticamente após reinicializações do servidor:
pm2 startup
pm2 save💡 Dica: Execute
pm2 startupe siga as instruções exibidas no terminal. Geralmente será necessário copiar e executar um comando comsudo.
Parar o bot:
pm2 stop powerbotIniciar novamente:
pm2 start powerbotReiniciar:
pm2 restart powerbotRenomear o processo:
pm2 rename powerbot novo-nomeRemover do PM2:
pm2 delete powerbotVer informações detalhadas:
pm2 show powerbotLimpar logs:
pm2 flush powerbotQuando precisar atualizar o código:
cd /home/seu-bot
git pull origin main
pip install -r requirements.txt --upgrade
pm2 restart powerbotpm2 list
pm2 logs powerbot --lines 50- Verifique se o bot está online no Discord
- Confirme que o token no arquivo
.envestá correto - Certifique-se de que a "Message Content Intent" está habilitada
- Verifique se as URLs no arquivo
menu.jsonestão corretas e acessíveis - Confirme que os servidores/serviços estão configurados para aceitar as requisições
- Verifique os logs do console para mais detalhes do erro
- Valide se o campo
commandde cada ação nomenu.jsoncontém uma URL válida
- O timeout padrão é de 30 segundos
- Para alterar, modifique a variável
MENU_TIMEOUTno arquivo.envou use o valor padrão
- Verifique se o arquivo
menu.jsonexiste na raiz do projeto - Valide a estrutura JSON do arquivo (use um validador JSON online)
- Certifique-se de que todas as ações têm os campos
id,descriptionecommand - Verifique se as URLs nos comandos são válidas (começam com
http://ouhttps://)
Este projeto está licenciado sob a Apache License 2.0. O código-fonte é livre e pode ser usado, modificado e distribuído conforme os termos da licença.
⚠️ Aviso de Responsabilidade:
- Os mantenedores deste projeto não se responsabilizam pelos serviços, comandos, URLs ou ações configuradas no arquivo
menu.json- É de total responsabilidade do usuário garantir que as URLs e comandos configurados sejam seguros e autorizados
- O uso deste bot para controlar serviços de infraestrutura é por sua conta e risco
- Recomendamos revisar cuidadosamente todas as configurações antes de usar em produção
Para contribuir com o projeto:
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona nova feature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Desenvolvido com ❤️ para facilitar o gerenciamento de infraestrutura