Um bot de Telegram que só roda enquanto seu notebook está aberto não está realmente rodando — está fazendo demo. Para tê-lo de fato online, respondendo às 3 da manhã, sobrevivendo aos seus reboots e às próprias quedas, ele precisa morar num servidor. Eis o caminho inteiro, do início ao fim, com os comandos.
Boa notícia primeiro: um bot é uma carga minúscula. Ele na maior parte fica ocioso esperando por mensagens, então a máquina mais barata o roda bem — sem IP dedicado, sem domínio, nada chique.
1. Pegue um token do BotFather
No Telegram, mande mensagem para o @BotFather, envie /newbot, escolha um nome e um username. Ele te entrega um token parecido com 12345:AAH.... Trate-o como uma senha — qualquer um com ele controla o seu bot.
2. Um bot mínimo
Faça SSH no servidor, configure o Python e a biblioteca:
sudo apt update && sudo apt install -y python3-venv
mkdir ~/mybot && cd ~/mybot
python3 -m venv venv && source venv/bin/activate
pip install python-telegram-bot
Um bot que responde — ~/mybot/bot.py:
import os
from telegram.ext import ApplicationBuilder, CommandHandler
async def start(update, ctx):
await update.message.reply_text("Vivo e num servidor. 🟢")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
Note que ele lê o token de uma variável de ambiente — não hardcoded. Isso importa no próximo passo.
3. A parte que de fato o mantém rodando: systemd
Se você só rodar python bot.py, ele morre no momento em que você fecha o SSH. Um serviço systemd é o que o faz sobreviver ao logout, às quedas e aos reboots. Crie /etc/systemd/system/mybot.service:
[Unit]
Description=Telegram bot
After=network-online.target
[Service]
WorkingDirectory=/home/youruser/mybot
Environment=BOT_TOKEN=12345:AAH...your-token
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser
[Install]
WantedBy=multi-user.target
Depois:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot # deve dizer active (running)
journalctl -u mybot -f # logs ao vivo
Restart=always é a linha que faz o trabalho de verdade — caiu, e ele volta em 5 segundos. enable significa que ele sobe após um reboot. Essa é toda a diferença entre "eu rodei um bot uma vez" e "meu bot está de pé".
4. Por que sem domínio nem portas abertas
O bot usa long polling — ele alcança o Telegram por atualizações, então nada precisa alcançar para dentro. Sem URL pública, sem regra de firewall de entrada, sem IP dedicado. É exatamente por isso que um VPS NAT (IP compartilhado, SSH numa porta) é uma casa boa e barata para um bot. Webhooks existem para volume muito alto, mas você quase certamente não precisa deles para começar.
Ressalvas honestas
- Higiene do token: aqui ele está inline no arquivo unit por clareza — bom numa máquina trancada, mas para qualquer coisa compartilhada, carregue-o de um
EnvironmentFilesó do root, e nunca faça commit dele no git. Vazou? Revogue no BotFather, emita um novo. - Bots pesados: se o seu bot faz o trabalho em si (geração de imagem, um modelo local), ele não é mais minúsculo — suba de acordo.
É isso. Tranque a máquina primeiro com o checklist de segurança, coloque o serviço e seu bot fica online esteja você ou não. Num VPS pago em cripto você pode tê-lo rodando um minuto depois de decidir.
Comentários
Nenhum comentário ainda. Seja o primeiro.