Overzicht van tekstchat

*Deze inhoud is vertaald met behulp van AI (bèta) en kan fouten bevatten. Klik hier om deze pagina in het Engels te bekijken.

Roblox biedt tekstgebaseerde messaging tussen spelers in live sessies via TextChatService, een singleton klasse die verantwoordelijk is voor het beheren van het algehele chatsysteem, inclusief chatberichtfiltering, moderatie en gebruikersrechten. Deze service heeft zijn standaardfunctionaliteit en biedt ook een set methoden en evenementen voor het uitbreiden en aanpassen van chat, zoals het afleveren van berichten op basis van aangepaste vereisten, het toevoegen van speciale rechten of moderatie aan specifieke spelers, en het creëren van aangepaste commando's om specifieke acties uit te voeren.

UI-configuratie

TextChatService biedt een standaard UI die kan worden aangepast aan de behoeften van jouw game. Schakel een van deze configuraties uit om het bijbehorende UI-element te verbergen. Indien gewenst, kun je deze UI-elementen ook vervangen door aangepaste interfaces:

Voor meer informatie, zie Chatvenster en Bubble chat.

Kanalen, berichten en commando's

  • TextChannel — Tekstkanalen verzenden door gebruikers verzonden berichten van de client naar de server, die ze vervolgens aan andere gebruikers toont op basis van rechten. Tekstkanalen moeten aan TextChatService worden gekoppeld om te functioneren.

  • TextSource — Een gebruiker in een TextChannel. Tekstbronnen worden direct aan de TextChannel gekoppeld wanneer AddUserAsync() wordt aangeroepen. Tekstbronnen bevatten gedetailleerde rechten van een gebruiker in het kanaal, zoals hun mogelijkheid om berichten te verzenden. Als een enkele gebruiker in meerdere tekstkanalen zit, zijn ze gekoppeld aan meerdere tekstbronnen.

  • TextChatMessage — Een bericht in een tekstkanaal. Chatberichten bevatten basisinformatie zoals de afzender van het bericht, het originele bericht, het gefilterde bericht en de tijdstempel van de creatie.

  • TextChatCommand — Laat gebruikers specifieke acties of gedragingen aanroepen door berichten te verzenden die overeenkomen met de PrimaryAlias of SecondaryAlias eigenschappen. Chatcommando's moeten aan TextChatService worden gekoppeld om te functioneren.

Chat stroomdiagram

Tekstchat gebruikt het client-server model, met een verzendende client, de server, en ontvangende clients.

Een stroomdiagram voor tekstchat in de game.
  1. Een speler verzendt een bericht vanaf hun lokale apparaat, wat de TextChannel:SendAsync() methode activeert. Deze methode verwerkt het bericht en bepaalt of het een chatcommando of een regulier chatbericht is.

    • Als het bericht een chatcommando is, wordt het TextChatCommand.Triggered evenement geactiveerd om de gedefinieerde actie uit te voeren. Geen verdere stappen zijn vereist.

    • Als het bericht een regulier chatbericht is, wordt het TextChatService.SendingMessage evenement geactiveerd om het bericht aan de afzender op de verzendende client weer te geven. Tegelijkertijd geeft TextChannel:SendAsync() het bericht door aan de server.

  2. De server activeert TextChannel.ShouldDeliverCallback om te bepalen of het bericht aan andere spelers moet worden afgeleverd op basis van rechten en de filteringseisen van de Roblox-gemeenschap.

  3. Als TextChannel.ShouldDeliverCallback bepaalt dat het bericht in aanmerking komt voor aflevering aan andere spelers, past de server eventuele filters toe en activeert TextChannel.OnIncomingMessage twee keer:

    1. De eerste keer is op de verzendende client en geeft aan dat de server het bericht verwerkt via het TextChatService.MessageReceived evenement. Dit evenement vervangt het lokale bericht op de verzendende client met het verwerkte bericht van de server. Het bericht is identiek als het origineel geen filtering vereiste.

    2. De tweede keer is op de ontvangende clients, wat het TextChatService.MessageReceived evenement activeert om het bericht aan andere spelers weer te geven.

