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, genel sohbet sistemini yönetmekten sorumlu olan TextChatService adlı tekil bir sınıf aracılığıyla gerçekleştirilir. Bu sınıf, sohbet mesajı filtreleme, moderasyon ve kullanıcı izinleri gibi işlevsellikler sunar. Bu hizmet, standart işlevselliğinin yanı sıra, özelleştirilmiş gereksinimlere dayalı olarak mesaj iletme, belirli oyunculara özel izinler veya moderasyon ekleme ve belirli eylemleri gerçekleştirmek için özel komutlar oluşturma gibi sohbeti genişletmek ve özelleştirmek için bir dizi yöntem ve olay sağlar.

UI yapılandırması

TextChatService, oyununuzun ihtiyaçlarına uyacak şekilde özelleştirilebilen varsayılan bir UI sağlar. Bu yapılandırmalardan herhangi birini devre dışı bırakmak, ilişkili UI öğesini gizler. İsterseniz, bu UI öğelerini özel arayüzlerle de değiştirebilirsiniz:

Daha fazla bilgi için Sohbet penceresi ve Baloncuk sohbeti sayfalarına bakın.

Kanallar, mesajlar ve komutlar

  • TextChannel — Metin kanalları, kullanıcı tarafından gönderilen mesajları istemciden sunucuya iletir ve sunucu, bu mesajları izinlere göre diğer kullanıcılara gösterir. Metin kanalları, işlevsellik kazanabilmek için TextChatService'e bağlı olmalıdır.

  • TextSourceTextChannel içindeki bir kullanıcı. Metin kaynakları, AddUserAsync() çağrıldığında doğrudan TextChannel'a bağlıdır. Metin kaynakları, kanaldaki bir kullanıcının mesaj gönderme yeteneği gibi ayrıntılı izinleri içerir. Bir kullanıcı birden fazla metin kanalında bulunuyorsa, 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ı tetiklemesine olanak tanır. Sohbet komutları, işlevsellik kazanabilmek için TextChatService'e bağlı olmalıdır.

Sohbet akış diyagramı

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

Oyun içi 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 topluluk filtreleme gereksinimlerine göre mesajı diğer oyunculara iletip iletmeyeceğine karar vermek için TextChannel.ShouldDeliverCallback olayını tetikler.

  3. Eğer TextChannel.ShouldDeliverCallback, mesajın diğer oyunculara iletilmeye uygun olduğunu belirlerse, sunucu herhangi bir filtre uygular ve TextChannel.OnIncomingMessage olayını iki kez tetikler:

    1. İlk olarak, gönderen istemcide ve sunucunun mesajı işlediğini bildiren TextChatService.MessageReceived olayını tetikler. Bu olay, gönderen istemcideki yerel mesajı sunucudan alınan işlenmiş mesajla değiştirir. Mesaj, orijinal mesaj filtreleme gerektirmediyse aynıdır.

    2. İkinci kez, alıcı istemcilerde, diğer 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 iletimi arasında net bir ayrım teşvik eder. Metin sohbeti sisteminin birden fazla örneği, merkezi ve net yerlerde biçimlendirme için kancalar ve geri çağırmalar sağlar.

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

Şartlı mesaj iletimi

TextChannel.ShouldDeliverCallback geri çağırması yalnızca sunucuda tanımlanmalıdır. Bir mesaj gönderildiğinde, metin kanalının her TextSource çocuğu için geri çağırma tetiklenir ve mesajın iletilip iletilmeyeceğine karar verilir. Bu geri çağırma, ek oyun bağlamına bağlı olabilecek özel mesaj iletme mantığını uygulamak için kullanılabilir, örneğin:

  • Yakınlık tabanlı sohbet kullanıcıların yalnızca kendilerine yakın olanlara mesaj göndermesine izin verir.
  • Belirli özelliklere sahip kullanıcıların diğerlerine mesaj göndermesini engellemek.

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

