Sign inSign up

otherscantbeat/pb

By otherscantbeat

•Updated 7 minutes ago

OCB Steam ProfilBild Bot - Automated profile picture generation

Image
Message queues
0

3.3K

otherscantbeat/pb repository overview

⁠OCB Profilbild Creator

Automatisierter Profilbild-Erstellungs-Bot für die OCB Steam-Community – geschrieben in Rust, mit nativer Steam-Anbindung über steam-cm-protocol⁠.

⁠✨ Features

  • 🤖 Steam Bot – nativer Steam-CM-Client (WebSocket), kein Node.js / steam-user mehr
  • 🔐 Login – Refresh-Token (wird gespeichert), Passwort + Steam Guard oder QR-Login
  • 🎨 Profilbild-Generierung – Rang-Hintergrund + automatisch skalierter Name, komplett im Speicher
  • 📤 Auto-Upload – Upload zu Zipline/OCB CDN; ohne Upload wird das Bild direkt im Steam-Chat gesendet
  • ⚙️ YAML-Konfiguration – Modi, Ränge, Texte, Canvas
  • 🩺 Health Checks – /health, /ready, /metrics (Prometheus)
  • ✅ Getestet – Unit- & Integrationstests (cargo test)

⁠📁 Projekt-Struktur

├── config/pb-creator.yml     # YAML-Konfiguration (editierbar)
├── public/                   # Hintergrundbilder (*.png) und Schriftart (play.ttf)
├── src/
│   ├── main.rs               # Bot-Einstiegspunkt (+ Subcommand `healthcheck`)
│   ├── lib.rs                # Verdrahtung der Komponenten
│   ├── config.rs             # YAML- und Umgebungs-Konfiguration
│   ├── commands.rs           # Befehls-Routing (hilfe, abbrechen, pb erstellen)
│   ├── flow.rs               # Mehrstufiger Chat-Flow
│   ├── session.rs            # Sessions pro Nutzer (mit Ablaufzeit)
│   ├── image.rs              # Bild-Rendering (image + ab_glyph)
│   ├── upload.rs             # Zipline-Upload (reqwest, rustls)
│   ├── health.rs             # Health-Server + Monitor
│   └── steam/                # Steam-Bereich (steam-cm-protocol)
│       ├── auth.rs           # Login, Steam Guard, Token-Speicher
│       └── bot.rs            # Session-Schleife, Reconnect, Freunde, Chat, Bildversand
├── examples/simulate.rs      # Chat-Flow-Simulation ohne Steam
├── Cargo.toml
├── Dockerfile
└── docker-compose.yml

⁠🚀 Installation

Voraussetzung: Rust ≥ 1.85 (Edition 2024) und git.

cargo build --release

⁠🔐 Konfiguration

⁠Umgebungsvariablen
cp .env.example .env
VariableBeschreibungStandard
STEAM_ACCOUNT_NAMESteam-Benutzername–
STEAM_ACCOUNT_PASSWORDSteam-Passwort (nur für den ersten Login nötig)–
STEAM_REFRESH_TOKENRefresh-Token statt Passwort–
STEAM_GUARD_CODESteam-Guard-Code für den Login ohne Terminal–
STEAM_TOKEN_FILESpeicherort des Refresh-Tokens (0600)data/steam-refresh-token
UPLOAD_URLÜberschreibt upload.url aus der YAML–
UPLOAD_JWTZipline-Token; leer = Bild direkt im Chat senden–
BOT_NAMEName im LogOCB ProfilBild Bot
BOT_PERSONA_STATE0=Offline 1=Online 2=Busy 3=Away … 7=Invisible1
HEALTHCHECK_PORTPort des Health-Servers3000
LOG_LEVELerror, warn, info, debug, traceinfo
CONFIG_PATH / ASSETS_DIRPfade zu YAML und public/config/pb-creator.yml / public

Login-Reihenfolge: gespeicherter Token → STEAM_REFRESH_TOKEN → Benutzername + Passwort → QR-Login. Nach dem ersten erfolgreichen Login wird der Refresh-Token gespeichert; Passwort und Steam Guard werden danach nicht mehr gebraucht. Ist der Token abgelaufen und ein Passwort gesetzt, wird automatisch neu eingeloggt.

⁠config/pb-creator.yml
messages:
  PB_CREATE:
    - "Willkommen im Profilbild-Editor von OCB."

PB_edit_mode:            # Modi
  - id: "1"
    name: "normal"
    label: "Standard Profil Bilder"

PB_ranks:                # Ränge pro Modus (gleiche Reihenfolge wie PB_edit_mode)
  - - id: "1"
      name: "trial"      # -> public/trial.png
      label: "Trial Member"

canvas:
  width: 1500
  height: 1500
  maxTextWidth: 855
  defaultFontSize: 180
  textPositionY: 1177
  fontPath: "public/play.ttf"
  fontFamily: "Play"

upload:
  enabled: true
  url: "https://images.ocb.gg"   # muss https sein
  endpoint: "/api/upload"
  format: "random"

Die Konfiguration wird beim Start validiert: PB_edit_mode und PB_ranks müssen gleich lang sein und Rang-Namen dürfen nur a-z, 0-9, - und _ enthalten.

⁠🎮 Verwendung

# Steam Bot starten (beim ersten Login ggf. Steam Guard Code im Terminal eingeben)
cargo run --release

# Simulation ohne Steam (schreibt das erzeugte PNG ins aktuelle Verzeichnis)
cargo run --example simulate

Docker: siehe DOCKER.md⁠ und PRODUCTION.md⁠.

⁠🧪 Tests & Checks

cargo fmt --all -- --check
cargo clippy --all-targets -- -D warnings
cargo test
cargo audit            # cargo install cargo-audit

⁠📝 Chat-Flow

  1. User: pb erstellen
  2. Bot: Zeigt verfügbare Modi
  3. User: 1 (wählt Modus)
  4. Bot: Zeigt verfügbare Ränge
  5. User: 2 (wählt Rang)
  6. Bot: Bittet um Namen (max. 32 Zeichen)
  7. User: TestPlayer123
  8. Bot: Zeigt Zusammenfassung
  9. User: 1 (bestätigt)
  10. Bot: Erstellt das Bild und schickt den Download-Link (oder das Bild direkt im Chat)

Sessions verfallen nach 15 Minuten Inaktivität.

⁠🔧 Befehle

  • pb erstellen – Startet die Profilbild-Erstellung
  • hilfe / help – Zeigt die Hilfe
  • abbrechen / cancel – Bricht den aktuellen Vorgang ab

Freundschaftsanfragen werden automatisch angenommen; danach schickt der Bot eine Begrüßung.

⁠🎨 Anpassungen

⁠Neue Ränge
  1. PNG in public/ ablegen (z. B. public/new-rank.png)
  2. In config/pb-creator.yml ergänzen:
PB_ranks:
  - - id: "8"
      name: "new-rank"
      label: "Neuer Rang"
⁠Neue Modi

Einen Eintrag in PB_edit_mode und an derselben Position ein Rang-Array in PB_ranks ergänzen.

⁠🐛 Debugging

LOG_LEVEL=debug gibt u. a. die Text-Metriken (Schriftgröße, Breite, Ascent) jedes Bildes aus.

⁠📄 Lizenz

MIT

Tag summary

Content type

Image

Digest

sha256:ee0961e98…

Size

56.4 MB

Last updated

7 minutes ago

docker pull otherscantbeat/pb