agwandClaude Opus 5.5 8440be6f84 Skift spil i samme rum: "Vælg andet spil" efter podiet
Podiet har nu "Spil igen" og "Vælg andet spil". Det sidste går til menuen
med rummets kode (/host/?code=ABCD); menuen viser rummet og hvor mange der
venter, og Start sender koden med.

Sømmen ligger i rooms.add_room: får et nyt rum en kode, der allerede kører,
overtager det nye rum spillerne og forbindelserne (BaseRoom.take_over), og
det gamle lukkes (timere og stemmekø). Spillerne joines i det nye spil i den
rækkefølge de kom, med samme navn og token; dem over det nye spils max
bliver publikum. Hver forbindelses room og member_id peges om, så ingen
consumer hænger fast i det gamle rum, og telefonerne får det nye spils
lobby med det samme uden at joine igen. En telefon, der genindlæser, kommer
ind med sit gamle token.

Test (WebSocket): et helt Fup og Fakta-spil til podiet, skift til Tegn og
Gæt i samme rum, og et helt Tegn og Gæt-spil på de samme forbindelser; og
10 spillere til Fup og Fakta (8 spiller, resten er publikum).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 21:43:24 +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, når det oprettes.

  • 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
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).

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%