Metin sohbet 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, 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.

A flowchart for in-experience text chat.
  1. 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.

  2. 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.

  3. 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:

    1. İ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.

    2. İ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.

A flowchart of the TextChatService callbacks order

| 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.

  1. Kâşif penceresinde, TextChatService .

  2. Ö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.

Sohbeti devre dışı bırak Oyun Ayarları in Studio ve sohbet penceresini gizlemek için modül

İşlevsellikEski sohbetMetin Sohbet HizmetiFarklar
Sohbet mesajı gönderPlayers: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ı uygulaChat:InvokeChatCallback()``Class.Chat:RegisterChatCallback()Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessageMiras 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ı ekleyinChatService/ChatCommand modülüTextChatCommandTextChatService , 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ürStarterGui:SetCore() kullanarak ChatMakeSystemMessageTextChannel: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.

İşlevsellikEski sohbetMetin Sohbet Hizmeti
Tek oyuncu için sohbet mesajını filtreleChat:FilterStringAsync()Otomatik
Yayın mesajlarını filtreleChat: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.

İşlevsellikEski sohbetMetin Sohbet Hizmeti
Sohbet Penceresini EtkinleştirClass.Chat.LoadDefaultChat``Class.Players.ClassicChatChatWindowConfiguration.Enabled
Balon Sohbetini EtkinleştirClass.Chat.BubbleChatEnabled``Class.Players.BubbleChatBubbleChatConfiguration.Enabled
Sohbet Pencere Özelliklerini AyarlaPlayers:SetChatStyle()ChatWindowConfiguration
Kabarcık Sohbet Özelliklerini AyarlaChat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat``Class.Players:SetChatStyle()BubbleChatConfiguration
NPC Balonlarını EtkinleştirChat: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