Roblox bietet textbasierte Messaging zwischen Spielern in Live-Sitzungen über TextChatService. Dieser Dienst hat seine Standardfunktionen, stellt jedoch auch eine Reihe von Methoden und Ereignissen zur Verfügung, um den Chat zu erweitern und anzupassen, z. B. das Übermitteln von Nachrichten basierend auf angepassten Anforderungen, das Hinzufügen besonderer Berechtigungen oder Moderation für bestimmte Spieler und das Erstellen von benutzerdefinierten Befehlen, um spezifische Aktionen auszuführen.
Top-Level-Konfiguration
TextChatService ist eine Singleton-Klasse, die für die Verwaltung des gesamten Chatsystems verantwortlich ist, einschließlich der Handhabung der Filterung von Chatnachrichten, Moderation und Benutzerberechtigungen. Verwenden Sie Eigenschaften wie CreateDefaultTextChannels und CreateDefaultCommands, um Standard-Chatkanäle und Befehle zu aktivieren oder zu deaktivieren, die TextChatService zur Laufzeit erstellt.

UI-Konfiguration
TextChatService bietet eine Standard-Benutzeroberfläche, die angepasst werden kann, um den Bedürfnissen Ihres Erlebnisses gerecht zu werden. Deaktivieren Sie beliebige dieser Konfigurationen, um das zugehörige UI-Element auszublenden. Wenn gewünscht, können Sie diese UI-Elemente auch durch benutzerdefinierte Schnittstellen ersetzen:
Für weitere Informationen siehe Chatfenster und Bubble-Chat.
Kanäle, Nachrichten und Befehle
TextChannel — Textkanäle leiten von Benutzern gesendete Nachrichten vom Client an den Server weiter, der sie dann anderen Benutzern basierend auf Berechtigungen anzeigt. Textkanäle müssen TextChatService zugeordnet werden, um zu funktionieren.
TextSource — Ein Benutzer in einem TextChannel. Textquellen werden direkt dem TextChannel zugeordnet, wenn AddUserAsync() aufgerufen wird. Textquellen enthalten detaillierte Berechtigungen eines Benutzers im Kanal, z. B. deren Fähigkeit, Nachrichten zu senden. Wenn ein einzelner Benutzer in mehreren Textkanälen ist, sind sie mit mehreren Textquellen verbunden.
TextChatMessage — Eine Nachricht in einem Textkanal. Chatnachrichten enthalten grundlegende Informationen wie den Absender der Nachricht, die ursprüngliche Nachricht, die gefilterte Nachricht und den Zeitstempel der Erstellung.
TextChatCommand — Ermöglicht es Benutzern, spezifische Aktionen oder Verhaltensweisen zu initiieren, indem sie Nachrichten senden, die den Eigenschaften PrimaryAlias oder SecondaryAlias entsprechen. Chatbefehle müssen TextChatService zugeordnet werden, um zu funktionieren.
Chat-Flowchart
Text-Chat verwendet das Client-Server-Modell, mit einem sendenden Client, dem Server und empfangenden Clients.

