Dokumentation

Pepper Chat

Kostenloser Chat mit Reitern für Alle, OOC und Team – mit Werkzeugen, die dein Team direkt im Chatfenster bedient.

Kostenlos und Open Source: https://github.com/PepperScripts/pepper_chat

Überblick

Pepper Chat ersetzt den Standard-Chat. Deine Spieler wechseln zwischen den Reitern Alle, OOC und Team, und dein Team schaltet per Rechtsklick stumm, löscht Nachrichten und sendet Ankündigungen direkt im Chatfenster – ohne Befehle zu tippen. Spam-Schutz und Wortfilter prüfen jede Nachricht auf dem Server, Stummschaltungen liegen in der Datenbank und überstehen den Neustart, alles landet im Tagesprotokoll.

Features

  • Reiter: Alle, OOC und Team (den Team-Reiter sehen nur Teamler)
  • Team-Werkzeuge direkt im Chatfenster, ohne Befehle:
    • Rechtsklick auf eine Nachricht: Spieler stummschalten (10 min, 1 Std., 24 Std., dauerhaft) oder Nachricht löschen
    • Knöpfe: Ankündigung an alle, Langsam-Modus, Liste der Stummgeschalteten, Chat leeren
  • Ankündigungen erscheinen im Chat und als Banner oben am Bildschirm
  • Team-Abzeichen vor dem Namen (Admin, Mod), Farben und Texte in der Config
  • Spam-Schutz: Wartezeit, Wiederholungsprüfung und Flood-Sperre; Wortfilter, der zensiert oder blockiert
  • Stummschaltungen liegen in der Datenbank und überstehen einen Neustart
  • Protokoll in eine Tagesdatei und auf Wunsch an einen Discord-Webhook
  • Befehlsvorschläge beim Tippen, Eingabeverlauf (Pfeiltasten), Zeichenzähler
  • Ersetzt den Standard-Chat (provide 'chat'): chat:addMessage, chat:addSuggestion, Vorlagen und exports.chat laufen weiter
  • Deutsch und Englisch dabei

Voraussetzungen

Abhängigkeit Pflicht/optional Wofür Link
FiveM-Server (fx_version 'cerulean', Lua 5.4) Pflicht Läuft die Ressource https://docs.fivem.net/docs/server-manual/setting-up-a-server/
oxmysql Pflicht Tabelle pepper_chat_mutes für Stummschaltungen https://github.com/overextended/oxmysql
MySQL/MariaDB-Datenbank Pflicht Wird über oxmysql angesprochen, Tabelle legt das Script selbst an –
ESX Legacy, QBCore oder Qbox optional Team-Rollen aus der Gruppe (ESX) bzw. den Rechten (QBCore/Qbox); ohne Framework per ACE –
OneSync nicht nötig – –

Installation

  1. Ordner pepper_chat in deinen resources-Ordner legen. Den Ordnernamen nicht umbenennen – Exports und NUI-Aufrufe hängen am Namen pepper_chat.
  2. In der server.cfg die Zeile ensure chat (Standard-Chat) entfernen und Pepper Chat nach oxmysql starten:
    ensure oxmysql
    # ensure chat   ← entfernen
    ensure pepper_chat
    
  3. Server neu starten. Die Tabelle pepper_chat_mutes wird beim ersten Start automatisch angelegt. Willst du sie von Hand anlegen, importiere install/pepper_chat.sql in deine Datenbank.
  4. Config.Locale = 'de' und deine Team-Gruppen (Config.Staff) in der config.lua einstellen.

Erster Test

  1. Im Spiel T drücken – das Chatfenster mit den Reitern öffnet sich. Eine Nachricht schreiben und mit Enter senden.
  2. Tab wechselt den Reiter (ohne offene Vorschläge), /ooc Hallo schreibt in den OOC-Kanal.
  3. Als Teamler: Rechtsklick auf eine Nachricht – das Menü zum Stummschalten und Löschen erscheint, dazu der Reiter Team und die Werkzeug-Knöpfe.
  4. In der Server-Konsole say Test eingeben – die Zeile erscheint bei allen im Chat.
  5. Prüfe, ob im Ordner logs/ eine Datei chat-JJJJ-MM-TT.log entstanden ist.

