4.4 KiB
MuteCounter — Discord Bot
Ein Discord-Bot der Self-Mutes in Voice-Channels zählt, ein Leaderboard führt und Meilensteine feiert.
Features
| Feature | Beschreibung |
|---|---|
| Mute-Tracking | Zählt Mikrofon-Mutes (🎙️) und Deaf-Mutes (🔇) getrennt |
| Leaderboard | All-Time, wöchentlich und monatlich per /mutescore |
| Nutzer-Fokus | Rang eines bestimmten Nutzers mit Kontext anzeigen |
| Persönliche Stats | Rekordtag, Mute-Ratio, Tages-/Wochen-/Monatswerte |
| Meilensteine | Automatische Channel-Nachricht bei 10 / 25 / 50 / 100 / 250 / 500 / 1000 Mutes |
| Rang-Rollen | Automatisch zugewiesene Rollen je nach Mute-Anzahl |
| Overtake-Alert | Benachrichtigung wenn jemand auf dem Leaderboard überholt wird |
| Weekly-Posting | Automatische Wochenzusammenfassung jeden Montag |
| Mute-Ratio | Mutes pro Stunde Voice-Zeit (AFK-Channel ausgeschlossen) |
| Persistenz | Alle Daten werden in data.json gespeichert |
Voraussetzungen
- Python 3.10 oder neuer
- Ein Discord-Bot-Token (Discord Developer Portal)
Installation
1. Abhängigkeiten installieren
pip install -r requirements.txt
2. Umgebungsvariablen konfigurieren
cp .env.example .env
Dann .env öffnen und die Werte eintragen:
DISCORD_TOKEN=dein_bot_token_hier
MILESTONE_CHANNEL_ID=1234567890123456789 # optional
3. Bot starten
python bot.py
Slash-Commands werden beim ersten Start synchronisiert. Es kann bis zu einer Stunde dauern, bis sie Discord-weit erscheinen.
Konfiguration
| Variable | Pflicht | Beschreibung |
|---|---|---|
DISCORD_TOKEN |
✅ | Bot-Token aus dem Developer Portal |
MILESTONE_CHANNEL_ID |
❌ | Channel-ID für Meilensteine, Overtakes & Weekly-Posting. Fallback: Server-Systemchannel |
Channel-ID kopieren: Rechtsklick auf Channel → ID kopieren (Entwicklermodus muss aktiviert sein: Einstellungen → Erweitert → Entwicklermodus)
Befehle
/mutescore
Zeigt das Mute-Leaderboard.
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
period |
Auswahl | All-Time | Gesamt, Diese Woche oder Diesen Monat |
limit |
Zahl | 10 | Anzahl der angezeigten Plätze (1–25) |
user |
@Mention | — | Fokus-Ansicht für einen bestimmten Nutzer |
Beispiele:
/mutescore
/mutescore period:Diese Woche limit:5
/mutescore user:@Max
/mutescore user:@Max period:Diesen Monat
/mymutes
Zeigt die eigenen Mute-Stats (nur für den Nutzer selbst sichtbar).
📊 All-Time 🎙️ 12x Mikro | 🔇 5x Deaf | 17x gesamt
📅 Diese Woche 4x
🗓️ Diesen Monat 11x
☀️ Heute 2x
🏆 Rekordtag 15.01.2026 mit 6x
⚡ Mute-Ratio 2.4 Mutes/Stunde (Voice-Zeit: 7h 5min)
🏷️ Rang 💯 Mute-Veteran
Rang-Rollen
Rollen werden automatisch erstellt und zugewiesen. Bei einem Aufstieg wird die alte Rolle entfernt.
| Mutes | Rolle |
|---|---|
| 10 | 🔇 Stummer Gast |
| 25 | 😶 Gelegentlicher Muter |
| 50 | 🤫 Fortgeschrittener Schweiger |
| 100 | 💯 Mute-Veteran |
| 250 | 🏅 Schweige-Meister |
| 500 | 🎖️ Elite-Muter |
| 1000 | 👑 Mute-König |
Bot-Berechtigungen
Folgende Berechtigungen werden benötigt:
| Berechtigung | Wozu |
|---|---|
View Channels |
Channels sehen |
Send Messages |
Nachrichten & Embeds senden |
Embed Links |
Embeds posten |
Manage Roles |
Rang-Rollen erstellen & vergeben |
Connect |
Voice-Channels sehen (für AFK-Erkennung) |
Privileged Gateway Intents (im Developer Portal aktivieren):
Server Members IntentVoice State Intent(standardmäßig aktiv)
Einlade-Scopes: bot + applications.commands
Datenspeicherung
Alle Daten werden lokal in data.json gespeichert.
MuteCounter/
├── bot.py
├── data.json # automatisch erstellt
├── .env # nicht in Git einchecken!
├── .env.example
├── requirements.txt
└── README.md
data.jsonund.envsollten nicht in ein öffentliches Repository eingecheckt werden.
Mute-Typen
| Aktion in Discord | Typ | Symbol |
|---|---|---|
| Mikrofon-Button drücken | mic |
🎙️ |
| Deaf-Button drücken (taubstellen) | deaf |
🔇 |
Wenn sich jemand taubstellt, wird nur der Deaf-Counter erhöht (nicht doppelt gezählt).