Use at your own risk!
Richiede Bun (>= 1.0).
bun install
cp .env.example .env # poi compila TELEGRAM_TOKEN e CHAT_IDS
bun run startbun install esegue il postinstall di Puppeteer, che scarica la build di Chrome
corrispondente. Se il browser risulta mancante:
bunx puppeteer browsers install chromeBun carica automaticamente il file .env.
| Variabile | Descrizione |
|---|---|
TELEGRAM_TOKEN |
Token del bot (obbligatorio). |
CHAT_IDS |
Chat ID autorizzate, separate da virgola. Se vuoto chiunque può usare il bot. |
RICETTE_FILE |
Percorso dello stato. Default: ricette.json nella root del progetto. |
PROXY_SERVER |
Proxy per Chromium (es. socks5://127.0.0.1:1080 da un tunnel SSH -R), utile per uscire con un IP italiano se il bot gira su un server estero. Opzionale. |
HEADLESS |
Se false, Chromium gira "headed" invece che headless: serve un display (reale o virtuale via Xvfb + DISPLAY). Consigliato se il sito del CUP penalizza i browser headless. Default: headless. |
Le ricerche in corso sono salvate in ricette.json, che il bot scrive da solo
a ogni /prenota e a ogni /stop: non va creato a mano e se manca il bot parte
senza ricerche memorizzate. La scrittura è atomica (file temporaneo + rename) e il
file ha permessi 0600 perché contiene codici fiscali. È gitignorato: il formato
è documentato in ricette.json.example.
Al riavvio il bot riprende le ricerche interrotte e lo comunica alla chat che
le aveva richieste. Le voci senza cf o chat_id vengono saltate con un warning.
Vengono salvati solo i parametri della richiesta, mai le screenshot.
Chromium richiede queste librerie, già incluse nel Dockerfile:
apt install libatk1.0-0 libatk-bridge2.0-0 libcups2 libxcomposite1 libxdamage1 \
libxfixes3 libxrandr2 libpangocairo-1.0-0 libasound2 libgbm1 libnss3/prenota <codice_fiscale> <ricetta> [maxDays] [regexp cap] [regexp indirizzo]/status— le ricerche in corso per questa chat/stop <ricetta>— interrompe una ricerca/help
bun run start # avvia il bot
bun run lint # eslint
bun run format # prettier
bun test # test runner di Bun