TITLE=Discord Updater bot ROUTE=/services/updater LOCALE=hu MODIFIED=1792749862 URL=https://wiki.teletypegames.org/hu/services/updater L=1 https://git.teletypegames.org/services/wiki-pages L=2 #31 q│ Az Updater egy kis Go eszköz, amely figyeli a Grav wiki, a Redmine és a q│ Gitea változásait, és Discord-webhookokra posztolja az új aktivitást. Egy q│ helyi gyorsítótár gondoskodik róla, hogy minden változás csak egyszer q│ kerüljön bejelentésre. 1Hogyan működik 1══════════════ Az updater cINTERVAL_MINUTES0 percenként végigmegy a forrásokon: 1. bLekérés0 — minden forrástól elkéri a legutóbbi c*_CONTENT_LIMIT0 darab elemet. 2. bÖsszevetés0 — elemenként összeveti a változásjelet a ccache.json0 tartalmával. 3. bÉrtesítés0 — ami új vagy változott, azt egy Markdown-linkként elküldi a forráshoz tartozó webhookra. 4. bGyorsítótár mentése0 — a kör végén visszaírja a ccache.json0-t, hogy a következő kör ne ismételje meg. t┌───────────┬────────────────────┬─────────────────────┬─────────────────────┐ t│h Forrás t│h Mit kér le t│h Változásjel t│h Üzenet t│ t├───────────┼────────────────────┼─────────────────────┼─────────────────────┤ t│0 Grav wiki t│0 cGET0 t│0 az oldal cmodified0 t│0 c📖 [Grav] - Oldalcím0 t│ t│0 t│0 c/custom/updates.0 t│0 időbélyege t│0 t│ t│0 t│0 cjson?limit=N0 t│0 t│0 t│ t├───────────┼────────────────────┼─────────────────────┼─────────────────────┤ t│0 Redmine t│0 cGET0 t│0 az issue cupdated_on0 t│0 c🎫 [Redmine] - #1230 t│ t│0 t│0 c/issues.0 t│0 mezője t│0 cTárgy0 t│ t│0 t│0 cjson?limit=N&sort=0 t│0 t│0 t│ t│0 t│0 cupdated_on:desc0 t│0 t│0 t│ t├───────────┼────────────────────┼─────────────────────┼─────────────────────┤ t│0 Gitea t│0 cGET0 t│0 a commit SHA-ja t│0 c📝 [Gitea] -0 t│ t│0 t│0 c/api/v1/repos/ORG/0 t│0 t│0 c(org/repo)0 t│ t│0 t│0 cREPO/0 t│0 t│0 ccommitüzenet0 t│ t│0 t│0 ccommits?limit=N0 t│0 t│0 t│ t│0 t│0 repónként t│0 t│0 t│ t└───────────┴────────────────────┴─────────────────────┴─────────────────────┘ 2A Grav-forrás 2───────────── A wiki a c/custom/updates.json0 végponton adja ki az oldalakat, a fájl módosítási ideje szerint csökkenő sorrendben (sablon: cthemes/ttgwiki/templates/updates.json.twig0 a 1wiki-pages repóban). Az updater csak a croute0, ctitle0 és cmodified0 mezőket használja; a link cGRAV_BASE_URL0 + croute0. p {"lang":"en","count":1,"pages":[ p {"route":"/team/onboarding","title":"Onboarding","modified":1792479011, p "updatedAt":"2026-10-20T06:50:11+00:00","locale":"en","tags":["team"],"pr» p ivate":true} p ]} • A gyorsítótár-kulcs cgrav_0 + route, tehát egy oldal minden mentése (új cmodified0) új üzenetet ad. • A bejelentkezéshez kötött oldalak (cprivate: true0) is bekerülnek a listába a címükkel; a törzsüket a végpont nem adja ki, és az updater nem is kéri. • Prefix nélküli útvonalat kér, ezért az angol címeket és URL-eket posztolja. 1Konfiguráció 1════════════ Környezeti változók; másold az cenv-example0 fájlt c.env0 néven. Minden forrás minden körben lefut — amelyiknek nincs beállítva az URL-je, az csendben üres listát ad. 2Általános 2───────── t┌──────────────────┬─────────────────────────────────────────────┬───────────┐ t│h Változó t│h Leírás t│h Alapérték t│ t├──────────────────┼─────────────────────────────────────────────┼───────────┤ t│0 cINTERVAL_MINUTES0 t│0 Két kör között eltelt idő (perc). t│0 c50 t│ t├──────────────────┼─────────────────────────────────────────────┼───────────┤ t│0 cDISCORD_WEBHOOK0 t│0 Tartalék webhook; jelenleg minden forrásnak t│0 - t│ t│0 t│0 saját van, így nem használja semmi. t│0 t│ t├──────────────────┼─────────────────────────────────────────────┼───────────┤ t│0 cDISCORD_FAKE0 t│0 Ha ctrue0, az üzenetek csak a logba kerülnek, t│0 cfalse0 t│ t│0 t│0 Discordra nem. t│0 t│ t└──────────────────┴─────────────────────────────────────────────┴───────────┘ 2Grav wiki 2───────── t┌──────────────────────┬─────────────────────────────────────────────────────┐ t│h Változó t│h Leírás t│ t├──────────────────────┼─────────────────────────────────────────────────────┤ t│0 cGRAV_BASE_URL0 t│0 A wiki alap-URL-je, bzáró perjel nélkül0: t│ t│0 t│0 chttps://wiki.teletypegames.org0. t│ t├──────────────────────┼─────────────────────────────────────────────────────┤ t│0 cGRAV_DISCORD_WEBHOOK0 t│0 Discord-webhook a wiki-értesítésekhez. t│ t├──────────────────────┼─────────────────────────────────────────────────────┤ t│0 cGRAV_CONTENT_LIMIT0 t│0 Hány legutóbb módosított oldalt nézzen. t│ t└──────────────────────┴─────────────────────────────────────────────────────┘ A Grav-végponthoz nem kell token. 2Redmine 2─────── t┌─────────────────────────┬──────────────────────────────────────────────────┐ t│h Változó t│h Leírás t│ t├─────────────────────────┼──────────────────────────────────────────────────┤ t│0 cREDMINE_BASE_URL0 t│0 A Redmine alap-URL-je t│ t│0 t│0 (chttps://pm.teletypegames.org0). t│ t├─────────────────────────┼──────────────────────────────────────────────────┤ t│0 cREDMINE_KEY0 t│0 Redmine API-kulcs (cX-Redmine-API-Key0). t│ t├─────────────────────────┼──────────────────────────────────────────────────┤ t│0 cREDMINE_DISCORD_WEBHOOK0 t│0 Discord-webhook a Redmine-értesítésekhez. t│ t├─────────────────────────┼──────────────────────────────────────────────────┤ t│0 cREDMINE_CONTENT_LIMIT0 t│0 Hány legutóbb frissült issue-t nézzen. t│ t└─────────────────────────┴──────────────────────────────────────────────────┘ 2Gitea 2───── t┌───────────────────────┬────────────────────────────────────────────────────┐ t│h Változó t│h Leírás t│ t├───────────────────────┼────────────────────────────────────────────────────┤ t│0 cGITEA_BASE_URL0 t│0 A Gitea alap-URL-je t│ t│0 t│0 (chttps://git.teletypegames.org0). t│ t├───────────────────────┼────────────────────────────────────────────────────┤ t│0 cGITEA_TOKEN0 t│0 Gitea API-token. t│ t├───────────────────────┼────────────────────────────────────────────────────┤ t│0 cGITEA_REPOS0 t│0 A figyelt repók vesszővel elválasztva, pl. t│ t│0 t│0 cgames/mranderson,games/impostor0. Csak a commitokat t│ t│0 t│0 figyeli, issue-kat és PR-eket nem. t│ t├───────────────────────┼────────────────────────────────────────────────────┤ t│0 cGITEA_DISCORD_WEBHOOK0 t│0 Discord-webhook a Gitea-értesítésekhez. t│ t├───────────────────────┼────────────────────────────────────────────────────┤ t│0 cGITEA_CONTENT_LIMIT0 t│0 Repónként hány legutóbbi commitot nézzen. t│ t└───────────────────────┴────────────────────────────────────────────────────┘ 1Futtatás 1════════ Előbb állítsd be a c.env0 fájlt, aztán vagy: p go run main.go # helyben p docker compose up -d # konténerben A konténer a repó mappáját mountolja c/app0-ként, és indításkor cgo run main.go0-t futtat. A ccache.json0 is ebben a mappában él, így túléli az újraindítást. A konténer az cinterstack0 hálózaton fut, c384m0 memórialimittel. Élesben: c/srv/stacks/updater0 a szerveren, a log cdocker logs updater-app0. A masterre pusholt változás, ha a Go-forrást, a cDockerfile0-t vagy a ccompose.yaml0-t érinti, cgo vet0 és build után Woodpeckerből települ (cci-deploy cupdater0, lásd 2Telepítés); a c.env0 és a ccache.json0 a szerveren marad. 1Fájlok 1══════ t┌─────────────────────────────────────┬──────────────────────────────────────┐ t│h Fájl t│h Tartalom t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 cmain.go0 t│0 Belépési pont, a clib.Runner()0-t t│ t│0 t│0 hívja. t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 clib/runner.go0 t│0 A konfiguráció beolvasása, a forrás- t│ t│0 t│0 és webhooklista, a fő ciklus. t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 clib/fetcher.grav.go0, t│0 A három élő forrás. t│ t│0 clib/fetcher.redmine.go0, t│0 t│ t│0 clib/fetcher.gitea.go0 t│0 t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 clib/fetcher.go0 t│0 Közös HTTP-kérés és a t│ t│0 t│0 gyorsítótár-ellenőrzés. t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 clib/sender.discord.go0, t│0 A Discord-webhook és az t│ t│0 clib/message.go0 t│0 üzenetformátum. t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 clib/cache.go0 t│0 ccache.json0 betöltése és mentése. t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 cenv-example0 t│0 Konfigurációs sablon. t│ t└─────────────────────────────────────┴──────────────────────────────────────┘ 1Repó 1════ https://git.teletypegames.org/services/updater