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.
TextSource — TextChannel 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.

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.
Mesaj bir sohbet komutuysa, tanımlı işlemi gerçekleştirmek için TextChatCommand.Triggered olayını tetikler. Daha fazla adım gerektirmez.
Mesaj, normal bir sohbet mesajıysa, gönderimini TextChatService.SendingMessage olayı ile gönderen istemcide görüntülemek için tetikler. Aynı zamanda, TextChannel:SendAsync() mesajı sunucuya iletir.
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.
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:
İ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.
İ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.

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.
Explorer penceresinde TextChatService'i seçin.
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.
| İşlevsellik | Eski sohbet | TextChatService | Farklılıklar |
|---|---|---|---|
| Sohbet mesajı gönder | Players: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ı uygula | Chat: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ı ekle | ChatService/ChatCommand modülü | TextChatCommand | TextChatService, bir eski sohbet modülü yerine metin komutları için özel bir sınıf sunar. |
| Bir sistem mesajını görüntüle | StarterGui: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ırak | Deneyim 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.
| İşlevsellik | Eski sohbet | TextChatService |
|---|---|---|
| Bireysel oyuncu için sohbet mesajını filtrele | Chat:FilterStringAsync() | Otomatik |
| Genişletilmiş mesajları filtrele | Chat: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.
| İşlevsellik | Eski sohbet | TextChatService |
|---|---|---|
| Sohbet Penceresini Etkinleştir | Chat.LoadDefaultChat Players.ClassicChat | ChatWindowConfiguration.Enabled |
| Balon Sohbeti Etkinleştir | Chat.BubbleChatEnabled Players.BubbleChat | BubbleChatConfiguration.Enabled |
| Sohbet Penceresi Özelliklerini Ayarla | Players:SetChatStyle() | ChatWindowConfiguration |
| Balon Sohbet Özelliklerini Ayarla | Chat:SetBubbleChatSettings() Chat.BubbleChatSettingsChanged() Players.BubbleChat Players:SetChatStyle() | BubbleChatConfiguration |
| NPC Balonlarını Etkinleştir | Chat:Chat() | TextChatService:DisplayBubble() |
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