# Webináře — hlídač nových webinářů (praktickylekar.online) ## Účel Jednou denně (8:00, Plánovač úloh) zkontroluje [praktickylekar.online](https://www.praktickylekar.online/), zda přibyl nový webinář. Když ano → přes **Telegram** se zeptá, jestli má přihlásit osoby z `config.json` (Michaela + Vladimír Buzalkovi), po potvrzení je přihlásí a výsledek pošle zpět na Telegram. Po přihlášení chodí potvrzovací e-mail automaticky z webu. ## Soubory | Soubor | Popis | |--------|-------| | `watcher.py` | hlavní skript | | `config.json` | URL + údaje přihlašovaných osob | | `state.json` | vytvoří se sám; pamatuje poslední zpracované `idwebinar` | | `watcher.log` | log běhů | ## Přepínače v `watcher.py` (nahoře) - `POSILATINFOPOKAZDEKONTROLE` — `True` = pošle Telegram zprávu po **každé** ranní kontrole (i když nic nového; vhodné při zaběhávání). `True` je teď nastaveno. Až bude vše ověřené → přepnout na `False` (ozve se jen při novém webináři). - `DRY_RUN` — `True` = nic se reálně neodešle (registrace se jen simuluje), Telegram dotaz proběhne. `False` = ostrý režim (reálné přihlášení po potvrzení „ano"). - `ASK_TIMEOUT` — kolik sekund ráno čekat na odpověď ano/ne (default 1800 = 30 min). ## CLI ``` python watcher.py # ostrý denní běh python watcher.py --test # ignoruje state + VŽDY dry-run (otestuje plumbing) python watcher.py --reset # smaže state.json ``` ## Ověřená struktura webu (k 2026-06-17) 1. **Banner** na hlavní stránce: `` → z něj se čte ID. 2. **Brána** `POST /check2.php` s `zdravotnicky-pracovnik=on` & `laicka-verejnost=on` → nastaví cookie `souhlas=1`. **Bez ní se registrační formulář vůbec nezobrazí.** 3. **Registrace** `POST /registrovat4.php`, pole: - `email` (povinné) - `clen` = `1` (člen SVL Ano) / `2` (Ne) → Buzalkovi `1` - `prukaz` = číslo průkazu SVL (povinné když clen=1) - `clk` = evidenční číslo ČLK, **přesně 10 znaků** (`pattern=.{10,10}`) - `titul1, jmeno, prijmeni, pracoviste, mesto` — jen pro nečleny (clen=2) - `souhlas` = `on` (souhlas se zpracováním OÚ, povinné) - **skrytá** `webid` (= idwebinar) a `cislo` (= `PL` + DDMMRRRR, dle data webináře) → **čtou se živě z formuláře, nehádají se.** > Pokud provozovatel změní názvy polí / strukturu, skript loguje, co našel > (`watcher.log`) — podle toho se selektory upraví. ## Nasazení na tower (PRODUKCE) — Unraid, python-runner Běží na **toweru** (Unraid, 192.168.1.76) v kontejneru **`python-runner`**, plánováno přes **User Scripts plugin** na **8:00 denně**. - Soubory: `/mnt/user/Scripts/Webinare/` → v kontejneru `/scripts/Webinare/` - Telegram: na serveru **není** `Knihovny/` ani `Medevio/.env`, proto je přibalená kopie `telegram_notify.py` + lokální `/scripts/Webinare/.env` (jen `TELEGRAM_BOT_TOKEN` + `TELEGRAM_CHAT_ID`, práva 600). - Wrapper: `/boot/config/plugins/user.scripts/scripts/WebinarWatcher/script` (`flock` + `docker exec`, log `/mnt/user/Scripts/logs/webinar_watcher.log`). - Rozvrh: záznam v `schedule.json` (`custom: 0 8 * * *`) + řádek v `customSchedule.cron` → `update_cron` → `/etc/cron.d/root`. - `state.json` na serveru seedován na `560` (na ten jste registrovaní). ### Nasazení / správa z Windows — `deploy_tower.py` Heslo NIKDY v souboru, bere se z env `TOWER_PW`: ```bash TOWER_PW=... python deploy_tower.py recon # zmapuje server (jen čte) TOWER_PW=... python deploy_tower.py deploy # nahraje soubory (+ seed state.json) TOWER_PW=... python deploy_tower.py env # naplní serverový .env z Medevio/.env TOWER_PW=... python deploy_tower.py smoke # test: telegram .env + detekce (neodesílá) TOWER_PW=... python deploy_tower.py schedule # založí/aktualizuje rozvrh 8:00 TOWER_PW=... python deploy_tower.py prodrun # ruční spuštění ostrého běhu ``` Po změně `watcher.py`/`config.json` lokálně → `deploy` znovu (idempotentní, `state.json` ani `.env` nepřepisuje). ### Heartbeat → tichý režim Server běží s `POSILATINFOPOKAZDEKONTROLE=True` (ranní „zkontrolováno"). Až bude ověřeno, v lokálním `watcher.py` přepnout na `False` a `deploy` znovu. ## Alternativa — Plánovač úloh (Windows), pokud poběží lokálně ```powershell schtasks /Create /TN "WebinarWatcher" /SC DAILY /ST 08:00 ^ /TR "python \"U:\ordinaceprojekt\Webináře\watcher.py\"" /F ``` ## Notifikace Přes sdílenou knihovnu `Knihovny/telegram_notify.py` (`posli_telegram`, `zeptej_se_telegram`), bot **@Vlado_Claude_Bot**, token/chat_id z `Medevio/.env`.