A Definitely not an Impostor puzzle/ARG játék utáni terminálja: aki végigjátszotta, kap egy személyes kódot, ide hozza a nevével együtt, és megtudja, mi jön ezután.
Elérhető:
teletypegames.org:2324, böngészőben a bbsweb-en, és a TTG Gate BBS-en át is
Ruby alkalmazás a rubbs gemre építve, mint a Teletype BBS. Maga a rubbs is ebből a boardból vált ki (rubbs 0.1.0). Egy porton két arca van:
A hívás a rubbs BBS::Terminal kérdésével indul: a RETURN elfogadja a telnetválaszokból vett tippet, az 1 a modern arcot, a 2 a C64-et választja.
NORMAN és a NORBERT kódja ugyanaz).Minden munkamenet, sikeres vagy sem, egy sor a data/sessions.csv-ben:
session_id,timestamp,player_name,code,feedback,email
A sor a név és a kód beérkezésekor íródik, aztán helyben frissül, ahogy a visszajelzés és az e-mail megjön. Az IMPOSTOR_BBS_SESSIONS máshová teszi a fájlt; a compose a data/-t mountolja, így a rekordok túlélik az újraindítást.
Egy játékosnév személyes kódját a parancssori eszköz adja, a nevet az IMPOSTOR_BBS_PLAYER_NAME-ből olvassa:
IMPOSTOR_BBS_PLAYER_NAME=norman bin/generate_code
# => 2J5GFN
A repó két dolog: az impostor gem (lib/impostor*, screens/), vagyis a kihallgató terminál a szabályaival, és körülötte az önálló board. Egy másik rubbs-board behúzhatja a gemet, és doorként futtathatja ugyanezt a terminált, saját munkamenet-tárral (a Teletype BBS 2026-11-01-ig így tett; azóta ez a 2324-es board a terminál egyetlen helye):
gem 'impostor', git: 'https://git.teletypegames.org/bbs/impostor-bbs.git'
require 'impostor'
sessions = Impostor.sessions_store('data/impostor_sessions.csv')
door :impostor, Impostor::Modern.flow(sessions: sessions), label: '&Impostor'
C64-es hívó az Impostor::Petscii.flow(sessions: sessions)-t kapja. A flow végén a door ENTER-t kér, és visszaadja a hívót a gazda-BBS-nek. A gazda Gemfile.lock-ja rögzíti a revíziót, így egy itteni változás csak az ottani lock-bumppal ér el a doorig.
| Útvonal | Mi ez |
|---|---|
bbs.rb |
Belépési pont: egy ImpostorBBS, a BBS::Terminal a két arccal |
lib/domain/impostor_bbs.rb |
A kompozíciós gyökér: beolvassa a környezetet, felépíti a munkamenet-tárat |
lib/ui/modern.rb, lib/ui/petscii.rb |
A board arcai: a gem flow-jai, aztán elköszönés és NO CARRIER |
lib/impostor.rb, lib/impostor/ |
A gem: a kihallgatás flow-ja, Impostor::Modern, Impostor::Petscii, a kódgenerátor (a Lua eredeti Ruby-portja) |
screens/modern/, screens/petscii/ |
A két arc üdvözlő és gratuláló képernyője |
bin/generate_code |
A kódgenerátor parancssori eszköze |
Környezet: BBS_PORT, BBS_MAX_SESSIONS (rubbs) és IMPOSTOR_BBS_SESSIONS; az env-example az alapértékekkel együtt sorolja fel őket.
A masterre pusholva Woodpeckerből élesedik (RuboCop, compose-ellenőrzés, ci-deploy impostor-bbs); a konténer impostor-bbs, a /srv/stacks/impostor-bbs-ben, a nyilvános port 2324, a data/ megmarad a deployok között. Az entrypoint induláskor frissíti a rubbs-t. A többi board a BBS-hálózat oldalon van.