---
title: RuBBS
url: 'https://wiki.teletypegames.org/hu/engines/rubbs'
markdown: 'https://wiki.teletypegames.org/hu/engines/rubbs.md'
lang: hu
date: '2026-06-04'
description: 'A rubbs a Ruby gemünk telnetes üzenőfalak (BBS-ek) építéséhez: egy belépő párbeszéd tíz sorból, egy ablakos, menüs, egérrel kezelhető teljes képernyős board néhány százból, és ugyanaz a board Commodore 64-en, ugyanazon a porton. A BBS-hálózatunk mind a tizenegy boardja ezen fut. Ez a kézikönyv a r…'
taxonomy:
  tag:
    - engine
    - highlighted
---

# RuBBS

> A rubbs a Ruby gemünk telnetes üzenőfalak (BBS-ek) építéséhez: egy belépő párbeszéd tíz sorból, egy ablakos, menüs, egérrel kezelhető teljes képernyős board néhány százból, és ugyanaz a board Commodore 64-en, ugyanazon a porton. A [BBS-hálózatunk](https://wiki.teletypegames.org/hu/services/bbs-network) mind a tizenegy boardja ezen fut. Ez a kézikönyv a **rubbs 1.0.0**-t írja le. Minden osztálya és metódusa dokumentálva van a forrásban: az **[API-referencia (RDoc)](https://wiki.teletypegames.org/rdoc/bbs/latest/)** minden kiadási taggel újraépül belőle.

# Amit kapsz

- **Három réteg egy hívásban** — `Flow` a soronkénti párbeszédekhez (belépés, varázslók), `Application` egy asztalhoz ablakokkal, menükkel és widgetekkel, és a PETSCII `Screen` a `Selector` kurzoros menüivel egy soralapú boardhoz, Commodore 64-en vagy modern terminálon; a hívás szabadon jár köztük.
- **Turbo Vision telnetvonalon** — mozgatható, méretezhető, nagyítható és váltható ablakok, menüsor gyorsbillentyűkkel, státuszsor, űrlapok, master-detail böngészők, chat-folyamok, öt színtéma és Markdown-renderelő, mind kattintható egérrel.
- **Commodore 64-es arc** — a `session.petscii!` 40×25-ös PETSCII-re állítja a vonalat, a kód közben ugyanúgy UTF-8-at és ANSI-t ír; a `BBS::Terminal` minden hívótól megkérdezi, milyen terminálról hív, és a modern vagy a C64-es arcot indítja.
- **Doorok és gatewayek** — szimulált gépek (`FakeOS`), flow-k és bármilyen program doorként, telnet-gatewayek, amik egy másik boardnak adják tovább a vonalat (egy C64 akár ASCII-boardot is felhívhat), ZMODEM- és XMODEM-letöltés.
- **AI-karakterek** — egy YAML-fájlban leírt persona, ami bármilyen OpenAI-kompatibilis modellen beszél, szavanként streamelve, és beégetett válaszokkal, ha a modell nem elérhető.
- **Egy tartalmas board építőelemei** — SQLite-fájl migrációkkal, korlátok közé szorított HTTP, cache, rate limit, ütemezett Wikipédia-kliens, egységes naplóformátum és újrapróbáló háttérmunka.
- **Az igazi vonalra készült** — telnet-negotiation, ablakméret, SGR-egér, tétlenségi, hívásszám- és címenkénti korlátok, vezérlőkaraktermentes bemenet, csak nyilvános címet hívó gateway, és egy door összeomlása sosem bontja a hívást.

# A kézikönyv

| Oldal | Mit találsz ott |
|---|---|
| [Minimális projekt](https://wiki.teletypegames.org/hu/engines/rubbs/minimal-project) | A legkisebb teljes projekt: kérdés-válasz board négy fájlban, Dockerfile, compose, futtatás Windowson, Linuxon és macOS-en |
| [Első lépések](https://wiki.teletypegames.org/hu/engines/rubbs/getting-started) | Telepítés, az első board, a `BBS.configure` minden beállítása, a szerver, egy valódi board projektszerkezete, Docker |
| [Flow](https://wiki.teletypegames.org/hu/engines/rubbs/flow) | A soronkénti párbeszéd DSL-je lépésről lépésre: ask, say, menu, confirm, gate, persist, call, screenek, bannerek, al-flow-k |
| [Application](https://wiki.teletypegames.org/hu/engines/rubbs/application) | Az asztal: az application DSL, menüsor, státuszsor, helperek és service-ek, a futási ciklus, események és fókusz |
| [Window-k](https://wiki.teletypegames.org/hu/engines/rubbs/windows) | Window-k és a window DSL; Info, Form, MasterDetail, Stream; dialógusok; nagyítás, mozgatás, méretezés, váltás |
| [Widgetek](https://wiki.teletypegames.org/hu/engines/rubbs/widgets) | Minden widget és konténer, jelenetek, és saját widget írása |
| [Rajzolás](https://wiki.teletypegames.org/hu/engines/rubbs/drawing) | Témák és színszerepeik, a paletta, a FrameBuffer, a renderelő, Markdown |
| [Doorok](https://wiki.teletypegames.org/hu/engines/rubbs/doors) | Doorok, szimulált gépek (`FakeOS`), telnet-gatewayek (`Gateway`), ZMODEM és XMODEM |
| [AI-karakterek](https://wiki.teletypegames.org/hu/engines/rubbs/ai) | Personák, a modellkliens, chat előzményekkel és tartalékválaszokkal, az írógép |
| [Commodore 64](https://wiki.teletypegames.org/hu/engines/rubbs/commodore) | PETSCII, a terminálkérdés, a PETSCII `Screen` és a `Selector`, és egy board modern és C64-es arccal |
| [Rajzok és grafikus képernyők](https://wiki.teletypegames.org/hu/engines/rubbs/art) | Rajzok YAML-ben mindkét arcra, a C64 grafikus vászna és kurzoros menü rajta, élő hotspotos jelenetek, évszak-rétegek, `art-preview` |
| [Telnet és a store](https://wiki.teletypegames.org/hu/engines/rubbs/telnet-and-store) | A session: negotiation, billentyűk, egér, sorok, korlátok; a `BBS::Store` SQLite-on |
| [Adat és hálózat](https://wiki.teletypegames.org/hu/engines/rubbs/data-and-network) | `BBS.log`, `BBS.background`, `BBS::SQLite`, `HTTP`, `Cache`, `RateLimit`, `Wikipedia`, `Text`, `Address`, és hogy hol kezeljük a hibát |
| [Változásnapló](https://wiki.teletypegames.org/hu/engines/rubbs/changelog) | Mit hozott az egyes verzió, és mit vett ki az 1.0 |

# Az első board

A gem neve `bbs`. Figyel egy TCP-porton, minden hívóval lefolytatja a telnet-negotiationt, mindegyiknek ad egy `Session`-t, és futtatja a beállított flow-t:

```ruby
require 'bbs'

BBS.configure do |c|
  c.log_tag = 'my-bbs'
  c.flow = BBS::Flow.define do
    big_banner 'My BBS'
    ask :name, prompt: 'Your name'
    say 'Welcome!', style: :success
  end
end

BBS.start
```

`ruby bbs.rb`, aztán `telnet localhost 2323`. Innen az [Első lépések](https://wiki.teletypegames.org/hu/engines/rubbs/getting-started) épít belőle ablakos, C64-es arcú boardot.

# A három réteg

| Réteg | Mi ez | Mire jó |
|---|---|---|
| `BBS::Flow` | soronkénti párbeszéd, lépésenként deklarálva | belépés, regisztráció, varázslók, a hívás ragasztója |
| `BBS::Application` | asztal: menüsor, window-k, widgetek, egér | egy egész board modern terminálon |
| `BBS::Petscii::Screen` + `BBS::Selector` | soralapú képernyő 40×25-ben (vagy a modern terminál méretében): címsor, lapozás, kurzoros menük, promptok, szerkesztő | egy board C64-es arca, vagy egy egész soralapú board |

A hívás többnyire egy flow-val indul (a terminálkérdés, a belépés), és egy applicationben vagy egy PETSCII-képernyőn folytatódik; a doorok és gatewayek kilépnek belőle, majd visszatérnek. Az 1.0 előtt volt egy negyedik réteg is, a `BBS::TUI`, egyetlen teljes képernyős oldalakhoz; egyik board sem használta, és az 1.0 kivette (lásd a [Változásnaplót](https://wiki.teletypegames.org/hu/engines/rubbs/changelog)).

```mermaid
flowchart LR
  S[TCP-szerver] --> SE[Session: telnet, ablakméret]
  SE --> F[Flow]
  F --> A[Application]
  F --> P[PETSCII Screen + Selector]
  A <--> D[Door: FakeOS, Flow, program]
  A <--> G[Gateway: egy másik board]
  P <--> G
  F --> F2[Al-flow]
```

# Kik használják

| Board | Mit ad neki a rubbs |
|---|---|
| [Teletype BBS](https://wiki.teletypegames.org/hu/services/teletype-bbs) `:2323` | az egész asztalt és a PETSCII-arcát; a SERMO és a Chat of Ra AI-karakteres FakeOS-door, a C64 és a Plus/4 door FakeOS-gép |
| [Impostor BBS](https://wiki.teletypegames.org/hu/services/impostor-bbs) `:2324` | egy flow saját screenekkel, gemben, így egy másik board doorként is futtathatja |
| [TTG Wiki BBS](https://wiki.teletypegames.org/hu/services/wiki-bbs) `:2325` | kétpaneles wikiböngésző a wiki JSON API-ja fölött |
| [Alexandria BBS](https://wiki.teletypegames.org/hu/services/alexandria-bbs) `:2326` | a Wikipédia (`BBS::Wikipedia`) master-detail window-kban, és PETSCII-ben |
| [Feedia BBS](https://wiki.teletypegames.org/hu/services/feedia-bbs) `:2327` | RSS-olvasó űrlapokkal az adminoknak, és PETSCII-ben |
| [TTG Blog BBS](https://wiki.teletypegames.org/hu/services/ttg-blog-bbs) `:2328` | blog `BBS::SQLite`-on, soralapúan mindkét arcon |
| [WarpEngine BBS](https://wiki.teletypegames.org/hu/services/warp-engine-bbs) `:2329` | a C64- és Plus/4-polc, ZMODEM- és XMODEM-letöltéssel |
| [Scriptorium BBS](https://wiki.teletypegames.org/hu/services/scriptorium-bbs) `:2330` | a Project Gutenberg könyvei `BBS::HTTP`-n és `BBS::Cache`-en át |
| [Commodex BBS](https://wiki.teletypegames.org/hu/services/commodex-bbs) `:2331` | C64-es játékok a Wikidatából és a Wikipédiából, a tippek `BBS::RateLimit`-tel korlátozva |
| [Pixelia BBS](https://wiki.teletypegames.org/hu/services/pixelia-bbs) `:2332` | ANSI- és PETSCII-galéria és egy közös vászon (`Petscii::Canvas`, `Art`) |
| [TTG Gate BBS](https://wiki.teletypegames.org/hu/services/ttg-gate-bbs) | egy port az egész hálózathoz és a világ boardjainak telefonkönyve, mind `BBS::Gateway`-jel (`translate:`, ha egy C64 ASCII-boardot hív) |

# Egy soralapú board építőkövei

A 0.29.0 óta a rubbs-ban van, amit eddig minden soralapú boardunk maga írt meg. Mind benne van az [API-referenciában](https://wiki.teletypegames.org/rdoc/bbs/latest/); a [Commodore 64](https://wiki.teletypegames.org/hu/engines/rubbs/commodore) oldal munka közben mutatja őket.

| Osztály | Mi ez |
|---|---|
| `BBS::Petscii::Screen` | egy C64-es hívás 40×25-ös képernyője: `title` (fordított sáv), `say(text, color:)`, `rule(color:)`, `page` (oldalanként 20 sor, RETURN-re a következő, kérésre `2/5` oldalszám), `pick` (számozott `BBS::Selector`-lista), `menu`, `actions` (egy sor billentyű), `choose` (egy billentyű néhány közül), `ask` (`BBS::Field`), `edit` (`BBS::Editor`, `nil`, ha a hívó kilép), `pause`, `key`, `bell`, `plain`. A board saját metódusaihoz leszármaztatható; a `cols:`/`rows:` megadásával modern terminálon is használható |
| `BBS::Selector` | az egyetlen kurzoros menü: számozott, a kurzorbillentyűk és a számjegyek kijelölnek, a RETURN választ; a Flow `menu`-je, a Screen minden menüje és a vászon menüje is Selector, a színeit a `Selector::COLORS` adja |
| `BBS::Petscii::Colors` | a `BBS::Ansi` paletta C64-es nevei: `WH YE CY LG GR DG LB BL GN RD PU OR`, valamint `RV`/`RO` a fordított mód be/ki. A board névtér-moduljában a `Colors.install(self)` minden benne fészkelt osztálynak megadja a puszta neveket |
| `BBS::BlockFont` | a logók 3×5-ös blokkbetűje (A–Z, 0–9, szóköz és néhány jel): `rows`, `half_blocks` a modern archoz, `petscii` (fordított szóközök, soronként egy szín) a C64-hez; a `NARROW_I` és a `WIDE_W` a betűk másik alakja |
| `BBS::Goodbye` | a hívás utolsó képernyője: `modern` („Thanks for calling …”, NO CARRIER) és `petscii` (fordított sáv, majd kis szünetekkel `+++`, `ATH0`, NO CARRIER) |
| `BBS::DiscordWebhook` | Discord-webhookra posztol háttérszálon, mentionök nélkül, továbbítási korláttal (alapból 20 poszt 10 percenként), időkorláttal, a hibákat a board log tagje alatt naplózza; a `require 'bbs/discord_webhook'` önmagában tölti be, így egy board domainje is használhatja |

```ruby
module UI
  module Petscii
    BBS::Petscii::Colors.install(self)

    class Screen < BBS::Petscii::Screen
    end

    LOGO = BBS::BlockFont.petscii('WARP', colors: [LB, LB, CY, CY, WH], indent: 10)
  end
end

screen = UI::Petscii::Screen.new(runner.session)
book   = screen.pick('the shelves', books, &:title)
screen.say('Downloading…', color: YE)
BBS::Goodbye.petscii(screen, title: 'warpengine bbs', color: LB)
```

# Frissítés 0.x-ről

Az 1.0 a nagytakarítás kiadása: mindenre egyetlen út. Amit egy boardnak általában át kell írnia:

- `screen.say(text, GN)` → `screen.say(text, color: GN)`, `screen.rule(DG)` → `screen.rule(color: DG)`;
- `screen.editor(max, title)` → `screen.edit(title: title, max: max).to_s`;
- `Petscii::Screen::MENU` → `BBS::Selector::COLORS` (vagy semmi: ez az alapértelmezés);
- privát címen futó szomszéd boardra mutató gateway → `public_only: false`;
- kikerült a `BBS::TUI`, a `BBS::Color`, a `ProgressBar`, `Spinner`, `HBox`, `VBox`, `Panel`, `AnsiArt`, a Flow-lépések többsége a `call` mellől, és a színekről elnevezett Flow-stílusok.

A [Változásnapló](https://wiki.teletypegames.org/hu/engines/rubbs/changelog) röviden felsorolja mindezt; a repó `UPGRADING.md`-je minden eltávolított vagy átnevezett API-t megad a helyettesítőjével és egy greppel, amely megtalálja.

# Telepítés

```ruby
gem 'bbs', git: 'https://git.teletypegames.org/engines/rubbs.git', tag: 'v1.0.0'
```

Ruby 3.2 vagy újabb (a socket időkorlátjaihoz `IO#timeout=` kell), a `sqlite3` gemmel. A boardok taggel vagy git-revízióval rögzítik a rubbs-t a `Gemfile.lock`-jukban.

# Forrásszerkezet

| Fájl | Feladat |
|---|---|
| `lib/bbs.rb` | a nyilvános felület: `BBS.configure`, `BBS.config`, `BBS.start`, `BBS.log`, `BBS.background` |
| `bbs/server.rb`, `bbs/session.rb`, `bbs/telnet.rb`, `bbs/telnet/` | fogadó ciklus, hívónként egy szál; telnet (az egyetlen IAC-`Parser`), billentyűk, egér, sorok |
| `bbs/petscii.rb`, `bbs/petscii/`, `bbs/terminal.rb` | a C64-es vonal, az egyetlen jeltáblája és kódolója, a Screen, a vászon; a modern-vagy-C64 kérdés |
| `bbs/flow.rb`, `bbs/flow/`, `bbs/flow_runner.rb`, `bbs/banner.rb` | a Flow DSL, a lépésobjektumai és a futtatójuk; bannerek |
| `bbs/selector.rb`, `bbs/selector/` | a kurzoros menü |
| `bbs/application.rb`, `bbs/menu.rb`, `bbs/statusbar.rb`, `bbs/focus_manager.rb`, `bbs/event.rb` | az Application-réteg |
| `bbs/widget.rb`, `bbs/container.rb`, `bbs/widgets/` | widgetek, fájlonként egy |
| `bbs/window.rb`, `bbs/window_spec.rb`, `bbs/windows/*`, `bbs/dialogs.rb` | window-k, a window DSL, a kész window-k, dialógusok |
| `bbs/ansi.rb`, `bbs/theme.rb`, `bbs/theme/presets.rb`, `bbs/frame_buffer.rb`, `bbs/renderer.rb`, `bbs/markdown.rb` | a paletta és a rajzolás |
| `bbs/art.rb`, `bbs/season.rb`, `bin/art-preview` | rajzok mindkét arcra |
| `bbs/door.rb`, `bbs/fake_os.rb`, `bbs/gateway.rb`, `bbs/gateway/`, `bbs/zmodem.rb`, `bbs/xmodem.rb` | doorok, szimulált gépek, gatewayek, letöltés |
| `bbs/ai.rb` | AI-karakterek |
| `bbs/block_font.rb`, `bbs/goodbye.rb`, `bbs/discord_webhook.rb` | logóbetű, búcsú, Discord-webhook posztok |
| `bbs/sqlite.rb`, `bbs/store.rb`, `bbs/store/` | SQLite migrációkkal; a rá épülő upsert-store |
| `bbs/http.rb`, `bbs/cache.rb`, `bbs/rate_limit.rb`, `bbs/wikipedia.rb`, `bbs/background.rb`, `bbs/text.rb`, `bbs/address.rb` | egy tartalmas board közös építőelemei |

# Repó

[engines/rubbs](https://git.teletypegames.org/engines/rubbs) — MIT-licenc. A `README.md`-je az egyfájlos fejlesztői referencia, az `UPGRADING.md` az út 0.x-ről 1.0-ra; ez a kézikönyv a vezetett változat.

'; var prevLevel = 2; for (var i = 0; i < headings.length; i++) { var h = headings\[i\]; var text = h.textContent.trim(); var slug = text.toLowerCase() .replace(/\[áàâä\]/g,'a').replace(/\[éèêë\]/g,'e').replace(/\[íìîï\]/g,'i') .replace(/\[óòôöő\]/g,'o').replace(/\[úùûüű\]/g,'u') .replace(/\[^a-z0-9\]+/g, '-').replace(/^-|-$/g, ''); if (!slug) slug = 'heading-' + i; if (used\[slug\]) { slug += '-' + i; } used\[slug\] = true; h.id = slug; var level = parseInt(h.tagName.charAt(1)); var cls = level > 2 ? ' class="toc-child"' : ''; html += '- [' + text + '](#'%20+%20slug%20+%20')
'; } html += '
'; toc.innerHTML = html; // Scroll-spy: highlight current heading var links = toc.querySelectorAll('a'); var ids = \[\]; for (var j = 0; j < links.length; j++) ids.push(links\[j\].getAttribute('href').slice(1)); function updateActive() { var current = ''; for (var k = 0; k < ids.length; k++) { var el = document.getElementById(ids\[k\]); if (el && el.getBoundingClientRect().top <= 80) current = ids\[k\]; } for (var m = 0; m < links.length; m++) { links\[m\].parentNode.classList.toggle('active', links\[m\].getAttribute('href') === '#' + current); } } window.addEventListener('scroll', updateActive, { passive: true }); updateActive(); })();

---

## Navigation

- Parent: [Motorok](https://wiki.teletypegames.org/hu/engines.md)
- Previous: [Inkwell](https://wiki.teletypegames.org/hu/engines/inkwell.md)
- Next: [WarpEngine](https://wiki.teletypegames.org/hu/engines/warp-engine.md)
- Children:
  - [AI-karakterek](https://wiki.teletypegames.org/hu/engines/rubbs/ai.md)
  - [Application](https://wiki.teletypegames.org/hu/engines/rubbs/application.md)
  - [Rajzok és grafikus képernyők](https://wiki.teletypegames.org/hu/engines/rubbs/art.md)
  - [Változásnapló](https://wiki.teletypegames.org/hu/engines/rubbs/changelog.md)
  - [Commodore 64](https://wiki.teletypegames.org/hu/engines/rubbs/commodore.md)
  - [Adat és hálózat](https://wiki.teletypegames.org/hu/engines/rubbs/data-and-network.md)
  - [Doorok](https://wiki.teletypegames.org/hu/engines/rubbs/doors.md)
  - [Rajzolás és témák](https://wiki.teletypegames.org/hu/engines/rubbs/drawing.md)
  - [Flow](https://wiki.teletypegames.org/hu/engines/rubbs/flow.md)
  - [Első lépések](https://wiki.teletypegames.org/hu/engines/rubbs/getting-started.md)
  - [Minimális projekt](https://wiki.teletypegames.org/hu/engines/rubbs/minimal-project.md)
  - [Telnet, session és store](https://wiki.teletypegames.org/hu/engines/rubbs/telnet-and-store.md)
  - [Widgetek](https://wiki.teletypegames.org/hu/engines/rubbs/widgets.md)
  - [Window-k](https://wiki.teletypegames.org/hu/engines/rubbs/windows.md)