Konfiguration

Datei Steuert
config.lua Sprache, Taste, Kanäle, Anzeige, Aussehen, Banner, Team-Rollen, Befehlsnamen, angezeigter Name (wird an die Spieler geschickt)
config_server.lua Protokoll und Webhook, Spam-Schutz, Wortfilter (nur auf dem Server, nie an Spieler)
locales/de.json, locales/en.json Alle Texte im Chat und in der Oberfläche
html/style.css Aussehen des Chatfensters

Grundlagen und Anzeige

Option Standard Beschreibung
Config.Locale 'en' Sprache 'de' oder 'en'
Config.OpenKey 't' Taste zum Öffnen; Spieler ändern sie unter Einstellungen → Tastenbelegung → FiveM
Config.Channels { global = true, ooc = true, team = true } Kanäle an/aus
Config.DefaultChannel 'global' In welchen Kanal der Reiter „Alle“ schreibt
Config.ShowIds true Server-ID hinter dem Namen
Config.ShowTime true Uhrzeit vor der Nachricht
Config.MaxLength 200 Höchstlänge einer Nachricht
Config.MaxMessages 100 So viele Nachrichten bleiben im Verlauf
Config.FadeAfter 12 Sekunden bis zum Ausblenden, 0 = nie
Config.JoinLeaveMessages false „ist beigetreten / hat den Server verlassen“ im Chat

Aussehen und Banner

Config.UI = { left = 1.2, top = 4.0, width = 31, height = 17, scale = 1.0, accent = '#E5484D' }
Config.AnnouncementBanner = { enabled = true, duration = 8 }
Option Standard Beschreibung
Config.UI.left / top 1.2 / 4.0 Position in Prozent des Bildschirms
Config.UI.width / height 31 / 17 Größe in Textzeilen-Einheiten
Config.UI.scale 1.0 Gesamtgröße, 1.0 = normal
Config.UI.accent '#E5484D' Akzentfarbe (aktiver Reiter, Knöpfe)
Config.AnnouncementBanner enabled = true, duration = 8 Ankündigung zusätzlich als Banner oben, Dauer in Sekunden

Team-Rollen

Config.Staff = {
    { key = 'admin', label = 'Admin', color = '#E5484D', groups = { 'superadmin', 'admin', 'god' } },
    { key = 'mod', label = 'Mod', color = '#4C9AFF', groups = { 'mod', 'moderator', 'support' } },
}

Die erste passende Rolle gewinnt (oben = höher). Geprüft werden das ACE-Recht pepperchat.<key>, die ESX-Gruppe (getGroup), QBCore-Rechte (HasPermission) und ACE-Gruppen gleichen Namens (Qbox). label und color bilden das Abzeichen vor dem Namen.

Option Standard Beschreibung
Config.SlowModeSteps { 0, 5, 10, 30, 60 } Auswahl im Team-Menü für den Langsam-Modus (Sekunden)
Config.MuteSteps { 10, 60, 1440, 0 } Auswahl im Rechtsklick-Menü (Minuten, 0 = dauerhaft)
Config.Commands siehe „Befehle und Rechte“ Befehlsnamen ohne Schrägstrich
Config.GetName GetPlayerName(source) Welcher Name im Chat steht – hier dein Framework für den Charakternamen abfragen

Protokoll, Spam-Schutz und Wortfilter (config_server.lua)

