# bleeter — soziales Netz im Spiel Feed, Werbeanzeigen, Marktplatz, Veranstaltungskalender und Gewerbeverzeichnis. Jeder Spieler wählt sich ein Handle mit `@`, Unternehmen und Behörden bekommen eigene Profile, für die sie Mitarbeiter freigeben. Zwei Oberflächen, dieselben Daten: - **`/bleeter`** — eigenes Fenster im Tablet-Format - **App im IC-Computer** (`pc-live`) — dieselbe Gestaltung, in ein Fenster gesetzt --- ## Installation ### 1. Ordner ``` resources/[haleoe]/bleeter/ ``` ### 2. Datenbank Reihenfolge einhalten: ```bash mysql -u BENUTZER -p DATENBANK < sql/install.sql mysql -u BENUTZER -p DATENBANK < sql/migration_reservierte_handles.sql mysql -u BENUTZER -p DATENBANK < sql/migration_fehlende_spalten.sql ``` | Datei | | |---|---| | `install.sql` | Konten, Profile, Mitglieder, Beiträge, Kommentare, Medien, Markt, Termine | | `migration_reservierte_handles.sql` | Sperrliste für Handles – **fehlte im Grundschema**, ohne sie scheitert jede Registrierung | | `migration_fehlende_spalten.sql` | sechs Spalten, die der Code schreibt, die aber nicht angelegt wurden | Alle wiederholt ausführbar. ### 3. server.cfg ``` ensure oxmysql ensure ic-mail # optional, liefert die Mailadressen ensure bleeter ``` ### 4. Bilder hochladen einrichten — **wird gebraucht** Ohne diesen Schritt lässt sich **kein Bild hochladen**. Beiträge, Profilbilder und Marktanzeigen bleiben dann auf verlinkte Adressen angewiesen — und die sind unzuverlässig, weil Bilderdienste das Verlinken zeitweise sperren. Bilder gehen zu **imgbb.com**. Der Schlüssel ist kostenlos: 1. Konto anlegen auf https://imgbb.com 2. Schlüssel holen unter https://api.imgbb.com 3. In die **`server.cfg`** eintragen, **vor** dem `ensure`: ``` set bleeter_imgbb_key "DEIN_SCHLUESSEL" ensure bleeter ``` `set` statt `setr` — so bleibt der Schlüssel auf dem Server und geht nicht an die Clients. > **Warum nicht in die `config.lua`?** > Die liegt in der Versionsverwaltung. Ein Schlüssel im Code landet damit in > jeder Kopie und in der gesamten Historie. `Config.Media.imgbbApiKey` gibt es > weiterhin als Rückfallebene — sinnvoll für eine Testumgebung, nicht für den > Betrieb. Fehlt der Schlüssel, meldet der Upload `missing_imgbb_key`. Weitere Stellschrauben in `shared/config.lua`: ```lua Config.Media = { provider = 'imgbb', maxBytes = 2 * 1024 * 1024, -- 2 MB allowedExtensions = { 'jpg', 'jpeg', 'png' }, allowExternalUrls = true, -- Verlinken zusätzlich erlauben requireHttps = true, } ``` ### 5. App im IC-Computer (optional) Diese Dateien gehören nach `pc-live`: | Datei | Ziel | |---|---| | `client/bleeter.lua` | `pc-live/client/` | | `nui/js/apps/bleeter.js` | `pc-live/nui/js/apps/` | | `nui/js/apps/bleeteradmin.js` | `pc-live/nui/js/apps/` | | `nui/css/bleeter-embedded.css` | `pc-live/nui/css/` | Dazu in pc-live eintragen: beide Skripte in `fxmanifest.lua` und `nui/index.html`, die Stildatei in `fxmanifest.lua` und im ``, die App-Einträge in `desktop.js` (`APP_META` und die `case`-Zweige `bleeter_data`, `bleeter_notify`, `bleeter_uploaded`) sowie `AppRegistry.Register` in `server/apps.lua`. **Zur Stildatei:** `nui/css/bleeter-embedded.css` wird **erzeugt**, nicht von Hand gepflegt. Sie ist die gekapselte Fassung von `html/style.css` — jeder Selektor auf `.bl-root` begrenzt. Ohne diese Kapselung würden Bleeters Regeln für `*`, `html` und `body` den gesamten Computer einfärben. Neu erzeugen: ```bash python3 pc-live/nui/css/erzeuge-bleeter-css.py ``` Vom Wurzelelement werden dabei nur Farben, Schrift und Variablen übernommen — **kein Layout**. Im Original ist `.bleeter-root` ein bildschirmfüllendes Overlay; übernähme man das, läge die App über dem ganzen Computer, auch über der Titelleiste. --- ## Die drei Ebenen | | wer | darf | |---|---|---| | **Anbieter** | am Computer als `admin@liveinvader.ls` angemeldet | Unternehmensprofile einrichten, verwalten, moderieren | | **Unternehmen** | wer im Profil `can_manage_members` hat | eigene Leute für das Profil freigeben | | **Spieler** | jeder | eigenes Handle mit `@` wählen | Die Anbieterrechte kommen aus der Anmeldung in **`ic-web`** — genau eine Stelle für alle Verwaltungsrechte. Ein zweites Rechtesystem daneben wäre eine zweite Stelle, an der man jemanden zu entziehen vergisst. Die Tabelle `bleeter_lifeinvader_permissions` bleibt als zweiter Weg bestehen — der Notausgang, falls `ic-web` nicht läuft. Bewusst getrennt: Wer für ein Unternehmen **schreiben** darf, kann sich nicht selbst zum **Verwalter** machen. ### Ohne Computer: Konsolenbefehle | Befehl | | |---|---| | `bleeterprofile` | alle Unternehmensprofile auflisten | | `bleeterprofil [server-id]` | Profil anlegen; Arten: `small_business`, `company`, `authority`, `lifeinvader` | | `bleeterfrei [post\|edit\|manage\|weg]` | jemanden freigeben oder entfernen | Im Spiel nur als Anbieter, in der Serverkonsole immer. --- ## Handles Kleinbuchstaben, Ziffern, Punkt, Unterstrich, Bindestrich; 2 bis 32 Zeichen. `bleeter_reserved_handles` verhindert, dass Spieler sich Namen wie `lspd` oder `weazel` greifen. **Der Anbieter darf sie sehr wohl vergeben** — dafür ist er da. Die Sperrliste gilt deshalb nur bei der Selbstregistrierung, nicht in der Verwaltung. --- ## Voraussetzungen | | | |---|---| | `oxmysql` | Datenbankzugriff | | `ic-mail` | Mailadresse als Ausweis bei der Registrierung | | `es_extended` | Charaktername und Identifier | | `ic-web` | optional – liefert die Anbieteranmeldung | | `pc-live` | optional – für die App im Computer | Läuft ohne Charaktersystem: fehlt eines, wird der Lizenz-Identifier als Charakterkennung benutzt. --- ## Web-Backend Unter `web-backend/` liegt ein Node-Dienst, der dieselben Daten über HTTP bereitstellt — für eine Webseite außerhalb des Spiels. ```bash cd web-backend npm install cp .env.example .env # ausfüllen node server.js ``` Die `.env` enthält Datenbankzugang, JWT-Geheimnis und API-Schlüssel und ist deshalb von der Versionsverwaltung ausgenommen. --- ## Bekannte Fallstricke **Bilder aus fremden Quellen bleiben leer.** Bilderdienste sperren das Verlinken zeitweise. Alle `` laden mit `referrerpolicy="no-referrer"`, was bei referer-basierten Sperren hilft — gegen eine IP-Sperre nicht. Der verlässliche Weg ist der Upload. **Nicht die Adresse der Seite kopieren, sondern die des Bildes.** `imgur.com/a/…` ist ein Album, `imgur.com/…` eine Bildseite. Die App rechnet Bildseiten selbst um und holt die Adresse auch aus BBCode-, HTML- und Markdown-Schnipseln heraus. **Der Fokus gehört dem Computer.** `SetNuiFocus` gilt global für den Client. Als App im Computer greift Bleeter deshalb nicht danach — sonst sperren sich zwei Resources gegenseitig die Maus aus.