Panduan obrolan teks

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

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.

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 .

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

  2. Server menembak TextChannel.ShouldDeliverCallback untuk menentukan apakah akan mengirimkan pesan ke pemain lain berdasarkan izin dan persyaratan penyaringan komunitas Roblox.

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

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

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

A flowchart of the TextChatService callbacks order

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

  1. Di jendela Explorer, pilih TextChatService.

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

FungsionalitasObrolan warisanLayanan Obrolan TeksPerbedaan
Kirim pesan obrolanPlayers: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 pesanChat:InvokeChatCallback()``Class.Chat:RegisterChatCallback()Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessageSistem 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 kustomChatService/ChatCommand modulTextChatCommandTextChatService memiliki kelas khusus untuk perintah teks daripada menggunakan modul obrolan lama.
Tampilkan pesan sistemStarterGui:SetCore() menggunakan ChatMakeSystemMessageTextChannel:DisplaySystemMessage()Panggilan balik TextChannel.OnIncomingMessage dapat mengembalikan instansi TextChatMessageProperties untuk menyesuaikan penampilan pesan.
Nonaktifkan obrolanPengaturan permainan di Studio dan ChatWindow/ChatSettings modul untuk menyembunyikan jendela obrolanChatWindowConfiguration.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.

FungsionalitasObrolan warisanLayanan Obrolan Teks
Filter pesan obrolan untuk pemain individuChat:FilterStringAsync()Otomatik
Filter pesan siaranChat: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.

FungsionalitasObrolan warisanLayanan Obrolan Teks
Aktifkan Jendela ObrolanClass.Chat.LoadDefaultChat``Class.Players.ClassicChatChatWindowConfiguration.Enabled
Aktifkan Obrolan GelembungClass.Chat.BubbleChatEnabled``Class.Players.BubbleChatBubbleChatConfiguration.Enabled
Tetapkan Properti Jendela ObrolanPlayers:SetChatStyle()ChatWindowConfiguration
Tetapkan Properti Obrolan GelembungChat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat``Class.Players:SetChatStyle()BubbleChatConfiguration
Aktifkan Gelembung NPCChat: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