Un bot Telegram care rulează doar cât ți-e deschis laptopul nu rulează de fapt — face o demonstrație. Ca să fie chiar online, să răspundă la 3 dimineața, să supraviețuiască repornirilor tale și propriilor căderi, trebuie să trăiască pe un server. Iată tot drumul, de la început până la sfârșit, cu comenzile.
Întâi vestea bună: un bot e o sarcină minusculă. Stă mai mult degeaba, așteptând mesaje, așa că cea mai ieftină mașină îl duce bine — fără IP dedicat, fără domeniu, nimic sofisticat.
1. Ia un token de la BotFather
În Telegram, scrie-i lui @BotFather, trimite /newbot, alege un nume și un username. Îți dă un token care arată ca 12345:AAH.... Tratează-l ca pe o parolă — oricine îl are îți controlează botul.
2. Un bot minimal
Intră pe server prin SSH, configurează Python și 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
Un bot care răspunde — ~/mybot/bot.py:
import os
from telegram.ext import ApplicationBuilder, CommandHandler
async def start(update, ctx):
await update.message.reply_text("Alive and on a server. 🟢")
app = ApplicationBuilder().token(os.environ["BOT_TOKEN"]).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
Observă că citește tokenul dintr-o variabilă de mediu — nu e scris direct în cod. Asta contează la pasul următor.
3. Partea care chiar îl ține pornit: systemd
Dacă rulezi doar python bot.py, moare în clipa în care închizi SSH. Un serviciu systemd e ce-l face să supraviețuiască ieșirii din sesiune, căderilor și repornirilor. Creează /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
Apoi:
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
sudo systemctl status mybot # should say active (running)
journalctl -u mybot -f # live logs
Restart=always e linia care face treaba reală — pică și e înapoi în 5 secunde. enable înseamnă că pornește după o repornire. Asta e toată diferența dintre „am rulat o dată un bot” și „botul meu e online”.
4. De ce fără domeniu sau porturi deschise
Botul folosește long polling — el cere actualizările de la Telegram, deci nimic nu trebuie să ajungă la el. Fără URL public, fără regulă de firewall de intrare, fără IP dedicat. Exact de aceea un VPS NAT (fără IP propriu, SSH pe un port) e o casă bună și ieftină pentru un bot. Webhookurile există pentru volume foarte mari, dar aproape sigur nu-ți trebuie ca să începi.
Rezerve cinstite
- Igiena tokenului: aici e scris direct în fișierul de unitate, pentru claritate — în regulă pe o mașină bine închisă, dar pentru orice e folosit de mai mulți, încarcă-l dintr-un
EnvironmentFileaccesibil doar pentru root și nu-l pune niciodată în git. S-a scurs? Revocă-l din BotFather și emite unul nou. - Boți grei: dacă botul face el însuși munca (generare de imagini, un model local), nu mai e minuscul — dimensionează corespunzător.
Asta e tot. Închide întâi mașina cu lista de securitate, pune serviciul, iar botul tău rămâne online, fie că ești și tu, fie că nu. Pe un VPS plătit cu cripto îl poți avea pornit la un minut după ce te-ai hotărât.
Comentarii
Încă nu există comentarii. Fii primul.