Option Standard Beschreibung
ServerConfig.Log.file true Tagesdatei logs/chat-JJJJ-MM-TT.log im Ressourcenordner
ServerConfig.Log.webhook '' Discord-Webhook-URL, '' = aus (Erwähnungen mit @ werden entschärft)
ServerConfig.Spam.cooldown 1000 Millisekunden zwischen zwei Nachrichten
ServerConfig.Spam.duplicateWindow 10 Gleiche Nachricht erst nach so vielen Sekunden wieder
ServerConfig.Spam.floodCount / floodWindow 6 / 10 So viele Nachrichten in so vielen Sekunden gelten als Flood
ServerConfig.Spam.floodMute 60 Danach so viele Sekunden stumm
ServerConfig.Filter.mode 'censor' 'censor' (Sternchen), 'block' (Nachricht verwerfen) oder 'off'
ServerConfig.Filter.words leer Liste der gefilterten Wörter (Groß-/Kleinschreibung egal)

Spam-Schutz und Langsam-Modus gelten nicht fürs Team, der Wortfilter nicht im Team-Kanal.

Für Entwickler

-- Client
exports.pepper_chat:setVisible(false)                       -- Chat ausblenden, z. B. für eine Zwischensequenz
TriggerEvent('chat:addMessage', { color = { 255, 196, 107 }, args = { 'Bank', 'Du hast 500 $ erhalten.' } })
-- Server
TriggerClientEvent('chat:addMessage', source, { args = { 'Server', 'Willkommen!' } })
exports.pepper_chat:addMessage(-1, { args = { 'Server', 'Neustart um 18 Uhr.' } })

Wie beim Standard-Chat können andere Ressourcen auf dem Server das Event chatMessage abfangen (CancelEvent()) oder mit registerMessageHook Nachrichten ändern und abbrechen. Farbcodes ^0–^9 funktionieren in Nachrichten von Scripts; aus Spielernachrichten werden sie entfernt.

Befehle und Rechte

Befehl Wer Was
/ooc [Text] alle Nachricht in den OOC-Kanal
/team [Text] Team Nachricht in den Team-Chat
/announce [Text] Team Ankündigung an alle (Chat + Banner)
/chatclear Team Leert den Chat für alle
/chatmute [ID] [Minuten] [Grund] Team Spieler stummschalten, 0 = dauerhaft
/chatunmute [ID] Team Stummschaltung aufheben (Spieler muss online sein)
/chatslow [Sekunden] Team Langsam-Modus, 0 = aus (höchstens 600)
say [Text] nur Server-Konsole Zeile als „Konsole“ in den Chat

Alle Namen änderst du in Config.Commands. Die Team-Befehle funktionieren auch in der Server-Konsole.

Wer gehört zum Team? Die erste passende Rolle in Config.Staff:

  • ESX: die Gruppe des Spielers (admin, superadmin, mod …)
  • QBCore / Qbox: das Recht des Spielers (god, admin, mod)
  • Ohne Framework: in der server.cfg
    add_ace group.admin pepperchat.admin allow
    add_ace group.moderator pepperchat.mod allow
    

Tasten im Chatfenster: T öffnen (änderbar), Enter senden, Esc schließen, Tab Vorschlag übernehmen bzw. Reiter wechseln, Pfeil hoch/runter Eingabeverlauf oder Vorschläge, Bild hoch/runter im Verlauf blättern, Rechtsklick (nur Team) Menü für Nachricht und Spieler.

Exports und Events

Seite Name Wirkung
Client exports.pepper_chat:setVisible(bool) Chat ein-/ausblenden
Client exports.pepper_chat:addMessage(msg) / addSuggestion(name, help, params) Wie beim Standard-Chat
Client Events chat:addMessage, chatMessage, chat:addSuggestion(s), chat:removeSuggestion, chat:addTemplate, chat:clear Verträglich mit dem Standard-Chat
Server exports.pepper_chat:addMessage(target, msg) Nachricht an einen Spieler oder -1 = alle
Server exports.pepper_chat:registerMessageHook(fn) Spielernachrichten vor dem Verteilen ändern oder abbrechen
Server Event chatMessage(source, name, text) Mitlesen, mit CancelEvent() abbrechen

FAQ

Der Chat öffnet sich doppelt oder gar nicht – was tun?

