O tutorial abaixo demonstra como criar um bot de Discord em Python e hospedá-lo gratuitamente no Render, sendo monitorado pelo UptimeRobot. Existem formas mais fáceis de fazer isso, mas que envolvem o pagamento de uma mensalidade para diferentes serviços. Medidas pagas não serão abordadas neste post, já que o objetivo é criar e hospedar sem gastar nada.
O bot ficará online praticamente 24 horas por dia, no entanto, por se tratar de um serviço gratuito, pode levar a alguns problemas de performance e talvez seja necessário reiniciar os serviços do Render ou do UptimeRobot de vez em quando.
Este tutorial parte do princípio que o leitor já criou uma conta no Discord e tem alguma noção básica de programação ou lógica. Ainda assim, estamos oferecendo um template básico padrão para usar no seu bot. Link do Template no GitHub: https://github.com/nameherelater/Template-Discord-Bot
Outros Links utilizados ao longo do tutorial:
- https://discord.com/developers/applications
- https://github.com/
- https://dashboard.render.com
- https://dashboard.uptimerobot.com/
1- Habilite o ‘Modo Desenvolvedor’ na sua conta
(É possível criar o bot sem essa etapa, mas recomenda-se fazer mesmo assim para evitar complicações futuras)
- Após logar no Discord, vá até as settings do seu perfil, no canto esquerdo da página.

- Em seguida, busque o local ‘Avançado’ / ‘Advanced’ e clique na flag de ‘Modo desenvolvedor’ / ‘Developer Mode’
- Uma opção de ‘Modo de Teste’ vai aparecer logo abaixo, mas não é necessário marcar ela.

2 – Acesse o link de criação de aplicações do Discord
- Acesse o link: https://discord.com/developers/application
- Talvez seja necessário entrar com sua conta, mas após logar, clicar no botão de ‘New Application’:

- Preencha o nome e aceite os termos da sua nova aplicação, em seguida, clique em ‘Create’

- Configure um Logo e uma descrição se desejar. Em seguida, vá para o setor ‘Bot’

- Dentro do setor ‘Bot’, marque as flags ‘Public Bot’, ‘Presence intent’, ‘Server Members Intent’ e ‘Message Content Intent’. Clique também no botão ‘Reset Token’ (caso ainda não tenha um Token para seu bot) e preencha a senha de sua conta para confirmar.

- Acesse o setor ‘OAuth2’, marque a opção ‘bot’ e em seguida ‘administrador’ nas flags apresentadas

- Um link será gerado logo abaixo de todas essas flags que permite convidar o bot para seu servidor. Copie este link e cole no navegador em que sua conta discord está logada. Não se esqueça de manter o ‘Integration Type’ como ‘Guild Install’


- Ao colar o link no navegador, escolha o servidor de discord que deseja adicionar o bot (Se estiver com o app aberto, talvez você seja redirecionado). Não esqueça de adicionar a permissão de administrador a ele.


- Após clicar em ‘Autorizar’, seu bot vai estar offline no servidor escolhido. Agora será necessário programar e hospedar ele em um site externo.

3 – Adicionar o bot no GitHub
- Para hospedar o bot, será necessário criar uma conta no GitHub: https://github.com/
- Crie um novo repositório, é recomendável coloca-lo ‘Privado’.
- (Existem várias formas de realizar essa parte. O modelo ensinado neste post não utiliza um arquivo .env para as variáveis de ambiente, pois eles são adicionados pelo Render).
- Se já tiver os arquivos de um bot, adicione-os no repositório, caso contrário, pode usar o template de bot que oferecemos para este post: https://github.com/nameherelater/Template-Discord-Bot
- keep_alive.py = arquivo para manter seu bot vivo. Contem informações mais técnicas, como hospedagem, logs e comandos de resposta para comunicação entre Server e Bot.
- requirements.txt = Lista todas as requisições necessárias para seu bot. O Render vai utilizar esse arquivo quando for construir a hospedagem.
- bot.py = Código do bot em si, com os comandos de leitura e resposta para diferentes situações.
- Com os arquivos adicionados no github, agora é necessário criar uma hospedagem para o bot no Render
4 – Acessar Render e configurar bot
- Acesse https://dashboard.render.com/ e crie uma conta.
- Preencha as perguntas que fizerem. As respostas não são muito relevantes, mas segue imagem com as informações utilizadas:

- Escolha o plano desejado. É possível pagar pelas funcionalidades, mas aqui utilizaremos o plano gratuito:

- Na primeira vez que logar, será oferecido a possibilidade de escolher o tipo de app para iniciar seu primeiro projeto. É possível pular essa introdução se quiser. Caso não queira seguir o tutorial inicial ou não seja sua primeira vez no Render, basta apenas clicar em ‘New’ e selecionar ‘Web Service’.
Este tutorial vai presumir que é sua primeira vez usando Render e seguir as opções que a plataforma recomenda.
Escolha a opção ‘Web Service’:

- Em seguida, adicione sua sua conta do github

- Adicione sua conta do github, mas ao configura-lo, lembre de marcar a opção ‘Only Selected Repositories’ e selecionar o repositório do seu bot

- Após adicionar o seu repositório, clique nele pelo Render e configure as informações necessárias:

