Roblox cung cấp tin nhắn dựa trên văn bản giữa các người chơi trong phiên trực tiếp thông qua TextChatService .Dịch vụ này có chức năng tiêu chuẩn, nhưng cũng cung cấp một bộ các phương pháp và sự kiện để mở rộng và tùy chỉnh trò chuyện, chẳng hạn như gửi tin nhắn dựa trên yêu cầu tùy chỉnh , thêm các quyền đặc biệt hoặc kiểm duyệt cho các người chơi cụ thể và tạo lệnh tùy chỉnh riêng để thực hiện các hành động cụ thể.
Các phần sau đây tổng hợp các lớp và ví dụ chính mà bạn có thể sử dụng để tùy chỉnh hệ thống trò chuyện.
Cấu hình cấp cao nhất
Lớp đơn TextChatService có trách nhiệm quản lý toàn bộ hệ thống trò chuyện, bao gồm xử lý lọc, kiểm duyệt và quyền truy cập tin nhắn trò chuyện của người dùng.Sử dụng các thuộc tính như CreateDefaultTextChannels và CreateDefaultCommands để bật hoặc tắt kênh trò chuyện và lệnh mặc định.
Cài đặt UI mặc định
TextChatService cung cấp một UI mặc định có thể được tùy chỉnh để phù hợp với nhu cầu của trải nghiệm của bạn.Mỗi cấu hình này có thể bị vô hiệu hóa để ẩn các thành phần UI liên quan và có thể được thay thế bằng các giao diện tùy chỉnh nếu cần.
- ChatWindowConfiguration — Đại diện cho giao diện cửa sổ trò chuyện mặc định, bao gồm cả sự xuất hiện và hành vi của nó. Vô hiệu hóa nó để ẩn cửa sổ trò chuyện.
- ChatInputBarConfiguration — Đại diện cho giao diện người dùng chat mặc định, bao gồm cả sự xuất hiện và hành vi của nó.
- > — Đại diện cho UI bong bóng trò chuyện mặc định, bao gồm cả sự xuất hiện và hành vi của nó.
Kênh, tin nhắn và lệnh
TextChannel — Đại diện cho kênh trò chuyện văn bản mà truyền các tin nhắn trò chuyện được gửi từ khách hàng đến máy chủ, sau đó hiển thị chúng cho các người dùng khác dựa trên quyền hạn.Các ví dụ này phải được cha truyền cho TextChatService để hoạt động.
TextSource — Đại diện cho một người dùng trong một TextChannel .Các ví dụ này được trực tiếp cha truyền cho TextChannel khi AddUserAsync() được gọi.Các nguồn văn bản bao gồm các quyền chi tiết của một người dùng trong kênh, chẳng hạn như khả năng gửi tin nhắn.Một người dùng có thể được liên kết với nhiều nguồn văn bản nếu chúng đã được thêm vào nhiều kênh văn bản.
TextChatMessage — Đại diện cho một tin nhắn trò chuyện duy nhất trong kênh văn bản, với thông tin cơ bản như người gửi tin nhắn, tin nhắn ban đầu, tin nhắn bị lọc và thời gian tạo.
TextChatCommand — Cho phép người dùng kích hoạt các hành động hoặc hành vi cụ thể bằng cách gửi tin nhắn phù hợp với PrimaryAlias hoặc SecondaryAlias .Các ví dụ này phải được cha truyền cho TextChatService để hoạt động.
Bản đồ dòng trò chuyện
Trò chuyện văn bản sử dụng mô hình client-server, với gửi khách hàng , máy chủ và nhận khách hàng .

Một người chơi gửi một tin nhắn từ thiết bị địa phương của họ, kích hoạt phương pháp TextChannel:SendAsync() .Phương pháp này xử lý tin nhắn và xác định xem nó có phải là lệnh trò chuyện hay không. tin nhắn trò chuyện thông thường.
Nếu tin nhắn là lệnh trò chuyện, nó kích hoạt sự kiện TextChatCommand.Triggered để thực hiện hành động được xác định. Không cần thêm bước nào khác.
Nếu tin nhắn là một tin nhắn trò chuyện thông thường, nó kích hoạt sự kiện TextChatService.SendingMessage để hiển thị tin nhắn cho người gửi trên máy khách gửi.Đồng thời, TextChannel:SendAsync() chuyển thông điệp đến máy chủ.
Máy chủ phát TextChannel.ShouldDeliverCallback để xác định xem có nên gửi tin nhắn cho các người chơi khác dựa trên các quyền và yêu cầu lọc cộng đồng Roblox.
Nếu TextChannel.ShouldDeliverCallback xác định rằng tin nhắn có thể gửi cho các người chơi khác, máy chủ áp dụng bất kỳ bộ lọc nào và kích hoạt TextChannel.OnIncomingMessage hai lần:
Lần đầu tiên là trên khách gửi và tín hiệu rằng máy chủ đang xử lý tin nhắn thông qua sự kiện TextChatService.MessageReceived .Sự kiện này thay thế tin nhắn địa phương trên máy gửi khách với tin nhắn đã xử lý từ máy chủ.Tin nhắn giống nhau nếu nguyên bản không yêu cầu lọc.
Lần thứ hai là trên các khách hàng nhận, kích hoạt sự kiện TextChatService.MessageReceived để hiển thị tin nhắn cho các người chơi khác.
Các móc trò chuyện văn bản và cuộc gọi lại
API TextChatService khuyến khích một sự phân tách rõ ràng về hình thức và giao hàng của tin nhắn trò chuyện.Nhiều ví dụ về hệ thống trò chuyện văn bản cung cấp các móc và cuộc gọi lại để định dạng ở các vị trí tập trung, rõ ràng.

