Metin sohbeti genel bakış

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Roblox, oyuncular arasında canlı oturumlarda metin tabanlı mesajlaşma sunar; bu işlemi yöneten tekil bir sınıf olan TextChatService aracılığıyla gerçekleşir. Bu sınıf, sohbet mesajı filtreleme, moderasyon ve kullanıcı izinleri gibi genel sohbet sisteminin yönetiminden sorumludur. Bu hizmet, standart işlevselliğinin yanı sıra, sohbetin uzatılması ve özelleştirilmesi için bir dizi yöntem ve olay sağlar; bu da, özelleştirilmiş gereksinimler temelinde mesajların iletilmesi, belirli oyunculara özel izinler veya moderasyon eklenmesi ve belirli eylemleri gerçekleştirmek için özel komutlar oluşturulmasını içerir.

UI yapılandırması

TextChatService, oyununuzun ihtiyaçlarına uygun olarak özelleştirilebilen varsayılan bir UI sunar. Bu yapılandırmalardan herhangi birini devre dışı bırakın ve ilişkili UI öğesini gizleyin. İsterseniz, bu UI öğelerini özel arayüzlerle de değiştirebilirsiniz:

Daha fazla bilgi için Sohbet penceresi ve Balon sohbet başlıklarına bakabilirsiniz.

Kanallar, mesajlar ve komutlar

  • TextChannel — Metin kanalları, kullanıcı tarafından gönderilen mesajları istemciden sunucuya ileterek, sunucunun da bu mesajları diğer kullanıcılara izinler doğrultusunda göstermesini sağlar. Metin kanalları, işlevsellik gösterebilmeleri için TextChatService'e bağlı olmalıdır.

  • TextSourceTextChannel içinde bir kullanıcı. Metin kaynakları, AddUserAsync() çağrıldığında doğrudan TextChannel'a eklenir. Metin kaynakları, kanal içindeki bir kullanıcının mesaj gönderme yeteneği gibi detaylı izinleri içerir. Tek bir kullanıcı birden fazla metin kanalında bulunduğunda, birden fazla metin kaynağı ile ilişkilendirilir.

  • TextChatMessage — Bir metin kanalındaki bir mesaj. Sohbet mesajları, mesajın göndericisi, orijinal mesaj, filtrelenmiş mesaj ve oluşturulma zaman damgası gibi temel bilgileri içerir.

  • TextChatCommand — Kullanıcıların PrimaryAlias veya SecondaryAlias özellikleriyle eşleşen mesajlar göndererek belirli eylemleri veya davranışları çağırmasını sağlar. Sohbet komutları, işlevsellik gösterebilmeleri için TextChatService'e bağlı olmalıdır.

Sohbet akış diyagramı

Metin sohbeti, istemci-sunucu modelini kullanır; gönderen istemci, sunucu ve alıcı istemciler ile.

Oyun içindeki metin sohbeti için bir akış diyagramı.
  1. Bir oyuncu, yerel cihazından bir mesaj gönderir ve bu TextChannel:SendAsync() yöntemini tetikler. Bu yöntem, mesajı işler ve bunun bir sohbet komutu mu yoksa normal bir sohbet mesajı mı olduğunu belirler.

  2. Sunucu, izinler ve Roblox topluluğu filtreleme gereksinimlerine göre mesajı diğer oyunculara iletip iletmeyeceğine karar vermek için TextChannel.ShouldDeliverCallback çağrısını tetikler.

  3. Eğer TextChannel.ShouldDeliverCallback mesajın diğer oyunculara iletilmesine uygun olduğuna karar verirse, sunucu her türlü filtre uygular ve TextChannel.OnIncomingMessage olayını iki kez tetikler:

    1. İlk olarak, gönderen istemcide ve sunucunun mesajı işlemekta olduğu sinyalini vermek için TextChatService.MessageReceived olayını tetikler. Bu olay, gönderici istemcideki yerel mesajı sunucudan alınan işlenmiş mesaj ile değiştirir. Orijinal mesaj filtrelemeye ihtiyaç duymadıysa, mesaj aynı olacaktır.

    2. İkinci olarak, alıcı istemcilerde tetikleyerek oyunculara mesajı göstermek için TextChatService.MessageReceived olayını tetikler.