Meist läuft noch der Standard-Chat oder ein anderer Chat. Entferne ensure chat (und andere Chat-Ressourcen) aus der server.cfg. Pepper Chat meldet sich per provide 'chat' als Ersatz an, es darf nur einer laufen.

Läuft mein anderes Script, das chat voraussetzt, weiter?

Ja. Durch provide 'chat' gelten Abhängigkeiten auf chat als erfüllt, und die Events chat:addMessage, chat:addSuggestion, chatMessage und Vorlagen (chat:addTemplate) werden verstanden.

Brauche ich eine Datenbank?

Ja, für die Stummschaltungen über oxmysql. Die Tabelle pepper_chat_mutes legt das Script beim Start selbst an; von Hand geht es mit install/pepper_chat.sql.

Ich bin Admin, sehe aber den Team-Reiter nicht?

Prüfe, ob deine Gruppe (ESX) bzw. dein Recht (QBCore/Qbox) in groups einer Rolle in Config.Staff steht, oder setze ohne Framework add_ace group.admin pepperchat.admin allow. Die Rolle wird bis zu 30 Sekunden zwischengespeichert – nach einer Änderung neu verbinden.

Wie zeige ich den Charakternamen statt des FiveM-Namens?

Ändere Config.GetName in der config.lua: Die Funktion läuft auf dem Server und bekommt die source. Dort fragst du dein Framework ab und gibst den Namen zurück (höchstens 40 Zeichen werden angezeigt).

Wie ändere ich Farben und Position?

Akzentfarbe, Position, Größe und Skalierung stehen in Config.UI, die Farben der Team-Abzeichen in Config.Staff (color). Für tiefere Änderungen passt du html/style.css an.

Wie ändere ich die Texte?

Alle Texte stehen in locales/de.json bzw. locales/en.json. Mit Config.Locale wählst du die Sprache.

Bleiben Stummschaltungen nach einem Neustart erhalten?

Ja. Sie liegen in der Datenbank, gebunden an die Rockstar-Lizenz des Spielers. Abgelaufene werden beim Start gelöscht. Hat ein Spieler keine Lizenz-Kennung, gilt die Stummschaltung nur für die aktuelle Sitzung.

Wie hebe ich eine Stummschaltung für einen Spieler auf, der offline ist?

Über das Team-Menü im Chat: Die Liste der Stummgeschalteten zeigt alle aktiven Einträge, dort hebst du sie auf. /chatunmute [ID] funktioniert nur für Spieler, die gerade online sind.

Wie richte ich den Discord-Webhook ein?

Trage die Webhook-URL in config_server.lua bei ServerConfig.Log.webhook ein. Die Zeilen werden gesammelt und etwa alle 5 Sekunden gebündelt gesendet. Die Datei liegt nur auf dem Server und wird nie an Spieler geschickt.

Warum kommen Spielernachrichten ohne Farbe an?

Farbcodes ^0–^9 und Steuerzeichen werden aus Spielernachrichten auf dem Server entfernt. In Nachrichten deiner Scripts (chat:addMessage) funktionieren sie weiter.

Ein Spieler tippt einen Befehl, den es nicht gibt – landet das im Chat?

Nein. Unbekannte Befehle werden nicht als Nachricht an alle verteilt; der Spieler bekommt einen Hinweis.

Wie update ich Pepper Chat?

Ordner ersetzen und vorher config.lua, config_server.lua und geänderte Sprachdateien sichern. Die Datenbank bleibt erhalten. Änderungen stehen in der CHANGELOG.md im Ressourcen-Ordner.

Support

Fragen oder Fehler? Öffne ein Ticket in unserem Discord: https://discord.gg/6NaFJWKDYu – verknüpfe deinen Kauf vorher mit /verify. Den Quellcode findest du auf GitHub: https://github.com/PepperScripts/pepper_chat

Permanent auf dem Dev-Server von Pepper Scripts getestet.

Changelog

Aktuelle Version 1.0.0 (erste Version). Alle Änderungen stehen in der CHANGELOG.md im Ressourcen-Ordner.


Fehler gefunden? Melde ihn im Discord.