Varsayılan TextChatService UI'sı, mesajların nasıl görüntüleneceğini biçimlendirmek ve özelleştirmek için zengin metin kullanır. Mesajlar kullanıcıya gösterilmeden önce biçimlendirmek için aşağıdaki geri çağırmaları kullanabilirsiniz; örneğin, kullanıcı adlarına renkler veya sohbet etiketleri eklemek için.

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

  • TextChatService.OnIncomingMessage — Bu geri çağırma yalnızca istemcide tanımlanmalıdır. Bir mesaj alındığında, ya sunucudan ya da yerel istemcinin yeni bir mesaj gönderdiğinde tetiklenir. Bu geri çağırma, 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 olanıdır.
  • TextChannel.OnIncomingMessage — Bu geri çağırma yalnızca istemcide tanımlanmalıdır. Bir mesaj sunucudan alındığında tetiklenir. Bu geri çağırma, TextChannel'dan alınan her TextChatMessage için çağrılır. TextChatService.CreateDefaultTextChannels ile oluşturulan varsayılan TextChannel örneklerinde bu geri çağırma tanımlıdır ve üzerine yazılabilir.
  • TextChatService.OnBubbleAdded — Bu geri çağırma yalnızca istemcide tanımlanmalıdır. Sohbet penceresi UI'sindeki mesajın görünümünden bağımsız olarak sohbet baloncuklarının görünümünü özelleştirmek için kullanın.
  • TextChatService.OnChatWindowAdded — Bu geri çağırma yalnızca istemcide tanımlanmalıdır. Sohbet baloncuklarındaki mesajın görünümünden bağımsız olarak sohbet penceresindeki 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 sunarak 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ı genel olarak daha sürdürülebilir ve üzerinde iterasyon yapması daha kolaydır.

İşlevsellikEski sohbetTextChatServiceFarklar
Bir 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 önlemeye yardımcı olmak için yerleşik filtreleme içerir.
Mesajlaşma geri çağırmalarını uygulayınChat:InvokeChatCallback()
Chat:RegisterChatCallback()
TextChatService.SendingMessage
TextChatService.OnIncomingMessage
Eski sohbet sistemi, mesajları iletmek için sohbet sistemi olaylarına bir işlev bağlar. TextChatService'in iki yöntemi, daha iyi esneklik ve özelleştirme sunar.
Özel sohbet komutları ekleChatService/ChatCommand modülüTextChatCommandTextChatService, eski bir sohbet modülü kullanmak yerine metin komutları için özel bir sınıfa sahiptir.
Bir sistem mesajı görüntüleStarterGui:SetCore() kullanarak ChatMakeSystemMessageTextChannel:DisplaySystemMessage()TextChannel.OnIncomingMessage geri çağırması, mesajın görünümünü özelleştirmek için bir TextChatMessageProperties örneği döndürebilir.
Sohbeti devre dışı bırakChatWindow/ChatSettings modülü sohbet penceresini gizlemek içinChatWindowConfiguration.Enabled

Mesaj filtreleme

TextChatService, sohbet mesajlarını her oyuncunun hesap bilgilerine göre otomatik olarak filtreler, bu nedenle tüm sohbet mesajları için metin filtrelemeyi manuel olarak uygulamanıza gerek yoktur.

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

Pencere ve baloncuk sohbeti

TextChatService'in sohbet penceresi ve baloncuk sohbeti davranışları ve özelleştirme seçenekleri, eski sohbet sisteminin özellikleriyle aynıdır. Eski sohbet sistemi yalnızca sohbet modülleri veya Players konteyneri kullanarak özelleştirmeye izin verdiğinden, hizmet, tüm sohbet penceresi ve baloncuk sohbeti özelliklerini yönetmek için özel sınıflar (ChatWindowConfiguration ve BubbleChatConfiguration) sağlar. Ayrıca, tüm bu özellikleri kod yazmak zorunda kalmadan Studio ayarlarını kullanarak kolayca ayarlayabilir ve önizleyebilirsiniz.

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

Eski Lua sohbet sistemi, geliştiricilerin Speaker sınıfında SetExtraData kullanmasına izin veriyordu. Bu veri, bir konuşmacının adının rengini, sohbet rengini 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'in SetExtraData için doğrudan bir karşılığı yoktur. Bunun yerine, mesajın TextSource'una dayalı olarak zengin metin kullanarak mesajların görünümünü özelleştirmek için geri çağırmaları kullanın.

Aşağıda, Player nesneleri üzerindeki özelliklere erişerek eski Lua sohbetinin "ekstra verilerini" taklit etmenin bir örneği verilmiştir:

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)

Ardından, oyuncuda ayarlanan özelliklere dayalı olarak sohbet penceresinin görünümünü özelleştirmek için OnChatWindowAdded geri çağırması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.