Die Datei main.py
main.py ist das Herzstück deines Projekts. Sie ist dafür verantwortlich, mit TikTok verbunden zu bleiben und alle Events zu empfangen.
Was macht main.py?
Wenn du das Programm startest, macht main.py diese Schritte (vereinfacht):
1. Konfiguration laden (config.yaml)
↓
2. TikTok-Client einrichten
↓
3. Event-Handler registrieren ("Höre auf Gifts, Follows, Likes")
↓
4. Mit TikTok verbinden (bleibt verbunden)
↓
5. Events empfangen (kontinuierlich)
↓
6. Events verarbeiten & in Queue legen
↓
7. [Während Schritt 6 läuft: Main-Loop verarbeitet Queue]
Das ist nicht linear. Schritte 5, 6 und 7 laufen gleichzeitig (parallel) ab.
Aufbau von main.py (auf hoher Ebene)
# 1. IMPORTE
from TikTokLive import TikTokLiveClient
from TikTokLive.events import GiftEvent, FollowEvent, LikeEvent
from core.validator import validate_file, print_diagnostics
from core.paths import get_base_dir
# 2. GLOBALE VARIABLEN
MAIN_LOOP = ... # Referenz zur Hauptschleife
trigger_queue = Queue() # Warteschlange der Trigger
like_queue = Queue() # Warteschlange für Likes
# 3. FUNKTIONEN ZUM ERSTELLEN DES CLIENTS
def create_client(user):
client = TikTokLiveClient(unique_id=user)
@client.on(GiftEvent)
def on_gift(event):
# Reagiere auf Gift
pass
# Ähnlich: on_follow, on_like, etc.
return client
# 4. HAUPTFUNKTION
def main():
# Lade Config
cfg = load_config(...)
# Starte Client
client = create_client(cfg["tiktok_user"])
# Starte andere Services (Server, GUI, Plugins)
# ...
# Hauptloop (verarbeitet Queue)
while True:
event = trigger_queue.get() # Nächsten Event holen
process_trigger(event) # Verarbeiten
Die Rolle von Importe
Am Anfang von main.py siehst du:
from TikTokLive import TikTokLiveClient
from TikTokLive.events import GiftEvent, FollowEvent, ConnectEvent, LikeEvent
Das heißt:
- TikTokLiveClient: Ein Objekt, das die Verbindung zu TikTok herstellt
- GiftEvent: Wird ausgelöst, wenn ein Gift empfangen wird
- FollowEvent: Wird ausgelöst, wenn jemand folgt
- LikeEvent: Wird ausgelöst, wenn Likes eintreffen
Diese werden später verwendet, um Event-Handler zu registrieren.
Weitere Importe:
from core.validator import validate_file, print_diagnostics
from core.paths import get_base_dir
Das sind Kern-Module (vom Projekt selbst), nicht externe Bibliotheken.
Schritt 1: Konfiguration laden
CONFIG_FILE = get_root_dir() / "config" / "config.yaml"
try:
with open(CONFIG_FILE, "r", encoding="utf-8") as f:
cfg = yaml.safe_load(f)
except Exception as e:
print(f"FEHLER: Config konnte nicht geladen werden: {e}")
sys.exit(1) # Programm beenden
Das liest die config.yaml:
tiktok_user: "eintiktoker"
Timer:
Enable: true
StartTime: 10
Wenn das fehlschlägt, bricht das Programm ab (weil es ohne Config nicht funktioniert).
Schritt 2 & 3: Client erstellen & Handler registrieren
def create_client(user):
"""Erstelle einen TikTok-Live-Client für den angegebenen User"""
client = TikTokLiveClient(unique_id=user)
# Jetzt registrieren wir Event-Handler
# Handler = "Funktionen, die ausgeführt werden, wenn ein Event kommt"
@client.on(GiftEvent)
def on_gift(event: GiftEvent):
# Diese Funktion wird JEDES MAL aufgerufen, wenn ein Gift kommt
pass # Logik kommt später
@client.on(FollowEvent)
def on_follow(event: FollowEvent):
# Diese Funktion wird aufgerufen, wenn jemand folgt
pass
@client.on(LikeEvent)
def on_like(event: LikeEvent):
# Diese Funktion wird aufgerufen, wenn Likes eintreffen
pass
return client # Gib den konfigurierten Client zurück
Das @client.on(...) ist ein Dekorator – eine Python-Funktion, die sagt: "Rufe diese Funktion auf, wenn dieses Event kommt".
Schritt 4: Mit TikTok verbinden
client = create_client(cfg["tiktok_user"])
# Verbindung starten (asynchron)
asyncio.run(client.connect())
Das verbindet sich mit dem TikTok-Stream und bleibt verbunden. Wenn ein Event kommt, ruft der Client automatisch den entsprechenden Handler auf.
Warum ist main.py komplex?
Wenn du die echte main.py öffnest, siehst du viel mehr Code als hier erklärt:
# Echte main.py hat auch:
- Error-Handling (was wenn Fehler?)
- Combo-Gifts (wiederholte Gifts)
- Race Conditions (Multi-Threading)
- Streams (VideoEvents)
- und vieles mehr...
Das macht den Code kompliziert. Aber die Kernidee bleibt gleich:
- Client erstellen
- Handler registrieren
- Verbinden
- Events verarbeiten
Was kommt in den Event-Handlern?
Die eigentliche Magie passiert in den Event-Handlern:
@client.on(GiftEvent)
def on_gift(event: GiftEvent):
# 1. Gift-Details auslesen
gift_name = event.gift.name
user = event.user.nickname
# 2. Prüfen, ob diese Gift konfiguriert ist
if gift_name in valid_functions:
# 3. Trigger in Warteschlange legen
MAIN_LOOP.call_soon_threadsafe(
trigger_queue.put_nowait,
(gift_name, user)
)
Aber das wird später ausführlich besprochen.
Die Rolle des Hauptprogramms
main.py ist nicht die einzige Datei, die läuft. Daneben gibt es auch:
- server.py: Startet den Minecraft-Server (Java-Subprocess, RCON-Konfiguration, server.properties)
- registry.py: Lädt und startet alle Plugins
- gui.py: Zeigt ein Admin-Interface
Zusammenfassung
main.py macht:
✓ Konfiguration laden
✓ TikTok-Client erstellen
✓ Event-Handler registrieren
✓ Mit TikTok verbinden
✓ Events empfangen & verarbeiten
✓ In Warteschlange legen
Alles läuft parallel ab – nicht nacheinander.
Nächster Schritt
Jetzt verstehst du die Struktur. Der nächste Schritt ist es, die Importe genauer zu verstehen.
→ Importe
Dort wirst du sehen, was mit den importieren Modulen angestellt wird.