OCB Steam ProfilBild Bot - Automated profile picture generation
3.3K
Automatisierter Profilbild-Erstellungs-Bot für die OCB Steam-Community – geschrieben in Rust,
mit nativer Steam-Anbindung über steam-cm-protocol.
steam-user mehr/health, /ready, /metrics (Prometheus)cargo test)├── 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
Voraussetzung: Rust ≥ 1.85 (Edition 2024) und git.
cargo build --release
cp .env.example .env
| Variable | Beschreibung | Standard |
|---|---|---|
STEAM_ACCOUNT_NAME | Steam-Benutzername | – |
STEAM_ACCOUNT_PASSWORD | Steam-Passwort (nur für den ersten Login nötig) | – |
STEAM_REFRESH_TOKEN | Refresh-Token statt Passwort | – |
STEAM_GUARD_CODE | Steam-Guard-Code für den Login ohne Terminal | – |
STEAM_TOKEN_FILE | Speicherort des Refresh-Tokens (0600) | data/steam-refresh-token |
UPLOAD_URL | Überschreibt upload.url aus der YAML | – |
UPLOAD_JWT | Zipline-Token; leer = Bild direkt im Chat senden | – |
BOT_NAME | Name im Log | OCB ProfilBild Bot |
BOT_PERSONA_STATE | 0=Offline 1=Online 2=Busy 3=Away … 7=Invisible | 1 |
HEALTHCHECK_PORT | Port des Health-Servers | 3000 |
LOG_LEVEL | error, warn, info, debug, trace | info |
CONFIG_PATH / ASSETS_DIR | Pfade 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.ymlmessages:
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.
# 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.
cargo fmt --all -- --check
cargo clippy --all-targets -- -D warnings
cargo test
cargo audit # cargo install cargo-audit
pb erstellen1 (wählt Modus)2 (wählt Rang)TestPlayer1231 (bestätigt)Sessions verfallen nach 15 Minuten Inaktivität.
pb erstellen – Startet die Profilbild-Erstellunghilfe / help – Zeigt die Hilfeabbrechen / cancel – Bricht den aktuellen Vorgang abFreundschaftsanfragen werden automatisch angenommen; danach schickt der Bot eine Begrüßung.
public/ ablegen (z. B. public/new-rank.png)config/pb-creator.yml ergänzen:PB_ranks:
- - id: "8"
name: "new-rank"
label: "Neuer Rang"
Einen Eintrag in PB_edit_mode und an derselben Position ein Rang-Array in PB_ranks ergänzen.
LOG_LEVEL=debug gibt u. a. die Text-Metriken (Schriftgröße, Breite, Ascent) jedes Bildes aus.
MIT
Content type
Image
Digest
sha256:ee0961e98…
Size
56.4 MB
Last updated
7 minutes ago
docker pull otherscantbeat/pb