Metin sohbeti kancaları ve geri çağırmalar

TextChatService API'si, sohbet mesajlarının görünümü ve iletiminde net bir ayrıma teşvik eder. Metin sohbeti sisteminin birden fazla örneği, merkezi ve net konumlarda biçimlendirmek için kancalar ve geri çağırmalar sağlar.

TextChatService geri çağırma sırası için bir akış diyagramı

Mesajları koşullu olarak iletme

TextChannel.ShouldDeliverCallback geri çağrısı yalnızca sunucuda tanımlanmalıdır. Bu geri çağrı, bir mesaj gönderildiğinde metin kanalının her TextSource alt öğesi için tetiklenir ve mesajın iletilip iletilmeyeceğini belirlemek için kullanılır. Bu geri çağrı, belirli oyun bağlamlarına bağlı olabilecek özelleştirilmiş mesaj iletim mantığı uygulamak için kullanılabilir; örneğin:

  • Kullanıcıların yanındakilere mesaj gönderebildiği Yakınlığa dayalı sohbet.
  • Belirli özelliklere sahip kullanıcıların başkalarına mesaj göndermesini engelleme.

Mesaj görüntüleme özelleştirme

Varsayılan TextChatService arayüzü, mesajların nasıl görüntüleneceğini biçimlendirmek ve özelleştirmek için zengin metin kullanır. Aşağıdaki geri çağrıları kullanarak, mesajlar kullanıcıya gösterilmeden önce biçimlendirebilirsiniz; örneğin, kullanıcı adlarına renkler veya sohbet etiketleri eklemek için.

Aşağıdaki geri çağrılar, her TextChatMessage için çağrılır ve böylece TextChannel, TextSource veya TextChatMessage içeriğine dayanarak sohbet penceresi görünümünü özelleştirmenize olanak sağlar. Bir istemci bir mesaj gönderdiğinde, mesaj sunucuya gönderildiğinde bu geri çağrılar bir kez çağrılır ve TextChatMessage.Status değeri Enum.TextChatMessageStatus.Sending olacaktır. Mesaj sunucu tarafından alındığında ve diğer kullanıcılara iletilirken, gönderen istemci yine mesajı, güncellenmiş bir Enum.TextChatMessageStatus değeri ile alır.

  • TextChatService.OnIncomingMessage — Bu geri çağrı yalnızca istemci üzerinde tanımlanmalıdır. Geri çağrı, bir mesaj alındığında tetiklenir; bu ya sunucudan gelen bir mesajdır ya da yerel istemcinin yeni bir mesaj gönderdiği anlamına gelir. Geri çağrı, tüm TextChannel örneklerinden alınan her TextChatMessage için çağrılır ve kullanıcıya gösterilmeden önce mesajı işlemek için ilk sıradadır.
  • TextChannel.OnIncomingMessage — Bu geri çağrı yalnızca istemci üzerinde tanımlanmalıdır. Geri çağrı, sunucudan gelen bir mesaj alındığında tetiklenir. Geri çağrı, TextChannel içinden gelen her TextChatMessage için çağrılır. TextChatService.CreateDefaultTextChannels ile oluşturulan varsayılan TextChannel örneklerinde, bu geri çağrı tanımlıdır ve yeniden yazılabilir.
  • TextChatService.OnBubbleAdded — Bu geri çağrı yalnızca istemci üzerinde tanımlanmalıdır. Kullanıcı arayüzündeki mesajın görünümüne bağımsız olarak, sohbet balonlarının görünümünü özelleştirmek için kullanın.
  • TextChatService.OnChatWindowAdded — Bu geri çağrı yalnızca istemci üzerinde tanımlanmalıdır. Kullanıcı arayüzündeki sohbet balonlarının görünümüne bağımsız olarak, sohbet mesajlarının görünümünü özelleştirmek için kullanın.

Eski sohbetten geçiş

Bu bölüm, TextChatService kullanarak yaygın sohbet işlevselliklerini ve davranışlarını uygulamak için alternatif yöntemler sağlayarak eski sohbet sisteminden geçiş yapmanıza yardımcı olur.

  1. Explorer penceresinde TextChatService'i seçin.

  2. Properties penceresinde, ChatVersion açılır menüsünü bulun ve TextChatService'yi seçin.

