Roblox bietet textbasierte Nachrichten zwischen Spielern in Live-Sitzungen durch TextChatService an.Dieser Service hat seine Standardfunktionalität, bietet aber auch eine Reihe von Methoden und Ereignissen für das Erweitern und Anpassen von Chat, wie z. B. die Lieferung von Nachrichten basierend auf angepassten Anforderungen, das Hinzufügen von speziellen Berechtigungen oder Moderation für bestimmte Spieler und das Erstellen von benutzerdefinierten Befehlen, um bestimmte Aktionen auszuführen.
Die folgenden Abschnitte fassen die primären Klassen und Instanzen zusammen, die Sie verwenden können, um das Chat-System anzupassen.
Höchste Ebene der Konfiguration
Die TextChatService Singleton-Klasse ist verantwortlich für die Verwaltung des gesamten Chat-Systems, einschließlich der Verwaltung von Chat-Nachrichtenfiltern, Moderation und Benutzerberechtigungen.Verwende Eigenschaften wie CreateDefaultTextChannels und CreateDefaultCommands, um Standard-Chat-Kanäle und -befehle zu aktivieren oder zu deaktivieren.
Standard-Benutzeroberflächenkonfiguration
TextChatService bietet eine Standard-Benutzeroberfläche, die angepasst werden kann, um den Bedürfnissen Ihrer Erlebnisgerecht zu werden.Jede dieser Konfigurationen kann deaktiviert werden, um das zugeordnete UI-Element auszublenden, und kann durch benutzerdefinierte Schnittstellen ersetzt werden, wenn gewünscht.
- ChatWindowConfiguration — Repräsentiert die Standard-Chat-Fenster-UI, einschließlich ihres Aussehens und ihres Verhaltens. Deaktiviere sie, um das Chat-Fenster auszublenden.
- ChatInputBarConfiguration — Repräsentiert die Standard-Chat-Eingabefeld-UI, einschließlich ihres Aussehens und ihres Verhaltens.
- BubbleChatConfiguration — Repräsentiert die Standard-Bubble-Chat-UI, einschließlich ihres Aussehens und ihres Verhaltens.
Kanäle, Nachrichten und Befehle
TextChannel — Repräsentiert einen Text-Chat-Kanal, der Chatnachrichten vom Client zum Server weiterleitet, die dann von anderen Benutzern basierend auf Berechtigungen angezeigt werden.Diese Instanzen müssen zu TextChatService übergeordnet werden, um zu funktionieren.
TextSource — Repräsentiert einen Benutzer in einem TextChannel.Diese Instanzen werden direkt auf die TextChannel überprüft, wenn AddUserAsync() aufgerufen wird.Textquellen enthalten detaillierte Berechtigungen eines Benutzers im Kanal, wie seine Fähigkeit, Nachrichten zu senden.Ein einzelner Benutzer kann mit mehreren Textquellen verbunden werden, wenn er in mehrere Textkanäle hinzugefügt wurde.
TextChatMessage — Repräsentiert eine einzige Chatnachricht in einem Kanalmit grundlegenden Informationen wie dem Absender der Nachricht, der ursprüngliche Nachricht, die gefilterte Nachricht und dem Zeitpunkt der Erstellung.
TextChatCommand — Ermöglicht es Benutzern, bestimmte Aktionen oder Verhaltensweisen auszulösen, indem sie Nachrichten senden, die PrimaryAlias oder SecondaryAlias entsprechen.Diese Instanzen müssen zu TextChatService übergeordnet werden, um zu funktionieren.
Chat-Flussdiagramm
Text-Chat verwendet das Modell Client-Server, mit einem Sendenclient , dem Server und Empfangsklienten .

Ein Spieler sendet eine Nachricht von seinem lokalen Gerät aus und aktiviert die Methode TextChannel:SendAsync().Diese Methode verarbeitet die Nachricht und bestimmt, ob es sich um einen Chat-Befehl oder eine normale Chat-Nachricht handelt.
Wenn die Nachricht ein Chat-Befehl ist, wird das TextChatCommand.Triggered-Ereignis ausgelöst, um die definierte Actionauszuführen. Es sind keine weiteren Schritte erforderlich.
Wenn die Nachricht eine normale Chatnachricht ist, wird das TextChatService.SendingMessage-Ereignis ausgelöst, um die Nachricht dem Absender auf dem sendenden Client anzuzeigen.Gleichzeitig leitet TextChannel:SendAsync() die Nachricht an den Server weiter.
Der Server feuert TextChannel.ShouldDeliverCallback ab, um zu bestimmen, ob die Nachricht an andere Spieler auf der Grundlage von Berechtigungen und Roblox-Community-Filteranforderungen übermittelt werden soll.
Wenn TextChannel.ShouldDeliverCallback feststellt, dass die Nachricht an andere Spieler geliefert werden kann, wendet der Server alle Filter an und feuert TextChannel.OnIncomingMessage zweimal ab:
Das erste Mal liegt beim sendenden Client und zeigt an, dass der Server die Nachricht durch das TextChatService.MessageReceived verarbeitet.Dieses Ereignis ersetzt die lokale Nachricht auf dem sendenden Client durch die verarbeitete Nachricht vom Server.Die Nachricht ist identisch, wenn das Original keine Filterung erfordert.
Das zweite Mal liegt bei den empfassenden Clients, die das Ereignis TextChatService.MessageReceived auslösen, um die Nachricht anderen Spielern anzuzeigen.
Text-Chat-Hooks und Rückrufe
Die TextChatService API fördert eine klare Trennung auf dem Aussehen und der Lieferung von Chatnachrichten.Mehrere Instanzen des Text-Chat-Systems bieten Hooks und Rückrufe zur Formatierung in zentralisierten, klaren Standorten.