Ein Spieler sendet eine Nachricht von seinem lokalen Gerät, was die Methode TextChannel:SendAsync() auslöst. Diese Methode verarbeitet die Nachricht und bestimmt, ob es sich um einen Chatbefehl oder eine reguläre Chatnachricht handelt.
Wenn die Nachricht ein Chatbefehl ist, wird das Ereignis TextChatCommand.Triggered ausgelöst, um die definierte Aktion auszuführen. Es sind keine weiteren Schritte erforderlich.
Wenn die Nachricht eine reguläre Chatnachricht ist, wird das Ereignis TextChatService.SendingMessage ausgelöst, um die Nachricht dem Sender auf dem sendenden Client anzuzeigen. Gleichzeitig übergibt TextChannel:SendAsync() die Nachricht an den Server.
Der Server löst TextChannel.ShouldDeliverCallback aus, um zu bestimmen, ob die Nachricht basierend auf Berechtigungen und den Filteranforderungen der Roblox-Community an andere Spieler geliefert werden soll.
Wenn TextChannel.ShouldDeliverCallback bestimmt, dass die Nachricht für die Lieferung an andere Spieler berechtigt ist, wendet der Server alle Filter an und löst TextChannel.OnIncomingMessage zweimal aus:
Das erste Mal geschieht es auf dem sendenden Client und signalisiert, dass der Server die Nachricht über das Ereignis TextChatService.MessageReceived verarbeitet. Dieses Ereignis ersetzt die lokale Nachricht auf dem sendenden Client durch die verarbeitete Nachricht vom Server. Die Nachricht ist identisch, wenn die Originalnachricht keine Filterung erforderte.
Das zweite Mal ist es auf den empfangenden Clients, was das Ereignis TextChatService.MessageReceived auslöst, um die Nachricht anderen Spielern anzuzeigen.
Text-Chat-Hooks und -Callbacks
Die TextChatService API fördert eine klare Trennung im Aussehen und der Lieferung von Chatnachrichten. Mehrere Instanzen des Text-Chat-Systems bieten Hooks und Callbacks, um an zentralen, klaren Orten zu formatieren.

Bedingte Nachrichtenlieferung
Der TextChannel.ShouldDeliverCallback Callback sollte nur auf dem Server definiert werden. Der Callback wird für jedes TextSource Kind des Textkanals ausgelöst, wenn eine Nachricht gesendet wird, um zu bestimmen, ob die Nachricht geliefert werden sollte. Dieser Callback kann verwendet werden, um benutzerdefinierte Logik zur Nachrichtenlieferung zu implementieren, die von zusätzlichem Gameplay-Kontext abhängen kann, z. B.:
- Proximitätsbasierter Chat, bei dem Benutzer nur Nachrichten an diejenigen senden können, die in ihrer Nähe sind.
- Die Verhinderung von Benutzern mit bestimmten Attributen, Nachrichten an andere zu senden.
Anpassung der Nachrichtenanzeige
Die Standard-Benutzeroberfläche von TextChatService verwendet Rich Text, um zu formatieren und anzupassen, wie Nachrichten angezeigt werden. Sie können die folgenden Callbacks verwenden, um Nachrichten zu formatieren, bevor sie den Benutzern angezeigt werden, z.B. um Farben oder Chat-Tags zu Benutzernamen hinzuzufügen oder den Inhalt der Nachricht zu formatieren.
Die folgenden Callbacks werden für jede TextChatMessage aufgerufen, die angezeigt werden soll, wodurch Sie das Erscheinungsbild des Chatfensters basierend auf dem Inhalt von TextChannel, TextSource oder TextChatMessage anpassen können. Wenn ein Client eine Nachricht sendet, werden diese Callbacks einmal aufgerufen, wenn die Nachricht an den Server gesendet wird, und der Wert von TextChatMessage.Status ist Enum.TextChatMessageStatus.Sending. Sobald die Nachricht vom Server empfangen wurde und an andere Benutzer geliefert wird, erhält der sendende Client die Nachricht erneut mit einem aktualisierten Wert von Enum.TextChatMessageStatus.
- TextChatService.OnIncomingMessage — Dieser Callback sollte nur auf dem Client definiert werden. Der Callback wird ausgelöst, wenn eine Nachricht empfangen wird, entweder vom Server oder wenn der lokale Client gerade eine Nachricht gesendet hat. Der Callback wird für jede TextChatMessage, die von allen TextChannel Instanzen empfangen wird, aufgerufen und ist der erste, der die Nachricht verarbeitet, bevor sie dem Benutzer angezeigt wird.
- TextChannel.OnIncomingMessage — Dieser Callback sollte nur auf dem Client definiert werden. Der Callback wird ausgelöst, wenn eine Nachricht vom Server empfangen wird. Der Callback wird für jede TextChatMessage, die vom TextChannel empfangen wird, aufgerufen. Standardmäßige TextChannel Instanzen, die aus TextChatService.CreateDefaultTextChannels erstellt wurden, haben diesen Callback definiert und können überschrieben werden.
- TextChatService.OnBubbleAdded — Dieser Callback sollte nur auf dem Client definiert werden. Verwenden Sie ihn, um das Erscheinungsbild von Chatblasen unabhängig vom Erscheinungsbild der Nachricht in der Chatfenster-Benutzeroberfläche anzupassen.
- TextChatService.OnChatWindowAdded — Dieser Callback sollte nur auf dem Client definiert werden. Verwenden Sie ihn, um das Erscheinungsbild von Chatnachrichten in der Chatfenster-Benutzeroberfläche unabhängig vom Erscheinungsbild der Nachricht in Chatblasen anzupassen.
Migration von altem Chat
Dieser Abschnitt hilft Ihnen, von dem alten Chatsystem zu migrieren, indem er alternative Methoden bereitstellt, um gängige Chatfunktionen und -verhalten mit TextChatService zu implementieren.
Wählen Sie im Explorer Fenster TextChatService aus.
Suchen Sie im Properties Fenster das Dropdown-Menü ChatVersion und wählen Sie TextChatService aus.

