Text-Chat-Übersicht

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

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.

Höchste Ebene der Konfiguration

TextChatService ist eine Singleton-Klasse, die für die Verwaltung des gesamten Chat-Systems verantwortlich ist, 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, die TextChatService zur Laufzeit erstellt werden.

Benutzeroberflächenkonfiguration

TextChatService bietet eine Standard-Benutzeroberfläche, die angepasst werden kann, um den Bedürfnissen Ihrer Erfahrung gerecht zu werden.Deaktiviere eine dieser Konfigurationen, um ihr zugeordnetes UI-Element auszublenden.Wenn gewünscht, können Sie diese UI-Elemente auch durch benutzerdefinierte Interfaces ersetzen:

Für weitere Informationen, siehe Chat-Fenster und Blasenchat.

Kanäle, Nachrichten und Befehle

  • TextChannel — Textkanäle leiten benutzerdefinierte Nachrichten vom Client zum Server weiter, der sie dann anderen Benutzern basierend auf Berechtigungen anzeigt.Textkanäle müssen zu TextChatService in Beziehung gesetzt werden, um zu funktionieren.

  • TextSource — Ein Benutzer in einem TextChannel.Textquellen werden direkt mit dem TextChannel verbunden, wenn AddUserAsync() aufgerufen wird.Textquellen enthalten detaillierte Berechtigungen eines Benutzers im Kanal, wie seine Fähigkeit, Nachrichten zu senden.Wenn ein einzelner Benutzer in mehreren Textkanälen ist, werden sie mit mehreren Textquellen verbunden.

  • TextChatMessage — Eine Nachricht in einem Textkanal.Chat-Nachrichten enthalten grundlegende Informationen wie den Absender der Nachricht, die ursprüngliche Nachricht, die gefilterte Nachricht und den Zeitpunkt der Erstellung.

  • TextChatCommand — Lässt Benutzer bestimmte Aktionen oder Verhaltensweisen auslösen, indem sie Nachrichten senden, die den PrimaryAlias oder SecondaryAlias Eigenschaften entsprechen.Chat-Befehle 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 .

A flowchart for in-experience text chat.
  1. 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 Aktion auszufü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.

  2. 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.

  3. 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:

    1. 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.

    2. 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.

A flowchart of the TextChatService callbacks order

| 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 veralteten Chat-System, indem er alternative Methoden zur Umsetzung häufiger Chat-Funktionen und -Verhaltensweisen bietet, die mit TextChatService verwendet werden.

  1. Wählen Sie im Explorer-Fenster TextChatService .

  2. 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ätAlter ChatTextChatServiceUnterschiede
Sende eine ChatnachrichtPlayers: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ückrufeChat:InvokeChatCallback()``Class.Chat:RegisterChatCallback()Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessageDas 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 hinzuChatService/ChatCommand modulTextChatCommandTextChatService hat eine dedizierte klasse für textbefehle, anstatt einen veralteten chat-modul zu verwenden.
Zeige eine Systemnachricht anStarterGui:SetCore() mit ChatMakeSystemMessageTextChannel:DisplaySystemMessage()Der TextChannel.OnIncomingMessage Rückruf kann eine TextChatMessageProperties Instanz zurückgeben, um das Aussehen der Nachricht anzupassen.
Chat deaktivierenSpieleinstellungen in Studio und ChatWindow/ChatSettings Modul zum Verbergen des Chat-FenstersChatWindowConfiguration.Enabled

Nachrichtenfilterung

TextChatService filtert automatisch chatnachrichten basierend auf den kontodaten jedes spielers, so dass sie nicht manuell textfilterung für alle arten von chatnachrichten implementieren müssen.

FunktionalitätAlter ChatTextChatService
Chat-Nachricht für einzelnen Spieler filternChat:FilterStringAsync()Automatisch
Filter-Broadcast-NachrichtenChat: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 alle zu skripten.

FunktionalitätAlter ChatTextChatService
Chat-Fenster aktivierenClass.Chat.LoadDefaultChat``Class.Players.ClassicChatChatWindowConfiguration.Enabled
Blasenchat aktivierenClass.Chat.BubbleChatEnabled``Class.Players.BubbleChatBubbleChatConfiguration.Enabled
Chat-Fenster-Eigenschaften einstellenPlayers:SetChatStyle()ChatWindowConfiguration
Bubble-Chat-Eigenschaften festlegenChat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat``Class.Players:SetChatStyle()BubbleChatConfiguration
NPC-Blasen aktivierenChat: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 Redner zu 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 festgelegt 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