Roblox, canlı oturumlarda oyuncular arasında metin tabanlı mesajlaşma sunar TextChatService .Bu hizmetin standart işlevleri vardır, ancak özelleştirilmiş gereksinimlere dayalı mesajların gönderilmesi , özel oyunculara özel izinler veya moderasyon eklenmesi veya belirli eylemleri yürütmek için özel komutlar oluşturma gibi sohbetin genişletilmesi ve özelleştirilmesi için bir dizi yöntem ve olay sağlar.
Üst düzey yapılandırma
TextChatService bir tek sınıf, sohbet mesaj filtreleme, moderasyon ve kullanıcı izinleri dahil olmak üzere genel sohbet sisteminin yönetiminden sorumludur. ve gibi özellikleri kullanarak varsayılan sohbet kanallarını ve komutlarını etkinleştirin veya devre dışı bırakın, çalışma sırasında oluşturur.
UI yapılandırması
TextChatService deneyimin ihtiyaçlarına uyacak şekilde özelleştirilebilen varsayılan bir UI sağlar.İlgili UI öğesini gizlemek için bu yapılandırmalardan herhangi birini devre dışı bırakın.İstendiğinde, bu UI öğelerini özel arayüzlerle de değiştirebilirsiniz:
Daha fazla bilgi için, Sohbet penceresi ve Balon sohbeti görün.
Kanallar, mesajlar ve komutlar
TextChannel — Metin kanalları, kullanıcıdan gelen mesajları istemeden sunucuya aktarır ve bunları daha sonra izinlere dayalı olarak diğer kullanıcılara görüntüler.Metin kanallarının işlev görmesi için TextChatService ebeveyn olmaları gerekir.
TextSource — TextChannel 'deki bir kullanıcı.Metin kaynakları doğrudan TextChannel çağrıldığında AddUserAsync() çağrıldığında doğrudan ebeveyn olur.Metin kaynakları, bir kullanıcının kanaldaki mesaj gönderme yeteneği gibi ayrıntılı izinler içerir.Tek bir kullanıcı çoklu metin kanallarında bulunuyorsa, çoklu metin kaynaklarıyla ilişkilidir.
TextChatMessage — Bir metin kanalındaki bir mesaj.Sohbet mesajları, mesajın göndericisi, orijinal mesaj, filtrelenmiş mesaj ve yaratım zaman damgası gibi temel bilgileri içerir.
TextChatCommand — Kullanıcıların PrimaryAlias veya SecondaryAlias özelliklerine uyan mesajlar göndererek belirli eylemleri veya davranışları yapmalarına izin verin.Sohbet komutlarının işlev görmesi için TextChatService ebeveyn olması gerekir.
Sohbet akış şeması
Metin sohbeti, bir gönderen istemci, bir sunucu ve bir alıcı ile gönderen sunucu modelini kullanır.

Bir oyuncu yerel cihazından bir mesaj gönderir ve TextChannel:SendAsync() yöntemini tetikler.Bu yöntem mesajı işler ve mesajın bir sohbet komutu veya düzenli bir sohbet mesajı olup olmadığını belirler.
Mesaj bir sohbet komutuysa, tanımlanan eylemi gerçekleştirmek için TextChatCommand.Triggered etkinliğini ateşler. Daha fazla adım gerekmez.
Mesaj düzenli bir sohbet mesajıysa, mesajı gönderen müşteriye görüntülemek için TextChatService.SendingMessage etkinliğini ateşler.Aynı anda, TextChannel:SendAsync() mesajı sunucuya iletir.
Sunucu, izinler ve Roblox topluluk filtreleme gereksinimlerine dayanarak mesajı diğer oyunculara göndermeyi seçip seçmediğini belirlemek için TextChannel.ShouldDeliverCallback ateş eder.
Eğer TextChannel.ShouldDeliverCallback mesajın diğer oyunculara gönderilmesine uygun olduğuna karar verirse, sunucu herhangi bir filtre uygular ve TextChannel.OnIncomingMessage iki kez ateş eder:
İlk kez gönderen istemcede ve sunucunun mesajı TextChatService.MessageReceived etkinliği aracılığıyla işlediğine dair sinyaller var.Bu etkinlik, gönderen istemcideki yerel mesajı, sunucudan gelen işlenmiş mesajla değiştirir.Mesaj, orijinalin filtreleme gerektirmiyorsa aynıdır.
İkinci kez, mesajı diğer oyunculara görüntülemek için TextChatService.MessageReceived etkinliğini tetikleyen alıcılardadır.
Metin sohbet kancaları ve geri çağrılar
The TextChatService API, sohbet mesajlarının görünümü ve teslimatı üzerinde net bir ayrım teşvik eder.Metin sohbet sisteminin birden fazla örneği, merkezi, açık yerlerde biçimlendirmek için kancalar ve geri çağrılar sağlar.