Grundlegende Funktionen
Obwohl beide Systeme die gleichen grundlegenden Chatfunktionalitäten teilen, sind Implementierungen von TextChatService im Allgemeinen nachhaltiger und einfacher iterierbar.
| Funktionalität | Alter Chat | TextChatService | Unterschiede |
|---|---|---|---|
| Eine Chatnachricht senden | Players:Chat() | TextChannel:SendAsync() | Die Methode SendAsync() unterstützt fortschrittlichere Chatfunktionen, wie z.B. Rich-Text-Formatierung und Nachrichtenpriorität. Sie enthält auch integrierte Filter, um zu verhindern, dass unangemessene Nachrichten gesendet werden. |
| Messaging-Callbacks implementieren | Chat:InvokeChatCallback() Chat:RegisterChatCallback() | TextChatService.SendingMessage TextChatService.OnIncomingMessage | Das alte Chatsystem bindet eine Funktion an Chat-Systemereignisse zur Übermittlung von Nachrichten. Die beiden Methoden von TextChatService bieten bessere Flexibilität und Anpassungsmöglichkeiten. |
| Benutzerdefinierte Chatbefehle hinzufügen | Modul ChatService/ChatCommand | TextChatCommand | TextChatService hat eine dedizierte Klasse für Textbefehle anstelle eines alten Chatmoduls. |
| Eine Systemnachricht anzeigen | StarterGui:SetCore() unter Verwendung von ChatMakeSystemMessage | TextChannel:DisplaySystemMessage() | Der Callback TextChannel.OnIncomingMessage kann eine Instanz von TextChatMessageProperties zurückgeben, um das Erscheinungsbild der Nachricht anzupassen. |
| Chat deaktivieren | Spieleinstellungen im Studio und das Modul ChatWindow/ChatSettings, um das Chatfenster auszublenden | ChatWindowConfiguration.Enabled |
Nachrichtenfilterung
TextChatService filtert automatisch Chatnachrichten basierend auf den Kontoinformationen jedes Spielers, sodass Sie die Textfilterung für alle Arten von Chatnachrichten nicht manuell implementieren müssen.
| Funktionalität | Alter Chat | TextChatService |
|---|---|---|
| Chatnachricht für einzelnen Spieler filtern | Chat:FilterStringAsync() | Automatisch |
| Broadcast-Nachrichten filtern | Chat:FilterStringForBroadcast() | Automatisch |
Fenster und Bubble-Chat
Das Verhalten und die Anpassungsoptionen des Chatfensters und des Bubble-Chats von TextChatService sind identisch mit denen des alten Chatsystems. Da das alte Chatsystem nur Anpassungen unter Verwendung von Chatmodulen oder dem Players Container ermöglicht, bietet der Dienst dedizierte Klassen (ChatWindowConfiguration und BubbleChatConfiguration), um alle Eigenschaften des Chatfensters und der Bubble-Chats zu verwalten. Darüber hinaus können Sie das Erscheinungsbild und die Verhaltenseigenschaften Ihrer Bubble-Chats mithilfe der Studioeinstellungen leicht anpassen und Live-Vorschauen anzeigen, anstatt alles scriptgesteuert umzusetzen.
| Funktionalität | Alter Chat | TextChatService |
|---|---|---|
| Chatfenster aktivieren | Chat.LoadDefaultChat Players.ClassicChat | ChatWindowConfiguration.Enabled |
| Bubble-Chat aktivieren | Chat.BubbleChatEnabled Players.BubbleChat | BubbleChatConfiguration.Enabled |
| Chatfenstereigenschaften festlegen | Players:SetChatStyle() | ChatWindowConfiguration |
| Bubble-Chat-Eigenschaften festlegen | Chat:SetBubbleChatSettings() Chat.BubbleChatSettingsChanged() Players.BubbleChat Players:SetChatStyle() | BubbleChatConfiguration |
| NPC-Blasen aktivieren | Chat:Chat() | TextChatService:DisplayBubble() |
Migration zusätzlicher Daten des Sprechers
Das alte Lua-Chatsystem erlaubte Entwicklern, SetExtraData in der Speaker-Klasse zu verwenden. Diese Daten wurden verwendet, um die Namensfarbe, die Chatfarbe zu formatieren oder Namensschilder für einen bestimmten Sprecher anzuwenden.
Altes Chatsystem SetExtraData
-- Ein Beispiel für das Festlegen zusätzlicher Daten auf einem Sprecher im alten Chatsystem
ChatService.SpeakerAdded:Connect(function(playerName)
local speaker = ChatService:GetSpeaker(playerName)
speaker:SetExtraData("NameColor", Color3.fromRGB(255, 255, 55))
speaker:SetExtraData("ChatColor", Color3.fromRGB(212, 175, 55))
speaker:SetExtraData("Tags", {{TagText = "YourTagName", TagColor = Color3.fromRGB(0, 255, 0)}, {TagText = "OtherTagName", TagColor = Color3.fromRGB(255, 0, 0)}})
end)
TextChatService hat kein direktes Pendant zu SetExtraData. Verwenden Sie stattdessen Callbacks wie OnWindowAdded, um das Erscheinungsbild der Nachrichten basierend auf der TextSource der Nachricht mit Rich Text anzupassen.
Das folgende Beispiel zeigt, wie man die "zusätzlichen Daten" des alten Lua-Chats emulieren kann, indem man Attribute an Player-Objekten zugreift:
TextChatService SetAttributes
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
player:SetAttribute("NameColor", Color3.fromRGB(255, 255, 55))
player:SetAttribute("ChatColor", Color3.fromRGB(212, 175, 55))
player:SetAttribute("isYourTag", true)
player:SetAttribute("isOtherTag", true)
end)
Dann können Sie den Callback OnChatWindowAdded verwenden, um das Erscheinungsbild des Chatfensters basierend auf den Attributen, die am Spieler festgelegt sind, anzupassen:
TextChatService OnChatWindowAdded
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
TextChatService.OnChatWindowAdded = function(textChatMessage)
local textSource = textChatMessage.TextSource
if textSource then
local player = Players:GetPlayerByUserId(textSource.UserId)
if player then
local overrideProperties = TextChatService.ChatWindowConfiguration:DeriveNewMessageProperties()
overrideProperties.PrefixText = textChatMessage.PrefixText
overrideProperties.Text = textChatMessage.Text
local nameColor = player:GetAttribute("NameColor")
if nameColor and typeof(nameColor) == "Color3" then
overrideProperties.PrefixTextProperties.TextColor3 = nameColor
end
local chatColor = player:GetAttribute("ChatColor")
if chatColor and typeof(chatColor) == "Color3" then
overrideProperties.TextColor3 = chatColor
end
local isYourTag = player:GetAttribute("isYourTag")
if isYourTag == true then
overrideProperties.PrefixText = `<font color='rgb(0, 255, 0)'>[YourTag]</font> {overrideProperties.PrefixText}`
end
local isOtherTag = player:GetAttribute("isOtherTag")
if isOtherTag == true then
overrideProperties.PrefixText = `<font color='rgb(255, 0, 0)'>[OtherTag]</font> {overrideProperties.PrefixText}`
end
return overrideProperties
end
end
return nil
end