Temel işlevsellikler

Her iki sistem de aynı temel sohbet işlevselliklerini paylaşmasına rağmen, TextChatService uygulamaları genelde daha sürdürülebilir ve üzerinde iterasyon yapmak daha kolaydır.

İşlevsellikEski sohbetTextChatServiceFarklılıklar
Sohbet mesajı gönderPlayers:Chat()TextChannel:SendAsync()SendAsync() yöntemi, zengin metin biçimlendirmesi ve mesaj önceliği gibi daha gelişmiş sohbet özelliklerini destekler. Ayrıca, uygunsuz mesajların gönderilmesini engellemeye yardımcı olan yerleşik filtreleme içerir.
Mesajlaşma geri çağırmalarını uygulaChat:InvokeChatCallback()
Chat:RegisterChatCallback()
TextChatService.SendingMessage
TextChatService.OnIncomingMessage
Eski sohbet sistemi, mesaj iletimi için sohbet sistemi olaylarına bir işlev bağlar. TextChatService'in her iki yöntemi, daha iyi esneklik ve özelleştirme sunar.
Özel sohbet komutları ekleChatService/ChatCommand modülüTextChatCommandTextChatService, bir eski sohbet modülü yerine metin komutları için özel bir sınıf sunar.
Bir sistem mesajını görüntüleStarterGui:SetCore() ve ChatMakeSystemMessage kullanımıTextChannel:DisplaySystemMessage()TextChannel.OnIncomingMessage geri çağrısı, mesaj görünümünü özelleştirmek için bir TextChatMessageProperties örneği döndürebilir.
Sohbeti devre dışı bırakDeneyim Ayarları ve sohbet penceresini gizlemek için ChatWindow/ChatSettings modülüChatWindowConfiguration.Enabled

Mesaj filtreleme

TextChatService, her oyuncunun hesap bilgilerine dayalı olarak sohbet mesajlarını otomatik olarak filtreler, dolayısıyla tüm sohbet mesajları için metin filtreleme uygulamanıza gerek yoktur.

İşlevsellikEski sohbetTextChatService
Bireysel oyuncu için sohbet mesajını filtreleChat:FilterStringAsync()Otomatik
Genişletilmiş mesajları filtreleChat:FilterStringForBroadcast()Otomatik

Pencere ve balon sohbeti

TextChatService'in hem sohbet penceresi hem de balon sohbet davranışı ve özelleştirme seçenekleri, eski sohbet sistemi ile aynıdır. Eski sohbet sistemi yalnızca sohbet modülleri veya Players konteyneri kullanarak özelleştirmeye izin verirken, hizmet tüm sohbet penceresi ve balon sohbet özelliklerini yönetmek için özel sınıflar (ChatWindowConfiguration ve BubbleChatConfiguration) sağlar. Ayrıca, Studio ayarlarını kullanarak balon sohbet görünüm ve davranış özelliklerinizi kolayca ayarlayıp önizleyebilirsiniz.

Konuşmacı "ekstra veri" geçişi

Eski Lua sohbet sistemi, geliştiricilerin Speaker sınıfında SetExtraData kullanmalarına izin veriyordu. Bu veri, bir konuşmacının ad renklerini, sohbet renklerini biçimlendirmek veya belirli bir konuşmacı için ad etiketleri uygulamak için kullanılıyordu.

Eski Sohbet Sistemi SetExtraData

-- Eski sohbet sisteminde bir konuşmacıya ekstra veri ayarlama örneği
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, SetExtraData için doğrudan bir denkliği yoktur. Bunun yerine, mesajın TextSource'una dayanarak zengin metin kullanarak mesajların görünümünü özelleştirmek için geri çağrıları kullanın.

Aşağıdaki, Player nesneleri üzerinde özelliklere erişerek eski Lua sohbetinin "ekstra verisini" taklit etme örneğidir:

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)

Sonra, belirlenen özelliklere dayanarak sohbet penceresinin görünümünü özelleştirmek için OnChatWindowAdded geri çağrısını kullanabilirsiniz:

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, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.