EN /HU | Belépés

Discord Updater bot

Az Updater egy kis Go eszköz, amely figyeli a Grav wiki, a Redmine és a Gitea változásait, és Discord-webhookokra posztolja az új aktivitást. Egy helyi gyorsítótár gondoskodik róla, hogy minden változás csak egyszer kerüljön bejelentésre.

Hogyan működik

Az updater INTERVAL_MINUTES percenként végigmegy a forrásokon:

  1. Lekérés — minden forrástól elkéri a legutóbbi *_CONTENT_LIMIT darab elemet.
  2. Összevetés — elemenként összeveti a változásjelet a cache.json tartalmával.
  3. Értesítés — ami új vagy változott, azt egy Markdown-linkként elküldi a forráshoz tartozó webhookra.
  4. Gyorsítótár mentése — a kör végén visszaírja a cache.json-t, hogy a következő kör ne ismételje meg.
Forrás Mit kér le Változásjel Üzenet
Grav wiki GET /custom/updates.json?limit=N az oldal modified időbélyege 📖 [Grav] - Oldalcím
Redmine GET /issues.json?limit=N&sort=updated_on:desc az issue updated_on mezője 🎫 [Redmine] - #123 Tárgy
Gitea GET /api/v1/repos/ORG/REPO/commits?limit=N repónként a commit SHA-ja 📝 [Gitea] - (org/repo) commitüzenet

A Grav-forrás

A wiki a /custom/updates.json végponton adja ki az oldalakat, a fájl módosítási ideje szerint csökkenő sorrendben (sablon: themes/ttgwiki/templates/updates.json.twig a wiki-pages repóban). Az updater csak a route, title és modified mezőket használja; a link GRAV_BASE_URL + route.

JSON
{"lang":"en","count":1,"pages":[
  {"route":"/team/onboarding","title":"Onboarding","modified":1792479011,
   "updatedAt":"2026-10-20T06:50:11+00:00","locale":"en","tags":["team"],"private":true}
]}
  • A gyorsítótár-kulcs grav_ + route, tehát egy oldal minden mentése (új modified) új üzenetet ad.
  • A bejelentkezéshez kötött oldalak (private: true) 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.

Konfiguráció

Környezeti változók; másold az env-example fájlt .env néven. Minden forrás minden körben lefut — amelyiknek nincs beállítva az URL-je, az csendben üres listát ad.

Általános

Változó Leírás Alapérték
INTERVAL_MINUTES Két kör között eltelt idő (perc). 5
DISCORD_WEBHOOK Tartalék webhook; jelenleg minden forrásnak saját van, így nem használja semmi. -
DISCORD_FAKE Ha true, az üzenetek csak a logba kerülnek, Discordra nem. false

Grav wiki

Változó Leírás
GRAV_BASE_URL A wiki alap-URL-je, záró perjel nélkül: https://wiki.teletypegames.org.
GRAV_DISCORD_WEBHOOK Discord-webhook a wiki-értesítésekhez.
GRAV_CONTENT_LIMIT Hány legutóbb módosított oldalt nézzen.

A Grav-végponthoz nem kell token.

Redmine

Változó Leírás
REDMINE_BASE_URL A Redmine alap-URL-je (https://pm.teletypegames.org).
REDMINE_KEY Redmine API-kulcs (X-Redmine-API-Key).
REDMINE_DISCORD_WEBHOOK Discord-webhook a Redmine-értesítésekhez.
REDMINE_CONTENT_LIMIT Hány legutóbb frissült issue-t nézzen.

Gitea

Változó Leírás
GITEA_BASE_URL A Gitea alap-URL-je (https://git.teletypegames.org).
GITEA_TOKEN Gitea API-token.
GITEA_REPOS A figyelt repók vesszővel elválasztva, pl. games/mranderson,games/impostor. Csak a commitokat figyeli, issue-kat és PR-eket nem.
GITEA_DISCORD_WEBHOOK Discord-webhook a Gitea-értesítésekhez.
GITEA_CONTENT_LIMIT Repónként hány legutóbbi commitot nézzen.

Futtatás

Előbb állítsd be a .env fájlt, aztán vagy:

BASH
go run main.go          # helyben
docker compose up -d    # konténerben

A konténer a repó mappáját mountolja /app-ként, és indításkor go run main.go-t futtat. A cache.json is ebben a mappában él, így túléli az újraindítást. A konténer az interstack hálózaton fut, 384m memórialimittel.

Élesben: /srv/stacks/updater a szerveren, a log docker logs updater-app. A masterre pusholt változás, ha a Go-forrást, a Dockerfile-t vagy a compose.yaml-t érinti, go vet és build után Woodpeckerből települ (ci-deploy updater, lásd Telepítés); a .env és a cache.json a szerveren marad.

Fájlok

Fájl Tartalom
main.go Belépési pont, a lib.Runner()-t hívja.
lib/runner.go A konfiguráció beolvasása, a forrás- és webhooklista, a fő ciklus.
lib/fetcher.grav.go, lib/fetcher.redmine.go, lib/fetcher.gitea.go A három élő forrás.
lib/fetcher.go Közös HTTP-kérés és a gyorsítótár-ellenőrzés.
lib/sender.discord.go, lib/message.go A Discord-webhook és az üzenetformátum.
lib/cache.go cache.json betöltése és mentése.
env-example Konfigurációs sablon.

Repó

https://git.teletypegames.org/services/updater