Roblox menawarkan pesan berbasis teks antara pemain dalam sesi langsung melalui TextChatService .Layanan ini memiliki fungsi standar, tetapi juga menyediakan serangkaian metode dan peristiwa untuk memperluas dan menyesuaikan obrolan, seperti mengirim pesan berdasarkan persyaratan khusus disesuaikan, menambahkan izin khusus atau moderasi ke pemain tertentu, dan membuat perintah khusus untuk mengeksekusi tindakan tertentu.
Bagian berikut menyimpulkan kelas utama dan instansi yang dapat Anda gunakan untuk menyesuaikan sistem obrolan.
Konfigurasi tingkat atas
Kelas tunggal TextChatService bertanggung jawab untuk mengelola sistem obrolan keseluruhan, termasuk menangani filterisasi pesan obrolan, moderasi, dan izin pengguna.Gunakan properti seperti CreateDefaultTextChannels dan CreateDefaultCommands untuk mengaktifkan atau menonaktifkan saluran obrolan dan perintah default.
Konfigurasi UI default
TextChatService memberikan UI default yang dapat disesuaikan untuk memenuhi kebutuhan pengalaman Anda.Masing-masing konfigurasi ini dapat dinonaktifkan untuk menyembunyikan elemen UI terkait dan dapat digantikan dengan antarmuka khusus jika diinginkan.
- ChatWindowConfiguration — Mewakili UI jendela obrolan default, termasuk penampilan dan perilakunya. Nonaktifkan untuk menyembunyikan jendela obrolan.
- ChatInputBarConfiguration — Mewakili UI input obrolan default, termasuk penampilan dan perilakunya.
- BubbleChatConfiguration — Mewakili UI default obrolan gelembung , termasuk penampilan dan perilakunya.
Saluran, pesan, dan perintah
TextChannel — Mewakili saluran obrolan teks yang memindahkan pesan obrolan yang dikirim oleh pengguna dari klien ke server, yang kemudian menampilkannya kepada pengguna lain berdasarkan izin.Instans ini harus diberikan kepada TextChatService untuk berfungsi.
TextSource — Mewakili pengguna di TextChannel .Instansi ini secara langsung diberikan kepada TextChannel ketika AddUserAsync() dipanggil.Sumber teks berisi izin terperinci dari pengguna di saluran, seperti kemampuan mereka untuk mengirim pesan.Pengguna tunggal dapat dihubungkan dengan banyak sumber teks jika telah ditambahkan ke banyak saluran teks.
TextChatMessage — Mewakili pesan obrolan tunggal di saluran teks, dengan informasi dasar seperti pengirim pesan, pesan asli, pesan yang disaring, dan waktu penciptaan timestamp.
TextChatCommand — Memungkinkan pengguna untuk memanggil tindakan atau perilaku tertentu dengan mengirim pesan yang cocok dengan PrimaryAlias atau SecondaryAlias .Instans ini harus diberikan kepada TextChatService untuk berfungsi.
Diagram alir obrolan
Obrolan teks menggunakan model klien-server, dengan mengirim klien , server dan , dan menerima klien .

Seorang pemain mengirim pesan dari perangkat lokal mereka, memicu metode TextChannel:SendAsync() .Metode ini memproses pesan dan menentukan apakah itu perintah chat atau pesan obrolan biasa.
Jika pesan adalah perintah obrolan, itu menyalakan acara TextChatCommand.Triggered untuk melakukan tindakan yang didefinisikan. Tidak diperlukan langkah lebih lanjut.
Jika pesan adalah pesan obrolan biasa, itu menyalakan acara TextChatService.SendingMessage untuk menampilkan pesan ke pengirim di klien pengirim.Pada saat yang sama, TextChannel:SendAsync() mengirimkan pesan ke server.
Server menembak TextChannel.ShouldDeliverCallback untuk menentukan apakah akan mengirimkan pesan ke pemain lain berdasarkan izin dan persyaratan penyaringan komunitas Roblox.
Jika TextChannel.ShouldDeliverCallback menentukan bahwa pesan tersebut memenuhi syarat untuk dikirim ke pemain lain, server menerapkan filter apa pun dan menembak TextChannel.OnIncomingMessage dua kali:
Pertama kali adalah pada klien pengiriman dan sinyal bahwa server memproses pesan melalui acara TextChatService.MessageReceived .Acara ini menggantikan pesan lokal pada klien pengirim dengan pesan yang diproses dari server.Pesan identik jika aslinya tidak memerlukan filtering.
Kali kedua adalah pada klien penerima, yang memicu peristiwa TextChatService.MessageReceived untuk menampilkan pesan ke pemain lain.
Hook obrolan teks dan panggilan balasan
API TextChatService mendorong pemisahan yang jelas pada penampilan dan pengiriman pesan obrolan.Beberapa instansi sistem obrolan teks menyediakan hook dan panggilan balik untuk format di lokasi terpusat dan jelas.