Tekstchat hooks en callbacks

De TextChatService API moedigt een duidelijke scheiding aan van het uiterlijk en de aflevering van chatberichten. Meerdere instanties van het tekstchatsysteem bieden hooks en callbacks om te formatteren op gecentraliseerde, duidelijke locaties.

Een stroomdiagram van de volgorde van de TextChatService callbacks

Voorwaardelijk berichten afleveren

De TextChannel.ShouldDeliverCallback callback moet alleen op de server worden gedefinieerd. De callback wordt geactiveerd voor elke TextSource kind van het tekstkanaal wanneer een bericht wordt verzonden om te bepalen of het bericht moet worden afgeleverd. Deze callback kan worden gebruikt om aangepaste berichtafleveringslogica te implementeren die kan afhangen van extra gameplaycontext, zoals:

  • Proximity-gebaseerde chat waarbij gebruikers alleen berichten kunnen verzenden naar degenen die dichtbij hen zijn.
  • Voorkomen dat gebruikers met bepaalde attributen berichten naar anderen kunnen verzenden.

Pas de weergave van berichten aan

De standaard TextChatService UI is afhankelijk van rijke tekst om te formatteren en aan te passen hoe berichten worden weergegeven. Je kunt de volgende callbacks gebruiken om berichten te formatteren voordat ze aan gebruikers worden weergegeven, bijvoorbeeld om kleuren of chat-tags aan gebruikersnamen toe te voegen of de inhoud van berichten te formatteren.

De volgende callbacks worden aangeroepen voor elke TextChatMessage die op het punt staat om weergegeven te worden, waardoor je het uiterlijk van het chatvenster kunt aanpassen op basis van de inhoud van TextChannel, TextSource of TextChatMessage. Wanneer een client een bericht verzendt, worden deze callbacks eenmaal aangeroepen wanneer het bericht naar de server wordt verzonden en de TextChatMessage.Status waarde zal Enum.TextChatMessageStatus.Sending zijn. Zodra het bericht door de server is ontvangen en aan andere gebruikers wordt afgeleverd, ontvangt de verzendende client het bericht opnieuw met een bijgewerkte Enum.TextChatMessageStatus waarde.

  • TextChatService.OnIncomingMessage — Deze callback moet alleen op de client worden gedefinieerd. De callback wordt geactiveerd wanneer een bericht wordt ontvangen, hetzij van de server of als de lokale client net een bericht heeft verzonden. De callback wordt aangeroepen voor elke TextChatMessage die wordt ontvangen van alle TextChannel instanties en is de eerste die het bericht verwerkt voordat het aan de gebruiker wordt weergegeven.
  • TextChannel.OnIncomingMessage — Deze callback moet alleen op de client worden gedefinieerd. De callback wordt geactiveerd wanneer een bericht van de server wordt ontvangen. De callback wordt aangeroepen voor elke TextChatMessage die wordt ontvangen van de TextChannel. Standaard TextChannel instanties die zijn aangemaakt vanuit TextChatService.CreateDefaultTextChannels hebben deze callback gedefinieerd en kunnen worden overschreven.
  • TextChatService.OnBubbleAdded — Deze callback moet alleen op de client worden gedefinieerd. Gebruik het om het uiterlijk van chatbellen aan te passen, onafhankelijk van het uiterlijk van het bericht in de chatvenster UI.
  • TextChatService.OnChatWindowAdded — Deze callback moet alleen op de client worden gedefinieerd. Gebruik het om het uiterlijk van chatberichten in de chatvenster UI aan te passen, onafhankelijk van het uiterlijk van het bericht in chatbellen.

Migreren van legacy chat

Deze sectie helpt je bij het migreren van het legacy chatsysteem door alternatieve methoden te bieden voor het implementeren van veelvoorkomende chatfunctionaliteiten en -gedragingen met behulp van TextChatService.

  1. In het Explorer venster, selecteer TextChatService.

  2. In het Properties venster, zoek de ChatVersion dropdown en selecteer TextChatService.