- Dentro das configurações, deixe os comandos da mesma forma que as imagens abaixo, não será necessário alterar muita coisa além do padrão. Lembre-se de escolher o plano ‘Free’ e colocar os mesmos nomes que seus arquivos correspondentes ao requirements.txt e bot.py:


- Ainda na mesma tela, adicione as variáveis de ambiente que serão utilizadas no projeto. Isso equivale as informações que ficam normalmente no arquivo .env de outros bots. Neste artigo, estaremos usando duas variáveis de ambiente: O Token do seu bot (que foi gerado no passo 2, nas configurações do discord) e o prefixo que será aceito para realizar os comandos do bot.

- Se seu bot ainda utilizar um arquivo .env, é possível configura-lo como ‘Secret File’ nas configurações avançadas, mas isso não será abordado neste tutorial.

- Após terminar as configurações, clique em ‘Deploy Web Service’, uma tela de logs vai abrir e o serviço de host do seu bot terá início.
- Observação 1: O processo para deixar o serviço ‘Live’ pode demorar um pouco, a depender muito da estabilidade do Render. Em certos casos de teste, o sistema demorou perto de 30 minutos para ficar pronto.
- Observação 2: O Render precisa que seu serviço esteja apontando uma porta web, caso contrario, mostrara o erro: “No open ports detected, continuing to scan”. No código template oferecido para este artigo, o código utiliza a porta 10000 (ver arquivo ‘keep_alive.py’).


- Se tudo funcionar corretamente, o service vai se tornar ‘Live’ e o bot estará online no seu discord. Se erros acontecerem, um ‘Fail’ vai aparecer, recomenda-se buscar auxilio de fontes externas e pesquisar o problema pelo erro dos logs. Os mais comuns são “No open ports detected” ou alguma requisito faltando no requirements.txt


5 – Configurando UptimeRobot para manter seu bot ativo
- Após seu bot estar online no Render, após algum tempo ele logo se tornará inativo. Para evitar isso, é necessário acessar uma plataforma que mande sinais para o Render e relembre ele de ficar ativo. Acesse https://dashboard.uptimerobot.com/ para criar um monitor do seu bot.

- Após criar uma conta e verifica-la em seu email, o sistema já vai redirecionar para a criação do seu primeiro monitor. (Caso não seja sua primeira vez no UptimeRobot, basta apenas clicar no botão ‘New Monitor’ que vai encontrar a mesma tela). Copie o link no topo de seu servidor Render e cole no local “URL to monitor”:


- Após clicar em ‘Create monitor’ é possivel dar ‘skip’ em todas as próximas etapas. Se quiser, é possível configurar testes de email, páginas de status, assim como visualizar outros beneficios do UptimeRobot. Clique em ‘Nah, get me to dashboard already!’ que você será redirecionado a sua página de dashboards.

- Na sua página de dashboards, já será possível visualizar seu monitor e acompanhar o funcionamento dele. Talvez leve alguns minutos ficar com o status “Up”, podendo permanecer como “Preparing” por um tempo. Se após mais de uma hora o status ainda for “Preparing” ou for qualquer outro diferente de “Up”, será necessário revisar o processo de criação: validar o link do Render, reiniciar o Render, reiniciar o UptimeRobot, entre outros. Caso o status permaneça como “Preparing” indefinidamente, vale também revisar as portas que estão sendo utilizadas no seu bot, alterá-las pode resolver o problema.


- Ao terminar de preparar, o seu UptimeRobot vai estar ativo, finalizando assim o processo de criação do bot. Seu bot estará ouvindo comandos no canal escolhido conforme o configurado, 24h por dia.

6 – Observações e dicas:
- É possível que o UptimeRobot ou o Render apresentem algumas falhas e fiquem fora do ar de vez em quando (por estarmos utilizando um processo gratuito), mas essas ocasiões são raras, e resetar ambos os serviços sempre funcionou.
- Para realizar modificações no código do bot, é necessário alterar os arquivos da branch main no GitHub. Às vezes, pode demorar um pouco para que as mudanças entrem no ar ao colocar o Deploy no Render. Recomenda-se usar a opção “Clear build cache & Deploy” após cada modificação.

- Fazer muitas alterações no GitHub com o bot ativo pode gerar alguns bugs estranhos. Se algo assim acontecer, recomenda-se resetar o Render e/ou o UptimeRobot. Em último caso, volte o commit para uma versão anterior.
- Se você pretende utilizar esse processo em muitos servidores e com vários usuários, é recomendável criar outro bot, com o mesmo código, voltado apenas para testes, evitando assim possíveis bugs no seu bot oficial.
Esperamos que tenha se divertido na criação do seu bot.
Fontes de pesquisa:
- https://www.youtube.com/watch?app=desktop&v=kBdDmCPcbfs&ab_channel=CreepyD
- https://replit.com/
- https://chatgpt.com/
- https://uptimerobot.com/blog/replit-monitors-recent-issues/
- https://stackoverflow.com/questions/72590432/discord-bot-is-not-running-with-uptime-robot-and-repl-it
- https://discordpy.readthedocs.io/en/stable/discord.html
- https://www.reddit.com/r/webdev/comments/1ftno8y/is_render_secure/
Rafael Lua, formado em Ciência da Computação. Curioso por natureza, sempre buscando novas formas de entender o mundo e se divertir no processo.