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.
Aşağıdaki bölümler, sohbet sistemini özelleştirmek için kullanabileceğiniz ana sınıfları ve örnekleri özetlemektedir.
Üst düzey yapılandırma
The TextChatService tekil sınıf, sohbet mesaj filtreleme, moderasyon ve kullanıcı izinleri dahil olmak üzere genel sohbet sisteminin yönetiminden sorumludur.Varsayılan sohbet kanalları ve komutlarını etkinleştirmek veya devre dışı bırakmak için CreateDefaultTextChannels ve CreateDefaultCommands gibi özellikleri kullanın.
Varsayılan UI konfigürasyonu
TextChatService deneyimin ihtiyaçlarına uyacak şekilde özelleştirilebilen varsayılan bir UI sağlar.Bu yapılandırmaların her biri, ilişkili UI öğesini gizlemek için devre dışı bırakılabilir ve istenirse özel arayüzlerle değiştirilebilir.
- ChatWindowConfiguration — Görünümü ve davranışı da dahil olmak üzere varsayılan sohbet penceresi arayüzünü temsil eder. Sohbet penceresini gizlemek için devre dışı bırakın.
- ChatInputBarConfiguration — Görünümü ve davranışı dahil olmak üzere varsayılan sohbet giriş çubuğu arayüzünü temsil eder.
- BubbleChatConfiguration — Görünümü ve davranışı dahil olmak üzere varsayılan balon sohbeti UI'yi temsil eder.
Kanallar, mesajlar ve komutlar
TextChannel — Kullanıcıdan sunucuya gönderilen sohbet mesajlarını geçen bir metin sohbet kanalını temsil eder, ardından bunları izinlere dayalı olarak diğer kullanıcılara görüntüler.Bu örneklerin işlev görmesi için TextChatService ebeveyn olmaları gerekir.
TextSource — Bir kullanıcıyı bir TextChannel içinde temsil eder.Bu örnekler, çağrıldığında doğrudan ebeveynliğe alınır.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ına eklendiğinde çoklu metin kaynağına bağlanabilir.
TextChatMessage — Bir mesajın göndericisi, orijinal mesaj, filtrelenmiş mesaj ve yaratım zaman damgası gibi temel bilgilerle bir tek sohbet mesajını bir metin kanalında temsil eder.
TextChatCommand — Kullanıcıların belirli eylemleri veya davranışları çağırmasına izin verir PrimaryAlias veya SecondaryAlias göndererek uygun mesajlar göndererek.Bu örneklerin işlev görmesi için TextChatService ebeveyn olmaları 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 SetExtraData yoktur.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