bleeter/README.md

212 lines
6.9 KiB
Markdown
Raw Normal View History

Soziales Netz im Spiel: Feed, Werbung, Markt, Kalender und Gewerbe Jeder Spieler waehlt sich ein Handle mit @, Unternehmen und Behoerden bekommen eigene Profile, fuer die sie Mitarbeiter freigeben. Verwaltet wird ueber dieselbe Anmeldung wie das Webhosting: wer am IC-Computer als Anbieter angemeldet ist, richtet Unternehmensprofile ein. Damit gibt es genau eine Stelle, an der Verwaltungsrechte haengen - ein zweites Rechtesystem daneben waere eine zweite Stelle, an der man jemanden zu entziehen vergisst. Bewusst getrennt: wer fuer ein Unternehmen schreiben darf, kann sich nicht selbst zum Verwalter machen. Behoben gegenueber dem Ausgangsstand: - Die Resource startete nicht. Eine harte Abhaengigkeit zeigte auf eine Resource, die es nicht gibt - das verhindert den Start vollstaendig. - Das Schema war gegenueber dem Code stehengeblieben: eine Tabelle fehlte ganz, sechs Spalten fehlten. Jede Registrierung eines Handles scheiterte deshalb mit einem SQL-Fehler. Zwei Migrationen ziehen das nach. - Die Identitaet kommt jetzt von ESX statt von einem Charaktersystem, das hier nicht laeuft. Ohne das findet das Mailsystem die Postfaecher nicht. - Das Fenster hatte keinen Schliessknopf, nur ESC. Im Computerfenster ist diese Taste aber schon vergeben. - Bilder laden mit referrerpolicy="no-referrer": Bilderdienste sperren Hotlinks anhand der Herkunft, und die eines NUI kennen sie nicht. - Der Schluessel fuer den Bilder-Upload steht nicht mehr im Code, sondern in der server.cfg (set bleeter_imgbb_key). Er gehoert nicht in ein oeffentlich einsehbares Repository. Neu: Unternehmensprofile und Mitarbeiterfreigabe, ueber Netzwerkereignisse und Konsolenbefehle. Dazu eine Oberflaeche im IC-Computer, die dieselbe Gestaltung benutzt - die Stildatei wird dafuer mechanisch gekapselt, statt sie nachzubauen. Enthaelt README.md mit Einrichtung, Rechten und den Fallstricken.
2026-08-09 12:00:48 +00:00
# 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.
Bedient wird es am **IC-Computer** (`pc-live`) — dort sitzt man an einem Gerät,
statt mitten auf der Straße ein Fenster aufzuklappen.
Soziales Netz im Spiel: Feed, Werbung, Markt, Kalender und Gewerbe Jeder Spieler waehlt sich ein Handle mit @, Unternehmen und Behoerden bekommen eigene Profile, fuer die sie Mitarbeiter freigeben. Verwaltet wird ueber dieselbe Anmeldung wie das Webhosting: wer am IC-Computer als Anbieter angemeldet ist, richtet Unternehmensprofile ein. Damit gibt es genau eine Stelle, an der Verwaltungsrechte haengen - ein zweites Rechtesystem daneben waere eine zweite Stelle, an der man jemanden zu entziehen vergisst. Bewusst getrennt: wer fuer ein Unternehmen schreiben darf, kann sich nicht selbst zum Verwalter machen. Behoben gegenueber dem Ausgangsstand: - Die Resource startete nicht. Eine harte Abhaengigkeit zeigte auf eine Resource, die es nicht gibt - das verhindert den Start vollstaendig. - Das Schema war gegenueber dem Code stehengeblieben: eine Tabelle fehlte ganz, sechs Spalten fehlten. Jede Registrierung eines Handles scheiterte deshalb mit einem SQL-Fehler. Zwei Migrationen ziehen das nach. - Die Identitaet kommt jetzt von ESX statt von einem Charaktersystem, das hier nicht laeuft. Ohne das findet das Mailsystem die Postfaecher nicht. - Das Fenster hatte keinen Schliessknopf, nur ESC. Im Computerfenster ist diese Taste aber schon vergeben. - Bilder laden mit referrerpolicy="no-referrer": Bilderdienste sperren Hotlinks anhand der Herkunft, und die eines NUI kennen sie nicht. - Der Schluessel fuer den Bilder-Upload steht nicht mehr im Code, sondern in der server.cfg (set bleeter_imgbb_key). Er gehoert nicht in ein oeffentlich einsehbares Repository. Neu: Unternehmensprofile und Mitarbeiterfreigabe, ueber Netzwerkereignisse und Konsolenbefehle. Dazu eine Oberflaeche im IC-Computer, die dieselbe Gestaltung benutzt - die Stildatei wird dafuer mechanisch gekapselt, statt sie nachzubauen. Enthaelt README.md mit Einrichtung, Rechten und den Fallstricken.
2026-08-09 12:00:48 +00:00
Die Resource bringt ihre eigene Oberfläche mit, die sich über den Export
`OpenBleeter` öffnen lässt — etwa aus einem Telefon heraus. Einen Chatbefehl
gibt es bewusst nicht.
Soziales Netz im Spiel: Feed, Werbung, Markt, Kalender und Gewerbe Jeder Spieler waehlt sich ein Handle mit @, Unternehmen und Behoerden bekommen eigene Profile, fuer die sie Mitarbeiter freigeben. Verwaltet wird ueber dieselbe Anmeldung wie das Webhosting: wer am IC-Computer als Anbieter angemeldet ist, richtet Unternehmensprofile ein. Damit gibt es genau eine Stelle, an der Verwaltungsrechte haengen - ein zweites Rechtesystem daneben waere eine zweite Stelle, an der man jemanden zu entziehen vergisst. Bewusst getrennt: wer fuer ein Unternehmen schreiben darf, kann sich nicht selbst zum Verwalter machen. Behoben gegenueber dem Ausgangsstand: - Die Resource startete nicht. Eine harte Abhaengigkeit zeigte auf eine Resource, die es nicht gibt - das verhindert den Start vollstaendig. - Das Schema war gegenueber dem Code stehengeblieben: eine Tabelle fehlte ganz, sechs Spalten fehlten. Jede Registrierung eines Handles scheiterte deshalb mit einem SQL-Fehler. Zwei Migrationen ziehen das nach. - Die Identitaet kommt jetzt von ESX statt von einem Charaktersystem, das hier nicht laeuft. Ohne das findet das Mailsystem die Postfaecher nicht. - Das Fenster hatte keinen Schliessknopf, nur ESC. Im Computerfenster ist diese Taste aber schon vergeben. - Bilder laden mit referrerpolicy="no-referrer": Bilderdienste sperren Hotlinks anhand der Herkunft, und die eines NUI kennen sie nicht. - Der Schluessel fuer den Bilder-Upload steht nicht mehr im Code, sondern in der server.cfg (set bleeter_imgbb_key). Er gehoert nicht in ein oeffentlich einsehbares Repository. Neu: Unternehmensprofile und Mitarbeiterfreigabe, ueber Netzwerkereignisse und Konsolenbefehle. Dazu eine Oberflaeche im IC-Computer, die dieselbe Gestaltung benutzt - die Stildatei wird dafuer mechanisch gekapselt, statt sie nachzubauen. Enthaelt README.md mit Einrichtung, Rechten und den Fallstricken.
2026-08-09 12:00:48 +00:00
---
## 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 `<head>`, 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.
### Konsolenbefehle
Soziales Netz im Spiel: Feed, Werbung, Markt, Kalender und Gewerbe Jeder Spieler waehlt sich ein Handle mit @, Unternehmen und Behoerden bekommen eigene Profile, fuer die sie Mitarbeiter freigeben. Verwaltet wird ueber dieselbe Anmeldung wie das Webhosting: wer am IC-Computer als Anbieter angemeldet ist, richtet Unternehmensprofile ein. Damit gibt es genau eine Stelle, an der Verwaltungsrechte haengen - ein zweites Rechtesystem daneben waere eine zweite Stelle, an der man jemanden zu entziehen vergisst. Bewusst getrennt: wer fuer ein Unternehmen schreiben darf, kann sich nicht selbst zum Verwalter machen. Behoben gegenueber dem Ausgangsstand: - Die Resource startete nicht. Eine harte Abhaengigkeit zeigte auf eine Resource, die es nicht gibt - das verhindert den Start vollstaendig. - Das Schema war gegenueber dem Code stehengeblieben: eine Tabelle fehlte ganz, sechs Spalten fehlten. Jede Registrierung eines Handles scheiterte deshalb mit einem SQL-Fehler. Zwei Migrationen ziehen das nach. - Die Identitaet kommt jetzt von ESX statt von einem Charaktersystem, das hier nicht laeuft. Ohne das findet das Mailsystem die Postfaecher nicht. - Das Fenster hatte keinen Schliessknopf, nur ESC. Im Computerfenster ist diese Taste aber schon vergeben. - Bilder laden mit referrerpolicy="no-referrer": Bilderdienste sperren Hotlinks anhand der Herkunft, und die eines NUI kennen sie nicht. - Der Schluessel fuer den Bilder-Upload steht nicht mehr im Code, sondern in der server.cfg (set bleeter_imgbb_key). Er gehoert nicht in ein oeffentlich einsehbares Repository. Neu: Unternehmensprofile und Mitarbeiterfreigabe, ueber Netzwerkereignisse und Konsolenbefehle. Dazu eine Oberflaeche im IC-Computer, die dieselbe Gestaltung benutzt - die Stildatei wird dafuer mechanisch gekapselt, statt sie nachzubauen. Enthaelt README.md mit Einrichtung, Rechten und den Fallstricken.
2026-08-09 12:00:48 +00:00
| Befehl | |
|---|---|
| `bleeterprofile` | alle Unternehmensprofile auflisten |
| `bleeterprofil <handle> <art> [server-id]` | Profil anlegen; Arten: `small_business`, `company`, `authority`, `lifeinvader` |
| `bleeterfrei <handle> <server-id> [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 `<img>` 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.