| Geri çağırma | Dönüş Değeri | | ----------------------------------------- | ----------------------------------- | | | boolean | | | | | | | | | | | | | | |
Koşullu olarak mesajlar gönderin
TextChannel.ShouldDeliverCallback geri arama, yalnızca sunucuda tanımlanmalıdır.Geri çağrı, mesajın mesajın teslim edilip edilmeyeceğini belirlemek için gönderildiğinde, metin kanalının her TextSource çocuğu için ateşlenir.Bu geri çağrı, ek oyun içeriğine bağlı olabilen özel mesaj teslim mantığını uygulamak için kullanılabilir:
- Yakınlık tabanlı sohbet nerede kullanıcılar sadece kendilerine yakın olanlara mesaj gönderebilir.
- Belirli özelliklere sahip kullanıcıların başkalarına mesaj göndermesini engelleme.
Mesaj görüntüsünü özelleştirin
Varsayılan TextChatService UI, mesajların görüntülenmesini biçimlendirmek ve özelleştirmek için zengin metin 'ye güvenir.Örneğin, kullanıcılara gösterilmeden önce mesajları biçimlendirmek için aşağıdaki geri çağrıları kullanabilirsiniz: renkleri eklemek veya sohbet etiketlerini kullanıcı isimlerine veya mesaj içeriğine eklemek gibi.
Aşağıdaki geri çağrılar, görüntülenmek üzere olan her TextChatMessage çatlak pencere görünümünü özelleştirmenize izin veren TextChannel , TextSource veya TextChatMessage içeriğine dayalı olarak görüntülenen her çağrıda çağrılır.Bir istemci bir mesaj gönderdiğinde, bu geri çağrılar mesaj sunucuya gönderildiğinde bir kez çağrılır ve TextChatMessage.Status değeri Enum.TextChatMessageStatus.Sending olacaktır.Mesaj sunucu tarafından alındıktan ve diğer kullanıcılara gönderildikten sonra, gönderen istemci mesajı yenilenen bir Enum.TextChatMessageStatus tekrar alır.
- TextChatService.OnIncomingMessage — Bu geri çağrı sadece istemci üzerinde tanımlanmalıdır.Geri çağrı, bir mesaj alındığında veya yerel istemci yeni bir mesaj gönderdiğinde sunucudan veya yerel istemci yeni bir mesaj gönderdiğinde ateşlenir.Geri çağrı, tüm örneklerinden gelen her alındığında çağrılır ve kullanıcıya gösterilmeden önce mesajı işleyen ilk kişidir.
- TextChannel.OnIncomingMessage — Bu geri çağrı sadece istemci üzerinde tanımlanmalıdır.Geri çağrı, sunucudan bir mesaj alındığında ateşlenir.Geri çağrı her alındığında TextChatMessage 'dan alınan TextChannel 'a çağrılır.Varsayılan TextChannel örnekleri, TextChatService.CreateDefaultTextChannels 'den oluşturuldu ve bu geri çağrı tanımlanmıştır ve üzerine yazılabilir.
- TextChatService.OnBubbleAdded — Bu geri çağrı sadece istemci üzerinde tanımlanmalıdır.Sohbet pencerelerinin görünümünü mesajın sohbet penceresi UI'sinde görünümden bağımsız olarak özelleştirmek için kullanın.
- TextChatService.OnChatWindowAdded — Bu geri çağrı sadece istemci üzerinde tanımlanmalıdır.Sohbet pencerelerindeki mesajların görünümünü sohbet mesajlarının görünümünden bağımsız olarak özelleştirmek için kullanın.
Miras sohbetinden taşın
Bu bölüm, miras kalan sohbet sisteminden geçiş yapmanıza yardımcı olur, çünkü TextChatService kullanarak yaygın sohbet işlevlerini ve davranışlarını uygulamak için alternatif yöntemler sağlar.
Kâşif penceresinde, TextChatService .
Özellikler penceresinde, düşme menüsünü bul ve seç.
Temel işlevler
Her iki sistem de aynı temel sohbet işlevlerini paylaşsa da, TextChatService uygulamaları genel olarak daha sürdürülebilir ve tekrarlanması daha kolaydır.
İşlevsellik | Eski sohbet | Metin Sohbet Hizmeti | Farklar |
---|---|---|---|
Sohbet mesajı gönder | Players:Chat() | TextChannel:SendAsync() | The SendAsync() yöntemi, zengin metin biçimlendirme ve mesaj önceliği gibi daha gelişmiş sohbet özelliklerini destekler.Ayrıca, uygunsuz mesajların gönderilmesini engellemek için yerleşik filtreleme de dahil edilir. |
Mesaj geri çağrılarını uygula | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | Miras sohbet sistemi, mesajların gönderilmesi için sohbet sistemi olaylarına bir işlev bağlar.TextChatService iki yöntemi daha iyi esneklik ve özelleştirme sunar. |
Özel sohbet komutları ekleyin | ChatService/ChatCommand modülü | TextChatCommand | TextChatService , miras kalan bir sohbet modülü kullanmak yerine, metin komutları için özel bir sınıfa sahiptir. |
Bir sistem mesajını görüntür | StarterGui:SetCore() kullanarak ChatMakeSystemMessage | TextChannel:DisplaySystemMessage() | TextChannel.OnIncomingMessage geri arama, mesaj görünümünü özelleştirmek için bir TextChatMessageProperties örneği döndürebilir. |
Mesaj filtreleme
TextChatService otomatik olarak her oyuncunun hesap bilgilerine dayanarak sohbet mesajlarını filtreler, böylece tüm sohbet mesajları için manuel olarak metin filtreleme uygulamanıza gerek yoktur.
İşlevsellik | Eski sohbet | Metin Sohbet Hizmeti |
---|---|---|
Tek oyuncu için sohbet mesajını filtrele | Chat:FilterStringAsync() | Otomatik |
Yayın mesajlarını filtrele | Chat:FilterStringForBroadcast() | Otomatik |
Pencere ve balon sohbeti
Hem sohbet penceresi hem de balon sohbeti davranışı ve özelleştirme seçenekleri TextChatService miras sohbet sistemininkilerle aynıdır.Miras sohbet sistemi sadece sohbet modülleri veya Players konteyneri kullanarak özelleştirmeye izin verdiğinden, hizmet tüm sohbet penceresi ve balon sohbet özelliklerini yönetmek için özel sınıflar sağlar ( ChatWindowConfiguration ve BubbleChatConfiguration ).Ayrıca, hepsini yazmak zorunda olmadan Studio ayarlarını kullanarak balon sohbet görünümünü ve davranışını kolayca ayarlayabilir ve önizleyebilirsiniz.
İşlevsellik | Eski sohbet | Metin Sohbet Hizmeti |
---|---|---|
Sohbet Penceresini Etkinleştir | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
Balon Sohbetini Etkinleştir | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
Sohbet Pencere Özelliklerini Ayarla | Players:SetChatStyle() | ChatWindowConfiguration |
Kabarcık Sohbet Özelliklerini Ayarla | Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat``Class.Players:SetChatStyle() | BubbleChatConfiguration |
NPC Balonlarını Etkinleştir | Chat:Chat() | TextChatService:DisplayBubble() |
Konuşmacı "ekstra veriler"i taşı
Miras kalan Lua sohbet sistemi, geliştiricilerin SetExtraData sınıfı üzerinde kullanmasına izin verdi Speaker .Bu veriler, isim rengini, sohbet rengini veya belirli bir konuşmacı için isim etiketleri uygulamak için kullanıldı.
Miras sohbet sistemi SetExtraData
-- Miras 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 doğrudan eşdeğeri yok SetExtraData .Bunun yerine, mesajların görünümünü zengin metin üzerine dayanarak özelleştirmek için geri çağrıları kullanın, örneğin OnWindowAdded mesajın TextSource üzerine dayanarak zengin metin üzerine görünüm özelleştirin.
Aşağıdaki, Player nesnelerin üzerindeki özniteliklere erişerek miras Lua sohbetinin "ekstra verilerini" emule etmenin bir örneğidir:
TextChatService SetAttribute'ları
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 oyuncuya ayarlanan özelliklere dayanarak sohbet penceresinin görünümünü özelleştirmek için OnChatWindowAdded geri arama kullanabilirsiniz:
OnChatWindowAdded'de TextChatService
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