agwandClaude Opus 5.5 ecf94bcbf0 Speaker: generiske replikker uden navne, til forvarmning
Replikker med navne og spillertekst kan ikke laves på forhånd, så uden
live-stemme var de øjeblikke tavse. Nu har hver af dem en generisk udgave,
der giver mening uden navnet (navnet står på skærmen):

- fælles (party/generic_lines.json): 22 velkomster til en ny spiller og
  tre pr. antal spillere fra to til ti (tallet som ord, aldrig først), med
  fest-udgaver til Fup og Fakta's fest-pakke.
- Fup og Fakta (fupogfakta/narrator/generic.json): VIP venter, runde to,
  finalen, stillingen, kategori, narret, husets løgn, sandheden fundet,
  af ingen og af alle, publikums favorit, vinder, priserne og hvem der er
  færdig; fem eller flere hver, og tre i fest-tonen.
- Tegn og Gæt (tegnoggaet/narrator/generic.json): VIP venter, tema, første
  og næste kæde, overlevede, forvandlet, priserne og vinderen.

Narrator.line() giver nu en Line, der kender sin generiske afløser
(generic(accept) vælger kun blandt dem, accept godtager, fx dem i cachen).
Filerne er nøglet på begivenheden, så et nyt spil kun skal skrive sin egen
generic.json. Test: antal, ingen tankestreger, intet tal først i en sætning,
ingen dubletter, kendte lyd-tags, og at alle navnebegivenheder i begge spil
har en generisk udgave (i fest-tonen, hvor der er en fest-replik).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 21:59:00 +02:00

Weirsøe Party Protocol

Dansk party-spil i stil med Jackbox. Spillet vises på en storskærm, og spillerne er med fra deres telefoner. Første spil er Fup og Fakta: alle finder på en troværdig løgn til et kuriøst faktum, og så skal man finde sandheden blandt løgnene. I Tegn og Gæt går kæder af ord, tegninger og gæt bordet rundt, og til sidst ser alle, hvad der blev af det første ord. Værten vælger spil i menuen på storskærmen (piletaster/fjernbetjening, Enter og mus) og kan skifte til et andet spil i samme rum efter podiet, uden at telefonerne skal joine igen.

  • Spillere: https://party.weircon.dk og indtast koden fra skærmen (eller scan QR-koden).
  • Vært: https://party.weircon.dk/host/ (Authentik, grupperne Familie og authentik Admins).
  • Spørgsmål: https://party.weircon.dk/admin/ (Authentik-admins logges ind automatisk).

Sådan virker det

Serveren er autoritativ. Hver skærm har én WebSocket, sender handlinger og får hele spiltilstanden tilbage efter hver ændring (se docs/PROTOCOL.md). Spilmotoren (fupogfakta/engine.py) er ren Python uden I/O og ejer alle regler og timere. Rummene (party/rooms.py) ligger i hukommelsen i én proces, så serveren skal køre med én worker. Et genstart afbryder igangværende spil.

Mappe Indhold
fupogfakta/ Spilmotor, modeller for kategorier og spørgsmål, spørgsmålsbank i data/*.json
tegnoggaet/ Spilmotor for Tegn og Gæt, temaer i data/themes.json, speakerens replikker
party/ Rum, WebSocket-consumers, sider, Authentik-header-login, templates og JS/CSS; spilregistret i games.py
partyhub/ Django-projekt (settings, ASGI)
deploy/ systemd-unit, miljøfil-skabelon og deploy.sh

Udvikling

python3 -m venv .venv && .venv/bin/pip install -r requirements-dev.txt
export DJANGO_DEBUG=true DEV_HOST_USER=dev
.venv/bin/python manage.py migrate && .venv/bin/python manage.py load_questions
.venv/bin/uvicorn partyhub.asgi:application --reload
.venv/bin/python manage.py test

DEV_HOST_USER lader dig åbne /host/ uden Authentik (kun med DJANGO_DEBUG=true).

Drift

Én uvicorn-proces (--workers 1) bag en reverse proxy med TLS. Proxyen beskytter /host/, /ws/host/ og /admin/ med Authentik forward-auth og sender X-authentik-username og X-authentik-groups videre; på alle andre stier skal den blanke de headere. Appen stoler kun på dem fra adresserne i TRUSTED_PROXIES, så appens port bør kun kunne nås fra proxyen. Se deploy/wpp.env.example for miljøvariabler.

deploy/bots.py spiller et helt spil mod en kørende server (--game tegn for Tegn og Gæt) og kan også fylde et spil op med bots (--code). Alle skærme kan ses uden server i party/static/party/dev.html (?game=tegn&phase=draw for Tegn og Gæt, ?game=menu for menuen og introerne).

Et nyt spil registreres i party/games.py (navn, tagline, trin, ikon, indstillinger, rum og JS); menuen, /host/new, storskærmen og telefonen finder det dér. Kør WPP_WRITE_FIXTURE=1 DJANGO_DEBUG=true .venv/bin/python manage.py test party.tests.test_games bagefter, så dev.html får det med.

Spørgsmål

fupogfakta/data/*.json indlæses med manage.py load_questions (ved hver deploy; matcher på spørgsmålsteksten, så rettelser i admin bevares, medmindre samme spørgsmål ændres i filen). Skriv _____ hvor svaret står, og giv 3 husets løgne.

Den tidligere version (Angular-SPA, REST) ligger på branchen legacy.

S
Description
Weirsøe Party Protocol
Readme
42 MiB
Languages
Python 60.3%
JavaScript 28.2%
CSS 9.8%
HTML 1.7%