DarikChatManager Advanced Chat Management with AI-Powered Moderation
DarikChatManager is a powerful chat moderation plugin that combines traditional word filtering with cutting-edge AI technology using Google's Gemini AI to provide intelligent, context-aware chat moderation.
System Demonstration
AI Moderation in Action:
GUI Overview:
✨ Key Features
AI-Powered Moderation: Advanced content filtering with Google’s Gemini AI.
Multi-Language Support: Supports English, Spanish, German, French, Italian, and Portuguese.
Smart Pattern Learning System: Adapts to new patterns and reduces false positives.
Interactive GUI Management: Simplified configuration and monitoring.
⚡ Real-Time Chat Analysis: Process messages instantly for secure interactions.
️ Advanced Word Filtering: Efficient detection of harmful content.
✍️ Detailed Logging System: Comprehensive record of flagged messages and moderation actions.
Commands
/dcm reload - Reload plugin configuration.
/dcm add <word> - Add a forbidden word/pattern.
/dcm remove <word> - Remove a forbidden word/pattern.
/dcm stats - View moderation statistics.
/dcm gui - Open the management GUI.
Permissions
darikchatmanager.admin - Access to all commands.
darikchatmanager.bypass - Bypass chat moderation.
darikchatmanager.notify - Receive notifications about detected content.
GUI Interface
The plugin features an intuitive GUI with three main sections:
Real-Time Analysis: Immediate response to messages.
Smart Pattern Matching System The plugin employs an intelligent pattern matching system that only flags messages for review when they match
previously identified suspicious patterns with a similarity score of at least 0.75 (you can add patterns manually on config.yml or use /dcm add <word>). Messages that do not meet this threshold are not sent for review, ensuring efficient and focused moderation. The system is capable of detecting sophisticated attempts to bypass filters, such as variations like 'haaaaaaaaaacker,' 'h4cker,' or 'h4///cker,' making it robust against creative evasion tactics.
Moderation Mode Selection DarikChatManager features two distinct moderation modes:
AI-Powered System: Sophisticated content analysis with Gemini AI.
Traditional Filtering: Efficient word and pattern matching.
These modes operate exclusively, ensuring optimal performance a can switch between modes in the configuration file based on specific needs and server resources.
#====================# # Main Settings # #====================# # Enable or disable the chat censoring system censor-enabled: true
# Plugin language (en, es, de, fr, it, pt) language: en
#=========================# # Advanced Detection # #=========================# advanced: # Maximum number of inappropriate message attempts before taking action max-attempts: 3
# Actions to take when max attempts are reached max-attempts-actions: # Built-in mute system mute: # Enable automatic muting (Note: message will always be in English) enabled: false
# Mute duration in seconds (3600 = 1 hour) duration: 3600
# Custom command execution command: # Enable command execution on max attempts enabled: true
# Command to execute. Available placeholders: {player} command: "mute {player} 1h Exceeding inappropriate message attempt limit" # Show warning messages to players when inappropriate content is detected warn-players: true
#======================# # GUI Management # #======================# gui-settings: # Number of items to display per page in GUIs items-per-page: 28
# How often to refresh GUI data (in seconds) refresh-interval: 30
# Automatically remove old entries from history auto-purge-old: true
# How many days to keep history before purging history-days: 30
# Color for highlighted items in GUI (uses & color codes) highlight-color: "&6" # Number of infractions before highlighting a player in the GUI warning-threshold: 5
#======================# # Word Blacklist # #======================# # List of words or patterns to block # You can add more patterns following the same format forbidden-patterns: - badword
- hack
- cheat
- exploit
#=================================# # Artificial Intelligence AI # #=================================# # The AI system uses Google's Gemini AI to: # - Detect context-aware inappropriate content # - Understand multiple languages automatically # - Learn new patterns from detected violations # - Adapt to new ways players try to bypass # - Reduce false positives with smart detection # ai-settings: # Your Gemini API key (required for AI features) # Get it from: https://makersuite.google.com/app/apikey gemini-api-key: "" # Enable or disable AI detection enabled: true
# Minimum confidence level (0.0 to 1.0) for AI to flag content # Higher values = fewer false positives but might miss some violations # Recommended: 0.75 for balance, 0.85 for strict, 0.65 for lenient # NOTE: This feature (min-confidence) is currently not available and will be enabled in future updates min-confidence: 0.75
# Gemini AI model to use # The flash-exp version provides faster responses and it's free! # Please note that another model can be expensive. model: "gemini-2.0-flash-exp" # Enable debug messages in console (always in English) # Only recommended if the system is not working properly debug: false
Code (YAML):
en:
plugin-enabled: "§aDarikChatManager enabled! Loaded {0} patterns." config-reloaded: "§aConfiguration successfully reloaded!" word-added: "§aWord '{word}' added to forbidden list" word-removed: "§cWord '{word}' removed from forbidden list" no-permission: "§cYou don't have permission to perform this action!" warning-message: "§cYour message contained inappropriate content! ({attempts}/{max} attempts)" help-menu: | §6=== DarikChatManager Help === §e/dcm reload §7- Reload configuration §e/dcm add <word> §7- Add forbidden word §e/dcm remove <word> §7- Remove forbidden word §e/dcm stats §7- Show censorship statistics §e/dcm gui §7- Open pattern management GUI §e/dcm help §7- Show this help menu stats-message: "§6Censorship Stats: §e{total} messages checked, §c{blocked} blocked" max-attempts-reached: "§cYou have exceeded the maximum allowed attempts!" player-not-found: "§cPlayer not found!" gui:
title: "§8Pattern Management" sections:
offenders:
title: "§c§lTop Offenders" description: "§7Players with most infractions" player-entry: "§7Infractions: §c{count}" click-details: "§7Click for detailed history" patterns:
title: "§6§lMost Detected Patterns" description: "§7Most frequently detected patterns" pattern-entry: "§7Detections: §e{count}" first-detected: "§7First detected: §e{date}" last-detected: "§7Last detected: §e{date}" click-examples: "§7Click to view examples" learning:
title: "§b§lAuto-Learning System" description: "§7Patterns detected by AI" confidence: "§7Confidence: §e{percent}%" detections: "§7Detections: §e{count}" first_detected: "§7First detected: §e{date}" click_manage: "§7Click to approve/reject" confirm:
title: "Confirm Action: {pattern}" approve:
title: "§aApprove Pattern" description: -
"§7Click to add this pattern" -
"§7to the forbidden patterns list" reject:
title: "§cReject Pattern" description: -
"§7Click to remove this pattern" -
"§7from the learning system" success:
approve: "§aPattern '{pattern}' has been approved and added to forbidden patterns." reject: "§cPattern '{pattern}' has been rejected." details:
player-history: "§6=== Infractions for {player} ===" pattern-examples: "§6=== Examples for pattern '{pattern}' ===" example-entry: "§7- §f{message}" notifications:
staff:
suspicious-message: "Suspicious message from {player}: {message}" flagged-fragment: "Flagged fragment: {fragment}" player:
analyzing: "Analyzing message..." es:
plugin-enabled: "§a¡DarikChatManager activado! Se cargaron {0} patrones." config-reloaded: "§a¡Configuración recargada correctamente!" word-added: "§aPalabra '{word}' añadida a la lista prohibida" word-removed: "§cPalabra '{word}' eliminada de la lista prohibida" no-permission: "§c¡No tienes permiso para realizar esta acción!" warning-message: "§c¡Tu mensaje contiene contenido inapropiado! ({attempts}/{max} intentos)" help-menu: | §6=== Ayuda de DarikChatManager === §e/dcm reload §7- Recargar configuración §e/dcm add <palabra> §7- Añadir palabra prohibida §e/dcm remove <palabra> §7- Eliminar palabra prohibida §e/dcm stats §7- Mostrar estadísticas §e/dcm gui §7- Abrir GUI de gestión de patrones §e/dcm help §7- Mostrar este menú de ayuda stats-message: "§6Estadísticas de censura: §e{total} mensajes revisados, §c{blocked} bloqueados" max-attempts-reached: "§c¡Has excedido el máximo de intentos permitidos!" player-not-found: "§c¡Jugador no encontrado!" gui:
title: "§8Gestión de Patrones" sections:
offenders:
title: "§c§lInfractores Principales" description: "§7Jugadores con más infracciones" player-entry: "§7Infracciones: §c{count}" click-details: "§7Clic para ver detalles" patterns:
title: "§6§lPatrones Más Detectados" description: "§7Patrones detectados frecuentemente" pattern-entry: "§7Detecciones: §e{count}" first-detected: "§7Primera detección: §e{date}" last-detected: "§7Última detección: §e{date}" click-examples: "§7Clic para ver ejemplos" learning:
title: "§b§lSistema de Aprendizaje" description: "§7Patrones detectados por IA" confidence: "§7Confianza: §e{percent}%" detections: "§7Detecciones: §e{count}" first_detected: "§7Primera detección: §e{date}" click_manage: "§7Clic para aprobar/rechazar" confirm:
title: "Confirmar Acción: {pattern}" approve:
title: "§aAprobar Patrón" description: -
"§7Clic para añadir este patrón" -
"§7a la lista de patrones prohibidos" reject:
title: "§cRechazar Patrón" description: -
"§7Clic para eliminar este patrón" -
"§7del sistema de aprendizaje" success:
approve: "§aEl patrón '{pattern}' ha sido aprobado y añadido a los patrones prohibidos." reject: "§cEl patrón '{pattern}' ha sido rechazado." details:
player-history: "§6=== Infracciones de {player} ===" pattern-examples: "§6=== Ejemplos del patrón '{pattern}' ===" example-entry: "§7- §f{message}" notifications:
staff:
suspicious-message: "Mensaje sospechoso de {player}: {message}" flagged-fragment: "Fragmento detectado: {fragment}" player:
analyzing: "Analizando mensaje..." de:
plugin-enabled: "§aDarikChatManager aktiviert! {0} Muster geladen." config-reloaded: "§aKonfiguration erfolgreich neu geladen!" word-added: "§aWort '{word}' zur Verbotsliste hinzugefügt" word-removed: "§cWort '{word}' von Verbotsliste entfernt" no-permission: "§cDu hast keine Berechtigung für diese Aktion!" warning-message: "§cDeine Nachricht enthielt unangemessene Inhalte! ({attempts}/{max} Versuche)" help-menu: | §6=== DarikChatManager Hilfe === §e/dcm reload §7- Konfiguration neu laden §e/dcm add <wort> §7- Wort verbieten §e/dcm remove <wort> §7- Wort entfernen §e/dcm stats §7- Statistiken anzeigen §e/dcm gui §7- Muster-Verwaltungs-GUI öffnen §e/dcm help §7- Dieses Hilfemenü anzeigen stats-message: "§6Zensurstatistik: §e{total} Nachrichten geprüft, §c{blocked} blockiert" max-attempts-reached: "§cMaximale Versuche überschritten!" player-not-found: "§cSpieler nicht gefunden!" gui:
title: "§8Muster-Verwaltung" sections:
offenders:
title: "§c§lHäufigste Verstöße" description: "§7Spieler mit den meisten Verstößen" player-entry: "§7Verstöße: §c{count}" click-details: "§7Klicken für Details" patterns:
title: "§6§lMeist erkannte Muster" description: "§7Am häufigsten erkannte Muster" pattern-entry: "§7Erkennungen: §e{count}" first-detected: "§7Erste Erkennung: §e{date}" last-detected: "§7Letzte Erkennung: §e{date}" click-examples: "§7Klicken für Beispiele" learning:
title: "§b§lAuto-Lernsystem" description: "§7Von KI erkannte Muster" confidence: "§7Vertrauen: §e{percent}%" detections: "§7Erkennungen: §e{count}" first_detected: "§7Erste Erkennung: §e{date}" click_manage: "§7Klicken zum Bestätigen/Ablehnen" confirm:
title: "Aktion bestätigen: {pattern}" approve:
title: "Muster genehmigen" description: -
"Klicken Sie hier, um dieses Muster" -
"zur Liste der verbotenen Muster hinzuzufügen" reject:
title: "Muster ablehnen" description: -
"Klicken Sie hier, um dieses Muster" -
"aus dem Lernsystem zu entfernen" success:
approve: "Muster '{pattern}' wurde genehmigt und zu den verbotenen Mustern hinzugefügt." reject: "Muster '{pattern}' wurde abgelehnt." details:
player-history: "§6=== Verstöße von {player} ===" pattern-examples: "§6=== Beispiele für Muster '{pattern}' ===" example-entry: "§7- §f{message}" notifications:
staff:
suspicious-message: "Verdächtige Nachricht von {player}: {message}" flagged-fragment: "Flagged fragment: {fragment}" player:
analyzing: "Nachricht wird analysiert..." fr:
plugin-enabled: "§aDarikChatManager activé! {0} motifs chargés." config-reloaded: "§aConfiguration rechargée avec succès!" word-added: "§aMot '{word}' ajouté à la liste interdite" word-removed: "§cMot '{word}' retiré de la liste interdite" no-permission: "§cVous n'avez pas la permission d'effectuer cette action!" warning-message: "§cVotre message contenait du contenu inapproprié! ({attempts}/{max} tentatives)" help-menu: | §6=== Aide DarikChatManager === §e/dcm reload §7- Recharger la configuration §e/dcm add <mot> §7- Ajouter un mot interdit §e/dcm remove <mot> §7- Retirer un mot interdit §e/dcm stats §7- Afficher les statistiques §e/dcm gui §7- Ouvrir l'interface de gestion §e/dcm help §7- Afficher ce menu d'aide stats-message: "§6Statistiques de censure: §e{total} messages vérifiés, §c{blocked} bloqués" max-attempts-reached: "§cVous avez dépassé le nombre maximum de tentatives!" player-not-found: "§cJoueur non trouvé!" gui:
title: "§8Gestion des Motifs" sections:
offenders:
title: "§c§lPrincipaux Contrevenants" description: "§7Joueurs avec le plus d'infractions" player-entry: "§7Infractions: §c{count}" click-details: "§7Cliquez pour les détails" patterns:
title: "§6§lMotifs les Plus Détectés" description: "§7Motifs fréquemment détectés" pattern-entry: "§7Détections: §e{count}" first-detected: "§7Première détection: §e{date}" last-detected: "§7Dernière détection: §e{date}" click-examples: "§7Cliquez pour voir les exemples" learning:
title: "§b§lSystème d'Apprentissage" description: "§7Motifs détectés par l'IA" confidence: "§7Confiance: §e{percent}%" detections: "§7Détections: §e{count}" first_detected: "§7Première détection: §e{date}" click_manage: "§7Cliquez pour approuver/rejeter" confirm:
title: "Confirmer l'Action: {pattern}" approve:
title: "Approuver le Motif" description: -
"Cliquez pour ajouter ce motif" -
"à la liste des motifs interdits" reject:
title: "Rejeter le Motif" description: -
"Cliquez pour retirer ce motif" -
"du système d'apprentissage" success:
approve: "Le motif '{pattern}' a été approuvé et ajouté aux motifs interdits." reject: "Le motif '{pattern}' a été rejeté." details:
player-history: "§6=== Infractions de {player} ===" pattern-examples: "§6=== Exemples pour le motif '{pattern}' ===" example-entry: "§7- §f{message}" notifications:
staff:
suspicious-message: "Message suspect de {player}: {message}" flagged-fragment: "Flagged fragment: {fragment}" player:
analyzing: "Analyse du message en cours..." pt:
plugin-enabled: "§aDarikChatManager ativado! {0} padrões carregados." config-reloaded: "§aConfiguração recarregada com sucesso!" word-added: "§aPalavra '{word}' adicionada à lista proibida" word-removed: "§cPalavra '{word}' removida da lista proibida" no-permission: "§cVocê não tem permissão para realizar esta ação!" warning-message: "§cSua mensagem continha conteúdo inapropriado! ({attempts}/{max} tentativas)" help-menu: | §6=== Ajuda DarikChatManager === §e/dcm reload §7- Recarregar configuração §e/dcm add <palavra> §7- Adicionar palavra proibida §e/dcm remove <palavra> §7- Remover palavra proibida §e/dcm stats §7- Mostrar estatísticas §e/dcm gui §7- Abrir interface de gerenciamento §e/dcm help §7- Mostrar este menu de ajuda stats-message: "§6Estatísticas de censura: §e{total} mensagens verificadas, §c{blocked} bloqueadas" max-attempts-reached: "§cVocê excedeu o número máximo de tentativas!" player-not-found: "§cJogador não encontrado!" gui:
title: "§8Gerenciamento de Padrões" sections:
offenders:
title: "§c§lPrincipais Infratores" description: "§7Jogadores com mais infrações" player-entry: "§7Infrações: §c{count}" click-details: "§7Clique para detalhes" patterns:
title: "§6§lPadrões Mais Detectados" description: "§7Padrões frequentemente detectados" pattern-entry: "§7Detecções: §e{count}" first-detected: "§7Primeira detecção: §e{date}" last-detected: "§7Última detecção: §e{date}" click-examples: "§7Clique para ver exemplos" learning:
title: "§b§lSistema de Aprendizagem" description: "§7Padrões detectados por IA" confidence: "§7Confiança: §e{percent}%" detections: "§7Detecções: §e{count}" first_detected: "§7Primeira detecção: §e{date}" click_manage: "§7Clique para aprovar/rejeitar" confirm:
title: "Confirmar Ação: {pattern}" approve:
title: "Aprovar Padrão" description: -
"Clique para adicionar este padrão" -
"à lista de padrões proibidos" reject:
title: "Rejeitar Padrão" description: -
"Clique para remover este padrão" -
"do sistema de aprendizagem" success:
approve: "O padrão '{pattern}' foi aprovado e adicionado aos padrões proibidos." reject: "O padrão '{pattern}' foi rejeitado." details:
player-history: "§6=== Infrações de {player} ===" pattern-examples: "§6=== Exemplos para o padrão '{pattern}' ===" example-entry: "§7- §f{message}" notifications:
staff:
suspicious-message: "Mensagem suspeita de {player}: {message}" flagged-fragment: "Flagged fragment: {fragment}" player:
analyzing: "Analisando mensagem..." it:
plugin-enabled: "§aDarikChatManager attivato! {0} modelli caricati." config-reloaded: "§aConfigurazione ricaricata con successo!" word-added: "§aParola '{word}' aggiunta alla lista proibita" word-removed: "§cParola '{word}' rimossa dalla lista proibita" no-permission: "§cNon hai il permesso di eseguire questa azione!" warning-message: "§cIl tuo messaggio conteneva contenuti inappropriati! ({attempts}/{max} tentativi)" help-menu: | §6=== Aiuto DarikChatManager === §e/dcm reload §7- Ricarica configurazione §e/dcm add <parola> §7- Aggiungi parola proibita §e/dcm remove <parola> §7- Rimuovi parola proibita §e/dcm stats §7- Mostra statistiche §e/dcm gui §7- Apri interfaccia di gestione §e/dcm help §7- Mostra questo menu di aiuto stats-message: "§6Statistiche censura: §e{total} messaggi controllati, §c{blocked} bloccati" max-attempts-reached: "§cHai superato il numero massimo di tentativi!" player-not-found: "§cGiocatore non trovato!" gui:
title: "§8Gestione Modelli" sections:
offenders:
title: "§c§lPrincipali Trasgressori" description: "§7Giocatori con più infrazioni" player-entry: "§7Infrazioni: §c{count}" click-details: "§7Clicca per i dettagli" patterns:
title: "§6§lModelli Più Rilevati" description: "§7Modelli rilevati frequentemente" pattern-entry: "§7Rilevamenti: §e{count}" first-detected: "§7Primo rilevamento: §e{date}" last-detected: "§7Ultimo rilevamento: §e{date}" click-examples: "§7Clicca per vedere esempi" learning:
title: "§b§lSistema di Apprendimento" description: "§7Modelli rilevati dall'IA" confidence: "§7Affidabilità: §e{percent}%" detections: "§7Rilevamenti: §e{count}" first_detected: "§7Primo rilevamento: §e{date}" click_manage: "§7Clicca per approvare/rifiutare" confirm:
title: "Conferma Azione: {pattern}" approve:
title: "Approva Modello" description: -
"Clicca per aggiungere questo modello" -
"alla lista dei modelli proibiti" reject:
title: "Rifiuta Modello" description: -
"Clicca per rimuovere questo modello" -
"dal sistema di apprendimento" success:
approve: "Il modello '{pattern}' è stato approvato e aggiunto ai modelli proibiti." reject: "Il modello '{pattern}' è stato rifiutato." details:
player-history: "§6=== Infrazioni di {player} ===" pattern-examples: "§6=== Esempi per il modello '{pattern}' ===" example-entry: "§7- §f{message}" notifications:
staff:
suspicious-message: "Messaggio sospetto da {player}: {message}" flagged-fragment: "Flagged fragment: {fragment}" player:
analyzing: "Analisi del messaggio in corso..."
Code (YAML):
# Detected patterns and their information detected-patterns:
"banan":
count: 12
examples: -
"Check this banan out!" -
"I have banan for sale" first_detected: "Wed Sep 13 14:23:45 UTC 2023" last_detected: "Thu Sep 14 09:12:34 UTC 2023" "hac":
count: 8
examples: -
"Need hac help" -
"Hac tools available" first_detected: "Wed Sep 13 15:11:22 UTC 2023" last_detected: "Thu Sep 14 10:01:15 UTC 2023"
# Admin notes about patterns and actions taken admin-notes:
- "Thu Sep 14 10:05:00 UTC 2023: Added manual banan pattern after player reports
"