| Gọi lại | Trả giá trị trả lại | | ----------------------------------------- | ----------------------------------- | | | boolean | | | | | | | | | | | | | | |
Gửi tin nhắn điều kiện
Cuộc gọi trả lại TextChannel.ShouldDeliverCallback trên máy chủ chỉ nên được định nghĩa.Cuộc gọi trả lại được kích hoạt cho mỗi TextSource con của kênh văn bản khi một tin nhắn được gửi để xác định xem tin nhắn có nên được gửi hay không.Cuộc gọi trả lại này có thể được sử dụng để thực hiện logic giao nhận tin nhắn tùy chỉnh có thể phụ thuộc vào bối cảnh chơi game bổ sung, như:
- Trò chuyện dựa trên cảm biến nơi người dùng chỉ có thể gửi tin nhắn cho những người gần họ.
- Ngăn người dùng có các thuộc tính nhất định gửi tin nhắn cho người khác.
Tùy chỉnh hiển thị tin nhắn
Giao diện mặc định TextChatService UI dựa vào văn bản giàu để định dạng và tùy chỉnh cách hiển thị các tin nhắn.Bạn có thể sử dụng các cuộc gọi lại sau đây để định dạng tin nhắn trước khi hiển thị cho người dùng, ví dụ như thêm màu sắc hoặc nhãn trò chuyện cho tên người dùng hoặc định dạng nội dung tin nhắn.
Các cuộc gọi trả lại sau đây được gọi mỗi TextChatMessage lần sắp hiển thị, cho phép bạn tùy chỉnh sự xuất hiện của cửa sổ trò chuyện dựa trên nội dung TextChannel, TextSource hoặc TextChatMessage .Khi một khách hàng gửi một tin nhắn, các cuộc gọi lại này sẽ được gọi một lần khi tin nhắn được gửi đến máy chủ và giá trị TextChatMessage.Status sẽ là Enum.TextChatMessageStatus.Sending .Khi tin nhắn được máy chủ nhận và đang được gửi đến các người dùng khác, khách gửi tin nhắn lại nhận được tin nhắn với giá trị Enum.TextChatMessageStatus được cập nhật.
- TextChatService.OnIncomingMessage — Phản ứng này nên được định nghĩa chỉ trên khách hàng.Cuộc gọi trả lại được kích hoạt khi nhận được một tin nhắn, từ máy chủ hoặc nếu khách hàng địa phương vừa gửi tin nhắn.Cuộc gọi trả lại được gọi mỗi TextChatMessage nhận được từ tất cả TextChannel các ví dụ và là đầu tiên xử lý tin nhắn trước khi nó được hiển thị cho người dùng.
- TextChannel.OnIncomingMessage — Phản ứng này nên được định nghĩa chỉ trên khách hàng.Cuộc gọi trả lại được kích hoạt khi nhận được tin nhắn từ máy chủ.Cuộc gọi trả lại được gọi mỗi TextChatMessage nhận được từ TextChannel .Các ví dụ mặc định TextChannel từ TextChatService.CreateDefaultTextChannels được tạo ra có callback này được xác định và có thể được ghi đè.
- TextChatService.OnBubbleAdded — Phản ứng này nên được định nghĩa chỉ trên khách hàng.Sử dụng nó để tùy chỉnh sự xuất hiện của bong bóng trò chuyện không phụ thuộc vào sự xuất hiện của tin nhắn trong UI cửa sổ trò chuyện.
- TextChatService.OnChatWindowAdded — Phản ứng này nên được định nghĩa chỉ trên khách hàng.Sử dụng nó để tùy chỉnh sự xuất hiện của tin nhắn trò chuyện trong UI cửa sổ trò chuyện không phụ thuộc vào sự xuất hiện của tin nhắn trong bong bóng trò chuyện.
Chuyển từ trò chuyện cũ
Phần này giúp bạn di chuyển từ hệ thống trò chuyện cũ bằng cách cung cấp các phương pháp thay thế để thực hiện các chức năng và hành vi trò chuyện chung bằng cách sử dụng TextChatService .
Trong cửa sổ Explorer, hãy chọn TextChatService.
Trong cửa sổ Tính năng, tìm kiếm ChatVersion và chọn TextChatService.
Chức năng cơ bản
Mặc dù cả hai hệ thống chia sẻ cùng các chức năng trò chuyện cơ bản tương tự, TextChatService các thực hiện thường có tính bền vững hơn và dễ dàng lặp lại hơn.
Chức năng | Trò chuyện cũ kỹ | Dịch vụ TextChat | Sự khác biệt |
---|---|---|---|
Gửi tin nhắn trò chuyện | Players:Chat() | TextChannel:SendAsync() | Phương thức SendAsync() hỗ trợ nhiều tính năng trò chuyện tiên tiến hơn, chẳng hạn như định dạng văn bản giàu và ưu tiên tin nhắn.Nó cũng bao gồm lọc tích hợp để giúp ngăn chặn không cho phép các tin nhắn không phù hợp được gửi. |
Thực hiện cuộc gọi trả lời tin nhắn | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | Hệ thống trò chuyện di sản gắn một chức năng vào sự kiện hệ thống trò chuyện để gửi tin nhắn.Hai phương pháp của TextChatService cung cấp sự linh hoạt và tùy chỉnh tốt hơn. |
Thêm lệnh trò chuyện tùy chỉnh | ChatService/ChatCommand mô-đun | TextChatCommand | TextChatService có một lớp chuyên dụng cho lệnh văn bản thay vì sử dụng một mô-đun trò chuyện cũ. |
Hiển thị một tin nhắn hệ thống | StarterGui:SetCore() sử dụng ChatMakeSystemMessage | TextChannel:DisplaySystemMessage() | Cuộc gọi trả lại TextChannel.OnIncomingMessage có thể trả về một TextChatMessageProperties ví dụ để tùy chỉnh xuất hiện của tin nhắn. |
Vô hiệu hóa trò chuyện | Cài đặt trò chơi trong Studio và ChatWindow/ChatSettings mô-đun để ẩn cửa sổ trò chuyện | ChatWindowConfiguration.Enabled |
Lọc tin nhắn
TextChatService tự động lọc tin nhắn trò chuyện dựa trên thông tin tài khoản của mỗi người chơi, vì vậy bạn không cần phải thực hiện lọc văn bản thủ công cho tất cả các loại tin nhắn trò chuyện.
Chức năng | Trò chuyện cũ kỹ | Dịch vụ TextChat |
---|---|---|
Lọc tin nhắn trò chuyện cho mỗi người chơi | Chat:FilterStringAsync() | Tự động |
Lọc tin nhắn phát sóng | Chat:FilterStringForBroadcast() | Tự động |
Trò chuyện cửa sổ và bong bóng
Cả hành vi cửa sổ trò chuyện và bong bóng trò chuyện của TextChatService và tùy chọn tùy chỉnh của chúng giống nhau với những của hệ thống trò chuyện cũ.Vì hệ thống trò chuyện di sản chỉ cho phép tùy chỉnh bằng cách sử dụng các mô-đun trò chuyện hoặc thùng chứa Players, dịch vụ cung cấp các lớp chuyên dụng ( ChatWindowConfiguration và BubbleChatConfiguration ) để quản lý tất cả các cửa sổ trò chuyện và bong bóng trò chuyện.Ngoài ra, bạn có thể dễ dàng điều chỉnh và xem trước bong bóng trò chuyện xuất hiện và hành vi của bạn bằng cách sử dụng cài đặt Studio thay vì phải lập trình tất cả chúng.
Chức năng | Trò chuyện cũ kỹ | Dịch vụ TextChat |
---|---|---|
Bật khung trò chuyện | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
Bật khả năng trò chuyện bong bóng | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
Đặt tính chất của cửa sổ trò chuyện | Players:SetChatStyle() | ChatWindowConfiguration |
Đặt tính chất trò chuyện bong bóng | Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat``Class.Players:SetChatStyle() | BubbleChatConfiguration |
Bật bong bóng NPC | Chat:Chat() | TextChatService:DisplayBubble() |
Chuyển phát biểu "dữ liệu bổ sung"
Hệ thống trò chuyện Lua di sản cho phép các nhà phát triển sử dụng SetExtraData trên lớp Speaker.Dữ liệu này được sử dụng để định dạng màu tên, màu trò chuyện hoặc để áp dụng thẻ tên cho một người phát biểu nhất định.
Hệ thống trò chuyện kế thừa SetExtraData
-- Một ví dụ về việc thiết lập dữ liệu bổ sung trên một loa trong hệ thống trò chuyện di sản
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 không có tương đương trực tiếp với SetExtraData .Thay vào đó, sử dụng callbacks như OnWindowAdded để tùy chỉnh sự xuất hiện của tin nhắn bằng văn bản giàu dựa trên TextSource của tin nhắn.
Ví dụ sau đây là một ví dụ về việc giả lập "dữ liệu bổ sung" của trò chuyện Lua cũ bằng cách truy cập các thuộc tính trên Player các đối tượng:
Dịch vụ trò chuyện văn bản 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)
Sau đó, bạn có thể sử dụng callback OnChatWindowAdded để tùy chỉnh sự xuất hiện của cửa sổ trò chuyện dựa trên các thuộc tính được đặt trên người chơi:
Dịch vụ trò chuyện văn bản 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