agwandClaude Opus 5.5 d22f1d5e2e
CI / test (push) Successful in 1m25s
Tegn og Gæt: tegn dit eget ord på telefon, storskærm og speaker
Telefonen og storskærmen siger "Tegn dit eget ord" i trin 1 ved et
lige antal spillere, og speakeren har fem faste replikker til det
(forvarmes med de andre faste). dev.html?game=tegn har fasen draw-own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 21:59:59 +02:00
2026-10-20 21:59:50 +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. I Spionen kender alle det hemmelige ord undtagen spionen; alle giver ét stikord, snakker og stemmer om, hvem der lyver. 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 og speakerens replikker (temaerne er fælles: party/data/themes.json)
spionen/ Spilmotor for Spionen og speakerens replikker (samme temaer)
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, --game spion for Spionen) 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=spion&phase=vote for Spionen, ?game=menu for menuen og introerne).

Speakeren (ElevenLabs) laver replikker med navne live. manage.py tts_warm forvarmer de faste replikker og, under --budget, menuens intro, de generiske replikker uden navne og resten. Med WPP_TTS_LIVE=off bruges kun forvarmede klip; med auto (standard) siges en forvarmet generisk replik, når en replik ikke kan laves live (ingen nøgle, afvist, timeout eller lav saldo). Spørgsmålenes oplæsning og spillernes egne ord har ingen generisk udgave og er tavse, når de ikke er forvarmet. Et nyt spils generiske replikker står i dets narrator/generic.json, nøglet på begivenheden.

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%