| Rückruf | Rückgabewert | | ----------------------------------------- | ----------------------------------- | | | boolean | | | | | | | | | | | | | | |
Konditionell Nachrichten liefern
Der TextChannel.ShouldDeliverCallback Rückruf sollte nur auf dem Server definiert werden.Der Rückruf wird für jedes TextSource Kind des Textkanals abgefeuert, wenn eine Nachricht gesendet wird, um zu bestimmen, ob die Nachricht geliefert werden soll.Dieser Rückruf kann verwendet werden, um benutzerdefinierte Nachrichtenlieferlogik zu implementieren, die möglicherweise zusätzlichen Spielkontext erfordert, wie:
- Näherungsbasierter Chat, bei dem Benutzer nur Nachrichten an diejenigen senden können, die ihnen nahe stehen.
- Verhindern, dass Benutzer mit bestimmten Attributen Nachrichten an andere senden.
Nachrichtenanzeige anpassen
Die Standard-TextChatService basiert auf reichem Text, um die Darstellung von Nachrichten zu formatieren und anzupassen.Du kannst die folgenden Rückrufe verwenden, um Nachrichten zu formatieren, bevor sie den Benutzern angezeigt werden, zum Beispiel, um Farben hinzuzufügen oder Chat-Tags zu Benutzernamen oder Nachrichteninhalten zu formatieren.
Die folgenden Rückrufe werden aufgerufen, jedes TextChatMessage, das angezeigt werden soll, was es Ihnen ermöglicht, das Aussehen des Chat-Fensters anhand der Inhalte TextChannel, TextSource oder TextChatMessage anzupassen.Wenn ein Client eine Nachricht sendet, werden diese Rückrufe einmal aufgerufen, wenn die Nachricht an den Server gesendet wird und der Wert wird sein.Sobald die Nachricht vom Server empfangen und an andere Benutzer übermittelt wird, erhält der Absenderclient die Nachricht erneut mit einem aktualisierten Enum.TextChatMessageStatus.
- TextChatService.OnIncomingMessage — Dieser Rückruf sollte nur auf dem Client definiert werden.Der Rückruf wird ausgelöst, wenn eine Nachricht vom Server oder wenn der lokale Client gerade eine Nachricht gesendet hat, empfangen wird.Der Rückruf wird auf jede TextChatMessage Anrufen, die von allen TextChannel Instanzen empfangen wird, und ist der Erste, der die Nachricht verarbeitet, bevor sie dem Benutzer angezeigt wird.
- TextChannel.OnIncomingMessage — Dieser Rückruf sollte nur auf dem Client definiert werden.Der Rückruf wird ausgelöst, wenn eine Nachricht vom Server empfangen wird.Der Rückruf wird auf jede TextChatMessage aufgerufen, die vom TextChannel empfangen wird.Standard TextChannel Instanzen, die aus TextChatService.CreateDefaultTextChannels erstellt wurden, haben diesen Rückruf definiert und können überschrieben werden.
- TextChatService.OnBubbleAdded — Dieser Rückruf sollte nur auf dem Client definiert werden.Verwende es, um das Aussehen von Chat-Blasen unabhängig vom Aussehen der Nachricht im Chat-Fenster-UI anzupassen.
- TextChatService.OnChatWindowAdded — Dieser Rückruf sollte nur auf dem Client definiert werden.Verwende es, um das Aussehen von Chatnachrichten im Chat-Fenster unabhängig vom Aussehen der Nachricht in Chat-Blasen anzupassen.
Von veraltetem Chat migrieren
Dieser Abschnitt hilft Ihnen bei der Migration vom älteren Chat-System, indem er alternative Methoden zur Umsetzung häufiger Chat-Funktionen und -Verhaltensweisen bietet, die mit verwendet werden.
Wählen Sie im Explorer-Fenster TextChatService .
Im Eigenschaften-Fenster finden Sie das ChatVersion Dropdown und wählen Sie TextChatService.
Grundfunktionen
Obwohl beide Systeme die gleichen grundlegenden Chat-Funktionen teilen, sind TextChatService Implementierungen im Allgemeinen nachhaltiger und leichter zu wiederholen.
Funktionalität | Alter Chat | TextChatService | Unterschiede |
---|---|---|---|
Sende eine Nachricht | Players:Chat() | TextChannel:SendAsync() | Die SendAsync() -Methode unterstützt fortgeschrittene Chat-Funktionen wie reichliche Textformate und Nachrichten priorität.Es enthält auch eingebaute Filterung, um zu verhindern, dass unangemessene Nachrichten gesendet werden. |
Implementiere Nachrichtenrückrufe | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | Das veraltete Chat-System bindet eine Funktion an Chat-Systemereignisse, um Nachrichten zu liefern.Die beiden Methoden von TextChatService bieten eine bessere Flexibilität und Anpassung. |
Füge benutzerdefinierte Chat-Befehle hinzu | ChatService/ChatCommand modul | TextChatCommand | TextChatService hat eine dedizierte klasse für textbefehle, anstatt einen veralteten chat-modul zu verwenden. |
Zeige eine Nachrichtan | StarterGui:SetCore() mit ChatMakeSystemMessage | TextChannel:DisplaySystemMessage() | Der TextChannel.OnIncomingMessage Rückruf kann eine TextChatMessageProperties Instanz zurückgeben, um das Aussehen der Nachricht anzupassen. |
Chat deaktivieren | Spieleinstellungen in Studio und ChatWindow/ChatSettings Modul zum Verbergen des Chat-Fensters | ChatWindowConfiguration.Enabled |
Nachrichtenfilterung
TextChatService filtert automatisch chatnachrichten basierend auf den kontodaten jedes spieler:in, so dass sie nicht manuell textfilterung für alle arten von chatnachrichten implementieren müssen.
Funktionalität | Alter Chat | TextChatService |
---|---|---|
Chat-Nachricht für einzelnen Spieler:infiltern | Chat:FilterStringAsync() | Automatisch |
Filter-Broadcast-Nachrichten | Chat:FilterStringForBroadcast() | Automatisch |
Fenster- und Blasenchat
Sowohl das Chat-Fenster als auch das Bubble-Chat-Verhalten und die Anpassungsoptionen von TextChatService sind identisch mit denen des veralteten Chat-Systems.Da das veraltete Chat-System nur die Anpassung mit Chat-Modulen oder dem Players -Container erlaubt, bietet der Service dedizierte Klassen ( ChatWindowConfiguration und BubbleChatConfiguration ) an, um alle Chat-Fenster- und Blasen-Chat-Eigenschaften zu verwalten.Darüber hinaus können Sie Ihr Bubble-Chat-Aussehen und -Verhalten leicht anpassen und vorab testen, indem Sie Studio-Einstellungen verwenden, anstatt Allezu skripten.
Funktionalität | Alter Chat | TextChatService |
---|---|---|
Chat-Fenster aktivieren | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
Chataktivieren | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
Chat-Fenster-Eigenschaften einstellen | Players:SetChatStyle() | ChatWindowConfiguration |
Bubble-Chat-Eigenschaften festlegen | Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat``Class.Players:SetChatStyle() | BubbleChatConfiguration |
NPC-Blasen aktivieren | Chat:Chat() | TextChatService:DisplayBubble() |
Lautsprecher "zusätzliche Daten" migrieren
Das veraltete Lua-Chat-System ermöglichte es Entwicklern, SetExtraData auf der Speaker Klasse zu verwenden.Diese Daten wurden verwendet, um die Namensfarbe, Chat-Farbe oder die Namensmarkierung für einen bestimmten Lautsprecherzu formatieren.
Legacy-Chat-System SetExtraData
-- Ein Beispiel für das Festlegen zusätzlicher Daten auf einem Lautsprecher im veralteten Chat-System
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 Äquivalent zu SetExtraData.Verwende stattdessen Callbacks wie OnWindowAdded, um das Aussehen von Nachrichten mit reichhaltigem Text anhand des TextSource der Nachricht anzupassen.
Das Folgende ist ein Beispiel für die Emulation der "zusätzlichen Daten" des veralteten Lua-Chats, indem auf Attribute auf Player -Objekten zugegriffen wird:
TextChatService SetAttribute setzen
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 kannst du die OnChatWindowAdded Rückruf verwenden, um das Aussehen des Chat-Fensters basierend auf den Attributen, die auf dem Spieler:infestgelegt wurden, anzupassen:
TextChatService AufChatWindowAdded
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