Basisfunctionaliteiten

Hoewel beide systemen dezelfde basis chatfunctionaliteiten delen, zijn TextChatService implementaties over het algemeen duurzamer en gemakkelijker te itereren.

FunctionaliteitLegacy chatTextChatServiceVerschillen
Verzend een chatberichtPlayers:Chat()TextChannel:SendAsync()De SendAsync() methode ondersteunt meer geavanceerde chatfuncties, zoals rijke tekstopmaak en berichtprioriteit. Het bevat ook ingebouwde filtering om te helpen ongepaste berichten te voorkomen.
Implementeer messaging callbacksChat:InvokeChatCallback()
Chat:RegisterChatCallback()
TextChatService.SendingMessage
TextChatService.OnIncomingMessage
Het legacy chatsysteem bindt een functie aan chat systeem evenementen voor het afleveren van berichten. De twee methoden van TextChatService bieden betere flexibiliteit en aanpassing.
Voeg aangepaste chatcommando's toeChatService/ChatCommand moduleTextChatCommandTextChatService heeft een speciale klasse voor tekstcommando's in plaats van een legacy chatmodule te gebruiken.
Toon een systeemberichtStarterGui:SetCore() met ChatMakeSystemMessageTextChannel:DisplaySystemMessage()De TextChannel.OnIncomingMessage callback kan een TextChatMessageProperties instantie retourneren om het uiterlijk van het bericht aan te passen.
Schakel chat uitChatWindow/ChatSettings module voor het verbergen van het chatvensterChatWindowConfiguration.Enabled

Berichtfiltering

TextChatService filtert automatisch chatberichten op basis van de accountinformatie van elke speler, zodat je geen handmatige tekstfiltering hoeft te implementeren voor alle soorten chatberichten.

FunctionaliteitLegacy chatTextChatService
Filter chatbericht voor individuele spelerChat:FilterStringAsync()Automatisch
Filter uitzending berichtenChat:FilterStringForBroadcast()Automatisch

Venster en bubble chat

Zowel het chatvenster als de bubble chat gedrag en aanpassingsopties van TextChatService zijn identiek aan die van het legacy chatsysteem. Aangezien het legacy chatsysteem alleen aanpassing toestaat met behulp van chatmodules of de Players container, biedt de service speciale klassen (ChatWindowConfiguration en BubbleChatConfiguration) om alle eigenschappen van het chatvenster en bubble chat te beheren. Bovendien kun je eenvoudig de eigenschappen van het uiterlijk en gedrag van je bubble chat aanpassen en bekijken met behulp van Studio-instellingen in plaats van dat je ze allemaal moet scripten.

Migreren van "extra gegevens" van sprekers

Het legacy Lua chatsysteem stond ontwikkelaars toe om SetExtraData op de Speaker klasse te gebruiken. Deze gegevens werden gebruikt om de naamkleur, chatkleur te formatteren, of om naamlabels toe te passen voor een gegeven spreker.

Legacy Chat System SetExtraData
-- Een voorbeeld van het instellen van extra gegevens op een spreker in het legacy chatsysteem
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 heeft geen directe tegenhanger van SetExtraData. Gebruik in plaats daarvan callbacks zoals OnWindowAdded om het uiterlijk van berichten aan te passen met behulp van rijke tekst op basis van de TextSource van het bericht.

Het volgende is een voorbeeld van het emuleren van de "extra gegevens" van het legacy Lua chat door toegang te krijgen tot attributen op Player objecten:

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)

Vervolgens kun je de OnChatWindowAdded callback gebruiken om het uiterlijk van het chatvenster aan te passen op basis van de attributen die op de speler zijn ingesteld:

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
©2026 Roblox Corporation. Roblox, het Roblox-logo en Powering Imagination behoren tot onze geregistreerde en niet-geregistreerde handelsmerken in de VS en andere landen.