| Panggil Kembali | Kembalikan Nilai | | ----------------------------------------- | ----------------------------------- | | | boolean | | | | | | | | | | | | | | |
Secara kondisional mengirim pesan
Panggilan balik TextChannel.ShouldDeliverCallback harus didefinisikan hanya di server.Panggilan balasan ditembak untuk setiap anak TextSource dari saluran teks ketika pesan dikirim untuk menentukan apakah pesan harus dikirim.Panggilan balasan ini dapat digunakan untuk menerapkan logika pengiriman pesan khusus yang mungkin tergantung pada konteks permainan tambahan, seperti:
- Obrolan berdasarkan jarak di mana pengguna hanya dapat mengirim pesan kepada mereka yang dekat dengan mereka.
- Mencegah pengguna dengan atribut tertentu untuk mengirim pesan ke orang lain.
Sesuaikan tampilan pesan
UI default TextChatService default bergantung pada teks kaya untuk memformat dan menyesuaikan bagaimana pesan ditampilkan.Anda dapat menggunakan panggilan balasan berikut untuk memformat pesan sebelum ditampilkan kepada pengguna, misalnya untuk menambahkan warna atau tag obrolan ke nama pengguna atau format konten pesan.
Panggilan balasan berikut dipanggil setiap TextChatMessage yang akan ditampilkan, yang memungkinkan Anda untuk menyesuaikan tampilan jendela obrolan berdasarkan TextChannel , TextSource , atau TextChatMessage konten.Ketika klien mengirim pesan, panggilan balasan ini dilakukan sekali saat pesan dikirim ke server dan nilai TextChatMessage.Status akan menjadi Enum.TextChatMessageStatus.Sending .Setelah pesan diterima oleh server dan dikirim ke pengguna lain, klien pengirim menerima pesan lagi dengan nilai Enum.TextChatMessageStatus yang diperbarui.
- TextChatService.OnIncomingMessage — Panggilan balik ini harus didefinisikan hanya pada klien.Panggilan balasan diaktifkan saat pesan diterima, baik dari server atau jika klien lokal baru saja mengirim pesan.Panggilan balasan dilakukan setiap TextChatMessage diterima dari semua TextChannel instansi dan merupakan yang pertama untuk memproses pesan sebelum ditampilkan kepada pengguna.
- TextChannel.OnIncomingMessage — Panggilan balik ini harus didefinisikan hanya pada klien.Panggilan balasan dinyalakan saat pesan diterima dari server.Panggilan balasan dilakukan setiap TextChatMessage diterima dari TextChannel.Contoh default TextChannel yang dibuat dari TextChatService.CreateDefaultTextChannels memiliki panggilan balik ini didefinisikan dan dapat ditulis ulang.
- TextChatService.OnBubbleAdded — Panggilan balik ini harus didefinisikan hanya pada klien.Gunakan untuk menyesuaikan penampilan gelembung obrolan independen dari penampilan pesan di UI jendela obrolan.
- TextChatService.OnChatWindowAdded — Panggilan balik ini harus didefinisikan hanya pada klien.Gunakan untuk menyesuaikan penampilan pesan obrolan di UI jendela obrolan independen dari penampilan pesan di gelembung obrolan.
Bermigrasi dari obrolan lama
Bagian ini membantu Anda bermigrasi dari sistem obrolan lama dengan menyediakan metode alternatif untuk menerapkan fungsi dan perilaku obrolan umum menggunakan TextChatService .
Di jendela Explorer, pilih TextChatService.
Di jendela Properti, temukan dropdown ChatVersion dan pilih TextChatService .
Fungsi dasar
Meskipun kedua sistem berbagi fungsionalitas obrolan dasar yang sama, implementasi TextChatService umumnya lebih berkelanjut dan lebih mudah untuk diulang.
Fungsionalitas | Obrolan warisan | Layanan Obrolan Teks | Perbedaan |
---|---|---|---|
Kirim pesan obrolan | Players:Chat() | TextChannel:SendAsync() | Metode SendAsync() mendukung fitur obrolan yang lebih maju, seperti format teks kaya dan prioritas pesan.Ini juga termasuk filtering bawaan untuk membantu mencegah pesan yang tidak pantas dikirim. |
Implementasikan panggilan balasan pesan | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | Sistem obrolan warisan mengikat fungsi ke acara sistem obrolan untuk mengirim pesan.Dua metode dari TextChatService menawarkan fleksibilitas dan kustomisasi yang lebih baik. |
Tambahkan perintah obrolan kustom | ChatService/ChatCommand modul | TextChatCommand | TextChatService memiliki kelas khusus untuk perintah teks daripada menggunakan modul obrolan lama. |
Tampilkan pesan sistem | StarterGui:SetCore() menggunakan ChatMakeSystemMessage | TextChannel:DisplaySystemMessage() | Panggilan balik TextChannel.OnIncomingMessage dapat mengembalikan instansi TextChatMessageProperties untuk menyesuaikan penampilan pesan. |
Nonaktifkan obrolan | Pengaturan permainan di Studio dan ChatWindow/ChatSettings modul untuk menyembunyikan jendela obrolan | ChatWindowConfiguration.Enabled |
Filterisasi pesan
TextChatService secara otomatis menyaring pesan obrolan berdasarkan informasi akun setiap pemain, sehingga anda tidak perlu secara manual menerapkan filter teks untuk semua jenis pesan obrolan.
Fungsionalitas | Obrolan warisan | Layanan Obrolan Teks |
---|---|---|
Filter pesan obrolan untuk pemain individu | Chat:FilterStringAsync() | Otomatik |
Filter pesan siaran | Chat:FilterStringForBroadcast() | Otomatik |
Obrolan jendela dan gelembung
Kedua jendela obrolan dan obrolan gelembung memiliki perilaku dan opsi kustomisasi yang sama dengan sistem obrolan lama.Karena sistem obrolan warisan hanya mengizinkan kustomisasi menggunakan modul obrolan atau wadah Players , layanan menyediakan kelas khusus ( ChatWindowConfiguration dan BubbleChatConfiguration ) untuk mengelola semua properti jendela obrolan dan obrolan gelembung.Selain itu, Anda dapat dengan mudah menyesuaikan dan melihat pratinjau penampilan dan perilaku obrolan gelembung Anda menggunakan pengaturan Studio alih-alih harus menuliskannya semua.
Fungsionalitas | Obrolan warisan | Layanan Obrolan Teks |
---|---|---|
Aktifkan Jendela Obrolan | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
Aktifkan Obrolan Gelembung | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
Tetapkan Properti Jendela Obrolan | Players:SetChatStyle() | ChatWindowConfiguration |
Tetapkan Properti Obrolan Gelembung | Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat``Class.Players:SetChatStyle() | BubbleChatConfiguration |
Aktifkan Gelembung NPC | Chat:Chat() | TextChatService:DisplayBubble() |
Migrasikan pembicara "data ekstra"
Sistem obrolan Lua lama memungkinkan pengembang untuk menggunakan SetExtraData pada kelas Speaker.Data ini digunakan untuk memformat warna nama, warna obrolan, atau untuk menerapkan tag nama untuk pembicara tertentu.
Sistem Obrolan Lama SetData Ekstra
-- Contoh pengaturan data ekstra pada speaker di sistem obrolan lama
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 tidak memiliki ekuivalen langsung ke SetExtraData .Sebagai gantinya, gunakan panggilan balik seperti OnWindowAdded untuk menyesuaikan penampilan pesan menggunakan teks kaya berdasarkan TextSource pesan.
Berikut adalah contoh emulasi "data ekstra" obrolan Lua lama dengan mengakses atribut pada Player objek:
Set Atribut Layanan Obrolan Teks
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)
Kemudian Anda dapat menggunakan panggilan balik OnChatWindowAdded untuk menyesuaikan tampilan jendela obrolan berdasarkan atribut yang ditetapkan pada pemain:
TextChatService Pada ChatWindow Ditambahkan
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