Bạn có thể sử dụng các mô-đun trò chuyện sau đây để hỗ trợ các hành vi bên máy chủ của hệ thống trò chuyện Cũ bao gồm:
- ChatService : Một đối tượng duy nhất quản lý tất cả các mô-đun trò chuyện khác.
- ChatSpeaker : Một thực thể có thể tạo tin nhắn trong một Kênh trò chuyện; mỗi Player sẽ tự động có một ChatSpeaker và bots có thể trò chuyện bằng cách tạo ChatSpeaker.
- Tin nhắn trò chuyện : Một thùng chứa cho nội dung mà một Speaker trò chuyện gửi đến một Kênh trò chuyện; bao gồm metadata được sử dụng để định dạng tin nhắn hoặc thêm chức năng bổ sung cho lệnh.
- Kênh trò chuyện : Một kênh mà ChatSpeakers có thể trao đổi Tin nhắn trò chuyện; cũng được sử dụng cho trò chuyện nhóm và trò chuyện lén lút.
Dịch vụ chat
ChatService là một đối tượng duy nhất xử lý hành vi bên máy chủ của hệ thống trò chuyện Lua, như ChatChannels và ChatSpeakers .
Tất cả ModuleScript s trong thư mục ChatModule phải trả về một chức năng, và chức năng đó sẽ được gọi với các đối tượng duy nhất của ChatService.
Phương pháp
Thêm kênh
- Mô tả: Tạo một đối tượng ChatChannel với tên đã cho và trả lại nó.
- Trả lại: Kênh trò chuyện
Xóa kênh
- Mô tả: Loại bỏ một kênh với tên đã cho
- Trả về: void
Nhận kênh GetChannel
- Mô tả: Trả về kênh với tên đã cho, hoặc nil nếu nó không tồn tại.
- Trả lại: Kênh trò chuyện
Thêm Speaker
- Mô tả: Tạo và thêm một diễn giả vào cuộc trò chuyện với tên đã cho, sau đó trả lại nó.
- Trả lại: ChatSpeaker
Loại bỏ Speaker
- Mô tả: Loại bỏ người phát biểu khỏi cuộc trò chuyện với tên đã cho.
- Trả về: void
Nhận Speaker
- Mô tả: Trả về loa với tên được cung cấp, hoặc nil nếu nó không tồn tại.
- Trả lại: ChatSpeaker
Nhận danh sách kênh GetChannelList
- Tham số: không có
- Mô tả: Trả về một danh sách các tên của tất cả các kênh không riêng tư trong trò chuyện.
- Trả về: array< string >
Nhận danh sách tham gia tự độngJoinChannel
- Tham số: không có
- Mô tả: Trả về một danh sách các tên của tất cả các kênh trong trò chuyện với AutoJoin được đặt thành true.
- Trả về: array< string >
Chức năng RegisterFilterMessage
- Mô tả: Đăng ký một chức năng bộ lọc cho trò chuyện được xác định bởi functionId .Bất kỳ thay đổi nào đối với tin nhắn sẽ tồn tại và được hiển thị khi tin nhắn thông qua tất cả các chức năng lọc khác.Chức năng này truyền tên của người phát, đối tượng tin nhắn và kênh mà tin nhắn bắt nguồn.
- Trả về: void
- Ví dụ:
-- Sao chép ví dụ này vào ModuleScript trong thư mục ChatModules.
-- Ví dụ này lọc một từ khóa, và nếu thành công, thiết lập chatColor của tin nhắn
local functionId = "greenText"
local keyword = "#green"
local chatColor = Color3.new(0, 1, 0) -- xanh lá
local function doFilter(speaker, messageObject, channelName)
-- Kiểm tra xem tin nhắn có chứa từ khóa hay không
local start, finish = string.find(messageObject.Message, keyword)
if start and finish then
-- Loại bỏ (bộ lọc) từ khóa khỏi tin nhắn, cũng thiết lập ChatColor
messageObject.Message = string.gsub(messageObject.Message, keyword, "")
messageObject.ExtraData.ChatColor = chatColor
end
end
local function runChatModule(ChatService)
ChatService:RegisterFilterMessageFunction(functionId, doFilter)
end
return runChatModule
Chức năng UnregisterFilterMessage
- Mô tả: Không đăng ký chức năng bộ lọc (đã đăng ký bởi RegisterFilterMessageFunction) với nhận dạng của nó, functionId .
- Trả về: void
Chức năng RegisterProcessCommands
- Mô tả: Đăng ký một chức năng lệnh quá trình cho cuộc trò chuyện được xác định bởi functionId .Trước khi tin nhắn được lọc, nó sẽ đi qua func (và các chức năng khác được đăng ký bởi nó).Chức năng func nên kiểm tra xem tin nhắn có kích hoạt lệnh hay không.Nếu vậy, thực hiện hành động của lệnh và trả về true.Trả về true cho thấy tin nhắn thực sự là một lệnh và không nên hiển thị.Chức năng có thể không được đăng ký bằng cách sử dụng UnregisterProcessCommandsFunction.
- Trả về: void
- Ví dụ:
-- Sao chép ví dụ này vào ModuleScript trong thư mục ChatModules.
local functionId = "getPizza"
local command = "/pizza"
local toolId = 22596452 -- Thiết bị cắt pizza Pepperoni
local function processCommand(speakerName, message, channelName)
if string.sub(message, 1, command:len()) == command then
local model = game:GetService("InsertService"):LoadAsset(toolId)
local tool = model:GetChildren()[1]
local speaker = ChatService:GetSpeaker(speakerName)
local player = speaker:GetPlayer()
tool.Parent = player.Backpack
return true
end
return false
end
local function runChatModule(ChatService)
ChatService:RegisterProcessCommandsFunction(functionId, processCommand)
end
return runChatModule
Chức năng UnregisterProcess Command
- Mô tả: Không đăng ký một máy xử lý lệnh (đã đăng ký bởi RegisterProcessCommandsFunction ) dựa trên nhận dạng, functionId .
- Trả về: void
Sự kiện
Thêm kênh
- Mô tả: Nổ khi một kênh được thêm vào trò chuyện.
Kênh đã bị xóa
- Mô tả: Bắt lửa khi một kênh bị xóa khỏi trò chuyện.
Người phát biểu được thêm
- Mô tả: Bắt lửa khi một diễn giả được thêm vào trò chuyện.
Người phát biểu đã bị xóa
- Mô tả: Nổ khi một người phát biểu bị xóa khỏi cuộc trò chuyện.
Người phát thanh trò chuyện
Một Người nói trò chuyện là sự hiện thị của một thực thể có thể nói trong một Kênh trò chuyện.Mỗi Player kết nối với trò chơi tự động có một ChatSpeaker liên quan.Các Speaker trò chuyện bổ sung có thể được xây dựng cho người dùng không (như người thông báo hoặc tin nhắn gợi ý) bằng cách sử dụng ChatService:AddSpeaker() .
Thuộc tính
Tên
- Mô tả: Tên của người phát loa, được sử dụng để tham chiếu đến người phát biểu này trong khi gọi nhiều chức năng khác.
Phương pháp
Kênh tham gia
- Mô tả: Thêm người phát vào kênh với channelName được cho
- Trả về: void
Rời kênh
- Mô tả: Loại bỏ người phát khỏi kênh với channelName được cung cấp
- Trả về: void
Nhận danh sách kênh GetChannelList
- Tham số: Không có
- Mô tả: Trả về một danh sách các tên của tất cả các kênh mà người phát biểu ở trong.
- Trả về: array< string >
Đang có trong kênh IsInChannel
- Mô tả: Trả về xem người phát có ở trong kênh với channelName đã cho.
- Trả lại: bool
Nói tin nhắn
- Mô tả: Gây ra cho người nói nói message và trả lại đối tượng Tin nhắn trò chuyện được tạo ra khi làm như vậy.
- Trả lại: Tin nhắn trò chuyện
Gửi tin nhắn
- Tham số: : , : > , > : > , > : >
- Mô tả: Gửi một tin nhắn đến ChatSpeaker với tên fromSpeaker đã cho.Nếu không có loa như vậy trong kênh, phương pháp này tạo một cảnh báo và loa sẽ không thấy tin nhắn.
- Trả về: void
Gửi tin nhắn hệ thống
- Mô tả: Gửi một tin nhắn hệ thống đến ChatChannel với channelName được cho .Nếu người phát không ở trong kênh, thì tin nhắn này sẽ tạo một cảnh báo và các diễn giả khác trong kênh sẽ không nhìn thấy tin nhắn.
- Trả về: void
Nhận người chơi
- Tham số: Không có
- Mô tả: Trả về đối tượng Player liên quan đến người phát biểu.Nếu loa không dành cho một người dùng (một bot) thì điều này trả về nil .
- Trả về: Player hoặc nil
Đặt thêm dữ liệu
- Mô tả: Đặt một số dữ liệu bổ sung cho người nói dưới một điều kiện cụ thể key .Bất cứ khi nào người phát gửi một Tin nhắn trò chuyện thêm dữ liệu này được gắn vào tin nhắn nếu không có ghi rõ ràng với tin nhắn.Ví dụ, điều này cho phép màu trò chuyện của người loabiểu được cài đặt.
- Trả về: void
Nhận thêm dữ liệu
- Mô tả: Trả về dữ liệu bổ sung liên quan đến key đã cho, được thiết lập bằng Cài đặt dữ liệu bổ sung.
- Trả về: Biến thể
Chỉnh kênh chính
- Mô tả: Đặt loa phát nói trong kênh được cung cấp. Bắn ra MainChannelSet.
- Trả lại: nil
Sự kiện
Tin nhắn đã nói
Tin nhận được
- Mô tả: Bị bắn khi người phát nhận được một Tin nhắn trò chuyện từ một người phát khác trên một Kênh trò chuyện
Tin nhận đượcSystemMessage
- Mô tả: Bị bắn khi người phát nhận được một hệ thống Tin nhắn trò chuyện từ một Kênh trò chuyện với định dạng channelName được cho.
Tham gia kênh
Kênh Trái
Tắt tiếng
- Mô tả: Bị bắn khi người nói bị tắt tiếng trên Kênh trò chuyện với channelName được cung cấp cho thời gian được cho (nếu có).Có thể hoặc có thể không có một reason được cung cấp.
Bật tiếng
Dữ liệu bổ sung được cập nhật
- Mô tả: Bắn khi giá trị mặc định của một chìa khóa trong dữ liệu bổ sung của người phát được cập nhật bằng cách sử dụng SetExtraData.
Bộ truyền chínhMainChannelSet
Tin nhắn trò chuyện
Một Tin nhắn trò chuyện là một cấu trúc dữ liệu đại diện cho một tin nhắn được gửi từ một Người phát trò chuyện.Nó chứa dữ liệu về tin nhắn, bao gồm chiều dài của văn bản, xem văn bản đã được lọc bởi Roblox hay không, và dữ liệu bổ sung về sự xuất ngoại hìnhcủa tin nhắn.
Thuộc tính
ID
- Loại: int
- Mô tả: Một nhận dạng số duy nhất cho tin nhắn.
Từ Speaker
- Loại: string :
- Mô tả: Tên của ChatSpeaker người đã gửi tin nhắn.
Kênh gốc
- Loại: string :
- Mô tả: Tên của Kênh trò chuyện mà tin nhắn bắt nguồn.
Bị lọc
- Loại: bool
- Mô tả: Mô tả xem liệu tin nhắn có bị lọc bởi Roblox (nếu đúng, tin nhắn sẽ là nil )
Chiều dài tin nhắn
- Loại: int
- Mô tả: Chiều dài của tin nhắn. Bạn có thể sử dụng điều này để tạo một chuỗi bị mã hóa nếu tin nhắn đã bị lọc.
Tin nhắn
- Mô tả: Văn bản của tin nhắn. Thuộc tính này sẽ là nil nếu IsFiltered là true.
Loại tin nhắn
- Loại: string :
- Mô tả: Loại của tin nhắn. Các loại này được mô tả trong mô-đun ChatConstants:
- Các giá trị có thể: "Message" , "System" , "MeCommand" , "Welcome" , "SetCore" , "Whisper"
Thời gian
Dữ liệu bổ sung
- Loại: từ điển< string , Biến thể>
Kênh trò chuyện
Kênh trò chuyện là một đối tượng lưu trữ dữ liệu về một kênh duy nhất, đó là một cách mà tin nhắn có thể được trao đổi giữa Người phát biểu trò chuyện.Nó cũng có các thuộc tính quyền truy cập xác định tầm nhìn của tin nhắn cùng với việc người dùng có thể tham gia hoặc rời khỏi kênh thủ công (sử dụng /join hoặc /leave lệnh).
Mặc định, mỗi người dùng có một ChatSpeaker được thêm tự động vào kênh trò chuyện "Tất cả" và "Hệ thống" (mặc dù, "Hệ thống" chỉ đọc).Nếu người dùng ở trên một Player.Team, họ cũng sẽ có quyền truy cập vào một kênh chỉ cho đội đó.
Thuộc tính
Tên
- Loại: string
- Mô tả: Tên của kênh, được sử dụng để tham chiếu đến kênh trong các chức năng khác.
Tin nhắn chào mừng
- Loại: string
- Mô tả: Một tin nhắn để hiển thị khi người dùng tham gia kênh.
Tham gia được
- Loại: bool
- Mô tả: Xác định xem người dùng có thể tham gia kênh bằng tay bằng lệnh /join hay không.Một người dùng vẫn có thể được thêm vào kênh bằng cách sử dụng ChatSpeaker:JoinChannel() hoặc cách khác ngay cả khi thuộc tính này là sai.
Có thể bỏ đi
- Loại: bool
- Mô tả: Xác định xem người dùng có thể bỏ kênh bằng tay bằng lệnh /leave hay không.Một người dùng vẫn có thể bị xóa khỏi kênh bằng cách sử dụng ChatSpeaker:LeaveChannel() hoặc cách khác ngay cả khi thuộc tính này là sai.
Tham gia tự động
- Loại: bool
- Mô tả: Xác định xem người chơi có ChatSpeaker sẽ tự động tham gia kênh khi tham gia trò chơi hay không.Các loa phát thanh không người dùng sẽ không tự động tham gia kênh, ngay cả khi tính năng này là đúng (Bạn có thể sử dụng ChatSpeaker:JoinChannel() để làm điều này).
Riêng tư
- Loại: bool
- Mô tả:: Xác định xem kênh có được bao gồm trong danh sách kênh được trả về bởi ChatService:GetChannelList().Điều này cho cuộc trò chuyện thì thầm và cuộc trò chuyện nhóm.
Phương pháp
Người phát biểu kicker
- Mô tả: Loại bỏ người phát với speakerName được cung cấp từ kênh, gửi một tin nhắn cho cả người dùng và kênh mà người dùng bị đuổi ra.Nếu một reason được cung cấp, lý do sẽ được bao gồm trong tin nhắn.
- Trả về: void
Người phát sóng tắt tiếng
- Mô tả: Tắt người phát với speakerName được cho trong kênh trong một thời gian được xác định bằng giây.Nếu duration là nil hoặc 0, tắt tiếng là vô cực.Nếu reason được cung cấp, thì một tin nhắn sẽ được gửi đến kênh với lý do bao gồm.
- Trả về: void
Ngưng tắt loa
- Mô tả: Tắt người phát với speakerName được cho trong kênh.
- Trả về: void
Người phát nói tắt tiếng
- Mô tả: Mô tả xem có phải người nói với speakerName được đưa vào kênh hiện đang bị tắt hay không.
- Trả lại: bool
Nhận danh sách loa phát nói
- Tham số: Không có
- Mô tả: Trả về một danh sách chứa tất cả nếu tên của ChatSpeaker hiện đang có trong kênh.
- Trả về: array< string >
Gửi tin nhắn hệ thống
- Mô tả: Gửi một tin nhắn từ "Hệ thống" ChatSpeaker đến kênh.
- Trả về: void
Chức năng RegisterFilterMessage
- Mô tả: Đăng ký một chức năng bộ lọc, func , được xác định bởi functionId để kênh.Chức năng lọc sẽ được gọi với ChatSpeaker, ChatMessage và string tên kênh mà tin nhắn bắt nguồn từ.Các thay đổi cho tin nhắn sẽ tồn tại và sẽ được hiển thị sau khi lọc.
- Trả về: void
- Ví dụ:
-- Sao chép ví dụ này vào ModuleScript trong thư mục ChatModules.
local functionId = "getPizza"
local command = "/pizza"
local toolId = 22596452 -- Thiết bị cắt pizza Pepperoni
local function processCommand(speakerName, message, channelName)
if string.sub(message, 1, command:len()) == command then
local model = game:GetService("InsertService"):LoadAsset(toolId)
local tool = model:GetChildren()[1]
local speaker = ChatService:GetSpeaker(speakerName)
local player = speaker:GetPlayer()
tool.Parent = player.Backpack
return true
end
return false
end
local function runChatModule(ChatService)
ChatService:RegisterProcessCommandsFunction(functionId, processCommand)
end
return runChatModule
Chức năng UnregisterFilterMessage
- Mô tả: Không đăng ký chức năng bộ lọc (đã đăng ký bởi RegisterFilterMessageFunction) với nhận dạng của nó, functionId .
- Trả về: void
Chức năng RegisterProcessCommands
- Mô tả: Đăng ký một chức năng lệnh quá trình, func , được xác định bởi functionId để chat.Trước khi tin nhắn được lọc, nó sẽ đi qua func (và các chức năng khác được đăng ký bởi nó).Chức năng func nên kiểm tra xem tin nhắn có kích hoạt lệnh hay không.Nếu vậy, thực hiện hành động của lệnh và trả về true.Trả về true cho thấy tin nhắn thực sự là một lệnh và không nên hiển thị.Chức năng có thể không được đăng ký bằng cách sử dụng UnregisterProcessCommandsFunction.
- Trả về: void
- Ví dụ:
-- Sao chép ví dụ này vào ModuleScript trong thư mục ChatModules.
-- Ví dụ này lọc một từ khóa, và nếu thành công, thiết lập chatColor của tin nhắn
local functionId = "greenText"
local keyword = "#green"
local chatColor = Color3.new(0, 1, 0) -- xanh lá
local function doFilter(speaker, messageObject, channelName)
-- Kiểm tra xem tin nhắn có chứa từ khóa hay không
local start, finish = string.find(messageObject.Message, keyword)
if start and finish then
-- Loại bỏ (bộ lọc) từ khóa khỏi tin nhắn, cũng thiết lập ChatColor
messageObject.Message = string.gsub(messageObject.Message, keyword, "")
messageObject.ExtraData.ChatColor = chatColor
end
end
local function runChatModule(ChatService)
-- Tạo một kênh và đăng ký chức năng bộ lọc
local testChannel = ChatService:AddChannel("TestChannel")
testChannel:RegisterFilterMessageFunction(functionId, doFilter)
end
return runChatModule
Chức năng UnregisterProcess Command
- Mô tả: Không đăng ký một máy xử lý lệnh (đã đăng ký bởi RegisterProcessCommandsFunction) dựa trên nhận dạng, functionId .
- Trả về: void
Sự kiện
Thông điệp được đăng
- Mô tả: Bắt lửa khi một tin nhắn được đăng trong kênh.
Tham gia loa phát biểu
- Mô tả: Bắt lửa khi một ChatSpeaker tham gia kênh.
Người phát biểuLeft
- Mô tả: Bắt lửa khi một ChatSpeaker rời kênh.
Người phát nói tắt tiếng
- Mô tả: Bắt lửa khi một ChatSpeaker đã bị tắt trong kênh.
Người phát nói bị tắt tiếng
- Mô tả: Bắt lửa khi một ChatSpeaker được bật lên.