Ein frecher Discord-Bot mit Persönlichkeit. Gebaut mit JDA, OpenAI API und SQLite.
"Bro was" – Nebi, wahrscheinlich
- @Mention = Antwort – Einfach den Bot pingen und er antwortet
- Konversations-Memory – Merkt sich die letzten Nachrichten pro User
- Persönlichkeit – Redet wie ein echter Mensch, nicht wie ein Kundenservice-Bot
- Lernt selbstständig – Wenn User ihm Fakten erzählen, speichert er sie automatisch
- Fact-Checking – Jeder Fakt wird geprüft bevor er gespeichert wird
- Filter – Lehnt politische, kontroverse oder falsche Aussagen ab
- User-Kontext – Speichere Infos über User (Vorlieben, Running Gags)
- Server-Wissen – Globales Wissen das die AI nutzen kann
- Blacklist – Blocke User für AI-Antworten
- Java 21+
- Discord Bot Token (mit Message Content Intent)
- OpenAI API Key
# 1. Config erstellen
cp config/config.example.yml config/config.yml
# 2. config.yml ausfüllen (Token, API-Key, etc.)
# 3. Bauen
mvn -DskipTests package
# 4. Starten
java -jar target/Nebi-1.0.jarOptional mit eigener Config:
java -jar target/Nebi-1.0.jar pfad/zur/config.yml| Command | Beschreibung |
|---|---|
/context add [user] <context> |
Kontext setzen |
/context view [user] |
Kontext anzeigen |
/context clear [user] |
Kontext löschen |
| Command | Beschreibung | Berechtigung |
|---|---|---|
/knowledge add <text> |
Wissen hinzufügen | Manage Server |
/knowledge list [limit] |
Wissen anzeigen | Manage Server |
/knowledge remove <id> |
Wissen löschen | Manage Server |
| Command | Beschreibung | Berechtigung |
|---|---|---|
/ai-blacklist add <user> [reason] |
User blocken | Manage Server |
/ai-blacklist remove <user> |
User entblocken | Manage Server |
/ai-blacklist list [limit] |
Blacklist anzeigen | Manage Server |
| Command | Beschreibung |
|---|---|
/forget |
Löscht deine Konversationshistorie |
/stats |
Zeigt Server-Statistiken |
Die wichtigsten Einstellungen in config/config.yml:
discord:
token: "dein-token"
guildId: "123456789" # Optional: Schnellere Command-Updates
activityType: "listening" # playing, listening, watching, competing
# Wechselnde Status-Nachrichten
presence:
enabled: true
intervalSeconds: 30
activities:
- "listening:🎧 auf {servers} Servern"
- "watching:👀 {users} User"
- "playing:⏱️ seit {uptime} online"
- "competing:🏓 {ping}ms Ping"
- "playing:💬 @NebiAI zum Chatten"
openai:
apiKey: "sk-..."
model: "gpt-4o-mini"
temperature: 0.7
maxTokens: 320
ux:
cooldownSeconds: 0 # 0 = kein Cooldown
maxConversationMessages: 12 # 0 = Memory aus| Placeholder | Beschreibung | Beispiel |
|---|---|---|
{servers} |
Anzahl Server | 5 |
{users} |
Anzahl User (alle Server) | 1337 |
{uptime} |
Bot-Uptime | 2h 15m |
{ping} |
Gateway Ping | 42 |
{memory} |
RAM-Verbrauch | 128MB |
{version} |
Bot-Version | 1.0 |
{date} |
Aktuelles Datum | 2024-01-15 |
{time} |
Aktuelle Uhrzeit | 14:30 |
Prefix den Status mit dem Typ:
playing:Text→ "Spielt Text"listening:Text→ "Hört Text zu"watching:Text→ "Schaut Text"competing:Text→ "Tritt an in Text"streaming:Text→ "Streamt Text"
Beispiel:
activities:
- "listening:🎧 {users} Usern zu"
- "watching:🌐 über {servers} Server"
- "playing:🚀 Version {version}"| Problem | Lösung |
|---|---|
| SQLite Warning | java --enable-native-access=ALL-UNNAMED -jar Nebi-1.0.jar |
| HostnameUnverifiedException | Uhrzeit prüfen, Antivirus HTTPS-Scanning aus. Notlösung: discord.insecureSkipHostnameVerification: true |
| API-Key ungültig | Neuen Key von platform.openai.com holen |
| Rate-Limit | Warte kurz oder upgrade deinen OpenAI Plan |
| Kein Guthaben | OpenAI Account aufladen |
Nebi/
├── config/
│ └── config.yml # Deine Konfiguration
├── data/
│ └── nebi.db # SQLite Datenbank
├── src/main/java/io/nebuliton/
│ ├── Main.java # Entry Point
│ ├── Database.java # SQLite Wrapper
│ ├── ai/
│ │ ├── AIManager.java # AI Logic + Auto-Learning
│ │ ├── OpenAIClient.java # OpenAI API Client
│ │ ├── ContextStore.java # Datenbank-Operationen
│ │ ├── Commands.java # Slash Commands
│ │ ├── PingListener.java # Message Handler
│ │ └── RateLimiter.java # Cooldown Logic
│ └── config/
│ └── Config.java # YAML Config Parser
└── target/
└── Nebi-1.0.jar # Fertiges JAR
- Tokens nicht commiten! Füge
config/config.ymlunddata/zur.gitignorehinzu - Logging wird über
src/main/resources/logback.xmlgesteuert - Native-Access Auto-Restart kann mit
-Dnebi.noNativeRestart=truedeaktiviert werden
MIT – Mach damit was du willst.