Ein Discord-Bot, der auf deinem eigenen Server läuft und Anfragen von Mitgliedern an ein lokales Ollama-Modell weiterleitet. Keine Cloud, keine API-Kosten, volle Datenkontrolle.
- Slash-Commands:
/ask <Frage>– stellt eine Frage an das aktive KI-Modell/model [Name]– zeigt das aktuelle Modell an oder wechselt es/help– Übersicht aller Befehle/clear– löscht den flüchtigen Gesprächsverlauf des Kanals
- Direkt-Antwort: Der Bot antwortet, wenn du ihn mit
@DBot_adminerwähnst. - Kontext: Die letzten
CONTEXT_LENGTH(Default: 10) Nachrichten pro Kanal fließen als Kontext in die Antwort ein. - Quellenhinweis: Jede Antwort enthält das verwendete Modell.
- Datenschutz: Keine dauerhafte Speicherung. Verläufe leben nur im RAM.
- Sicherheit:
- Token ausschließlich aus
.env - Einfache Toxin-Erkennung (kann erweitert werden)
- Verweigerung illegaler / beleidigender Anfragen
- Token ausschließlich aus
- Discord-Limit-sicher: Lange Antworten werden an Zeilenumbrüchen getrennt und auf mehrere Nachrichten aufgeteilt.
- Python 3.10+
- Ollama lokal installiert und laufend (https://ollama.com/download)
- Ein Discord-Bot-Account mit den Intents
- Message Content Intent
- Server Members Intent (optional)
- Der Bot wurde mit
botundapplications.commands-Scopes auf deinen Server eingeladen.
| Modell | Gut für |
|---|---|
qwen2.5-coder:14b |
Code, präzise technische Antworten |
qwen3:14b |
Aktuelles, leistungsfähiges Allround |
phi4:latest |
Logik, Reasoning |
llama2:13b |
Solides Allround |
glm-4.7-flash:latest |
Schnell, modern |
Modell laden (Beispiel):
ollama pull qwen2.5-coder:14b
ollama serve # falls nicht als Dienst läuftgit clone <dein-repo> # oder entpacken
cd discord_bot
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env
# .env öffnen und DISCORD_TOKEN=<dein token> eintragen| Variable | Default | Bedeutung |
|---|---|---|
DISCORD_TOKEN |
– | Bot-Token aus dem Discord-Portal |
OLLAMA_HOST |
http://localhost:11434 |
Ollama-Endpoint |
DEFAULT_MODEL |
qwen2.5-coder:14b |
Initial aktives Modell |
CONTEXT_LENGTH |
10 |
Anzahl Kontextnachrichten pro Kanal |
ALLOWED_CHANNEL_IDS |
(leer) | Leere Liste = alle Kanäle |
RESPONSE_TIMEOUT |
120 |
Timeout (Sekunden) für Ollama |
Tipp: Wenn
ALLOWED_CHANNEL_IDSgesetzt ist, reagiert der Bot nur in diesen Kanälen. Die IDs findest du in Discord via Rechtsklick auf den Kanal →Kanal-ID kopieren(Entwicklermodus an).
python bot.pyBeim Start erscheint in einem erreichbaren Kanal:
DBot_admin ist online. Verwende
/helpfür eine Befehlsübersicht.
- Application: DBot_admin
- Bot-Bereich: Token generiert und in
.envgespeichert - Privileged Intents aktiviert:
- Message Content Intent
- Server Members Intent (optional)
- OAuth2 → URL Generator:
- Scopes:
bot,applications.commands - Permissions:
2147559424(oder manuell auswählen)
- Scopes:
- Einladung-Link im Browser geöffnet → Bot deinem Server hinzugefügt
Stellt eine Frage an das aktive Modell. Beispiel:
/ask frage:Erkläre mir in 3 Sätzen, was Retrieval-Augmented Generation ist.
Antwort (Beispiel):
Retrieval-Augmented Generation (RAG) kombiniert ein Sprachmodell mit einer externen Wissensquelle …
(Antwort mit
qwen2.5-coder:14b)
Ohne Name: zeigt aktuelles Modell + Liste aller lokal verfügbaren.
Mit Name: wechselt das Modell serverweit.
Leert den flüchtigen Gesprächsverlauf dieses Kanals.
- Token: Liegt ausschließlich in
.env. Wird viapython-dotenvgeladen. - Verlauf: Nur im RAM (
collections.deque). Wird beim Beenden gelöscht. - Moderation: Eine einfache Heuristik blockt grob beleidigende Inhalte. Für produktive Server empfiehlt sich ein zusätzlicher Moderations-Bot.
- Illegale Inhalte: Werden gemäß System-Prompt verweigert.
- Datenbank (SQLite/Postgres): dauerhafte Gesprächsverläufe pro Kanal.
- RAG: Server-spezifische Dokumente via Embeddings in
chromadbo. ä. - Voice: Sprach-Channel-Integration mit
discord-ext-voice-recv. - Rate-Limit: Pro User / Kanal drosseln, um Missbrauch zu verhindern.
- Reaktionen: 👍/👎-Feedback sammeln und ins Prompt einbauen.
| Problem | Lösung |
|---|---|
DISCORD_TOKEN fehlt |
.env anlegen und Token eintragen |
Ollama antwortete mit Status 404 |
Modellname falsch → /model ohne Argument zeigt Verfügbare |
| Bot reagiert nicht auf Nachrichten | Message Content Intent muss im Portal aktiviert sein |
| Bot antwortet nur in bestimmten Kanälen | ALLOWED_CHANNEL_IDS prüfen oder leeren |
| Antworten dauern sehr lange | Kleineres Modell wählen (llama2:13b oder phi4) |
MIT – frei verwendbar, bitte mit Hinweis auf den Autor.