您可以使用以下聊天模組來支持 舊版聊天系統 的服務器側行為,包括:
- 聊天服務:一個單獨的模塊,管理所有其他聊天模塊。
- 聊天喇叭 : 可以在聊天頻道創建訊息的實體;每個 Player 將自動擁有一個聊天喇叭,機器人可以透過創建聊天喇叭來聊天。
- 聊天訊息 : 一個容器,ChatSpeaker 將傳送到聊天頻道的內容的容器;包含用於格式化訊息或添加額外功能的指令的元數據。
- 聊天頻道 : 聊天者可以透過此頻道交換聊天訊息的通道;也可用於團隊聊天和鬼打盹聊天。
聊天服務
聊天服務 是一個單獨對象,處理 Lua 聊天系統的服務器側行為,例如 ChatChannels 和 ChatSpeakers。
所有 ModuleScript 在 ChatModules 文件夾內的功能都應返回一個函數,該函數將使用 ChatService 單例來呼叫。
方法
新增通道
- 說明:: 創建一個具有給定名稱的聊天頻道對象,並將其返回。
- 返回值:: ChatChannel
移除通道
- 說明:: 移除指定名稱的通道
- 返回值:: 無效
取得通道
- 說明:: 返回指定名稱的通道,或 nil 如果不存在。
- 返回值:: ChatChannel
新增喇叭
- 說明:: 創建並將給定名稱的發言者添加到聊天中,然後返回它。
- 返回值:: ChatSpeaker
移除喇叭
- 說明:: 移除使用給定名稱的聊天中的發言者。
- 返回值:: 無效
取得喇叭
- 說明:: 返回指定名稱的揚聲器,或 nil 如果不存在。
- 返回值:: ChatSpeaker
取得通道列表
- 參數:: 無
- 說明:: 返回聊天中所有非私人通道的名稱列表。
- 返回值:: 陣列< string >
取得自動加入通道列表
- 參數:: 無
- 說明:: 返回 AutoJoin 設為真實的聊天中所有通道的名稱列表。
- 返回值:: 陣列< string >
註冊過濾訊息功能
- 說明: 註冊過濾功能到聊天,由 functionId 標示。訊息的任何變更將持續存在,並在訊息通過所有其他過濾功能時顯示。此功能傳送喇叭的名稱、訊息對物件和訊息起源的通道。
- 返回值:: 無效
- 範例::
-- 將此範例貼到聊天模組文件夾內的模組腳本中。
-- 這個例子過濾關鍵字,如果成功,將設置訊息的聊天顏色
local functionId = "greenText"
local keyword = "#green"
local chatColor = Color3.new(0, 1, 0) -- 綠色
local function doFilter(speaker, messageObject, channelName)
-- 檢查訊息是否包含關鍵字
local start, finish = string.find(messageObject.Message, keyword)
if start and finish then
-- 從訊息中移除(過篩選器)關鍵字,並設定聊天顏色
messageObject.Message = string.gsub(messageObject.Message, keyword, "")
messageObject.ExtraData.ChatColor = chatColor
end
end
local function runChatModule(ChatService)
ChatService:RegisterFilterMessageFunction(functionId, doFilter)
end
return runChatModule
取消註冊過濾訊息功能
- 說明:: 取消註冊過濾功能(由 RegisterFilterMessageFunction 註冊),給予其標識符,functionId 。
- 返回值:: 無效
註冊過程指令函數
- 說明: 註冊一個過程指令功能到聊天,由 functionId 標示。在訊息被過濾之前,它會通過 func (以及其他由此註冊的功能) 。函數 func 應檢查訊息是否呼叫指令。如果是,執行指令的動作並返回真值。返回真指示訊息確實是指令,不應顯示。該功能可以使用 UnregisterProcessCommandsFunction 取消註冊。
- 返回值:: 無效
- 範例::
-- 將此範例貼到聊天模組文件夾內的模組腳本中。
local functionId = "getPizza"
local command = "/pizza"
local toolId = 22596452 -- 意大利辣香腸披薩片裝備
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
取消註冊過程指令函數
- 返回值:: 無效
事件
已新增通道
- 說明:: 在聊天中添加通道時發生火災。
通道已移除
- 說明:: 在通道從聊天中移除時發生火災。
已新增喇叭
- 說明:: 在聊天中添加揚聲器時發生火災。
已移除喇叭
- 說明:: 在移除喇叭時發生火災。
聊天攝音機
A 聊天喇叭 是一個實體的代表,可以在 聊天頻道 上發言。每個 Player 連接到遊戲的自動都會有相關的聊天員。額外的聊天喇叭可以用 ChatService:AddSpeaker() 為非使用者 (例如廣播者或提示訊息) 建造。
屬性
名稱
- 說明:: 這個講者的名稱,用於在呼叫許多其他函數時引用此講者。
方法
加入通道
- 說明:: 添加喇叭到指定的通道 channelName
- 返回值:: 無效
離開通道
- 說明:: 移除發言者從通道中移除指定的 channelName
- 返回值:: 無效
取得通道列表
- 參數:: 無
- 說明:: 返回發言者所在的所有通道的名稱列表。
- 返回值:: 陣列< string >
在通道中是否
- 說明:: 返回喇叭是否在指定的通道中。
- 返回值:: bool
說話訊息
- 返回值:: 聊天訊息
傳送訊息
- 參數:: : , : , : , :
- 返回值:: 無效
傳送系統訊息
- 返回值:: 無效
取得玩家
- 參數:: 無
- 說明:: 返回與發言者相關的 Player 對象。如果喇叭不是給用戶(機器人)的,則會返回 nil 。
- 返回值:: Player 或 nil
設定額外資料
- 返回值:: 無效
取得額外資料
- 說明:: 返回與給定的 key 相關的額外資料,使用 SetExtraData 設置。
- 返回值:: 變體
設定主通道
- 說明:: 將喇叭設置在提供的通頻道上交談。發射主通道設置。
- 返回值:: nil
事件
說明訊息
已收到訊息
收到系統訊息
- 說明:: 當發言者從指定的 聊天頻道 收到系統 聊天訊息 時,發射時間。
已加入頻道
左通道
已靜音
取消静音
額外資料已更新
- 說明:: 在使用 SetExtraData 更新發言者額外資料中的鑰匙的預設值時發射。
主通道設置
聊天訊息
一個 聊天訊息 是代表來自 聊天講者 的一個數據結構,用於傳送一個訊息。它包含關於訊息的資料,包括文字長度、訊息是否已被 Roblox 過濾,以及關於訊息外觀的額外資料。
屬性
ID
- 類型:: int
- 說明:: 訊息的獨特數字標識符。
從扬聲器
- 類型:: string :
- 說明:: 發送訊息的 ChatSpeaker 名稱。
原始通道
- 類型:: string :
- 說明:: 訊息起源的 ChatChannel 名稱。
已過濾
- 類型:: bool
- 說明: 描述訊息是否被 Roblox 過濾(如果真的,訊息將是 nil )
訊息長度
- 類型:: int
- 說明:: 訊息的長度。您可以使用此來生成散列的字串,如果訊息被過濾。
訊息
- 說明:: 訊息的文字。此屬性將在 IsFiltered 為真的情況下為 nil 。
訊息類型
- 類型:: string :
- 說明:: 訊息的類型。這些類型在聊天Constants模組中被描述:
- 可能值:: "Message" 、"System" 、"MeCommand" 、"Welcome" 、"SetCore" 、"Whisper"
時間
額外資料
- 類型:: 辭典< string , 變體>
聊天通道
聊天頻道 是一個儲存單個通道資料的對象,這是一種方式,可以讓訊息在 聊天講者 之間交換。它也有決定訊息可見性以及使用者是否手動加入或離開通道的存取權限屬性 (使用 /join 或 /leave 指令)。
預設每個使用者都有一個 聊天喇叭 ,它會自動添加到「所有」和「系統」聊天頻道(雖然「系統」是只能閱讀的)。如果使用者在 Player.Team 上,他們也只能使用屬於那個團隊的通道。
屬性
名稱
- 類型:: string
- 說明:: 通頻道名稱,用於在其他函數中引用通道。
歡迎訊息
- 類型:: string
- 說明:: 當使用者加入通頻道時顯示的訊息。
可加入
- 類型:: bool
可離開
- 類型:: bool
- 說明:: 決定使用者是否可以手動離開通道,使用 /leave 指令。使用 ChatSpeaker:LeaveChannel() 或其他方法仍然可以從通道中移除用戶,即使此屬性為 false 也是如此。
自動加入
- 類型:: bool
- 說明:: 決定玩家的 ChatSpeaker 是否會在加入遊戲時自動加入通道。非使用者發言者不會自動加入通道,即使此屬性為真(您可以使用 ChatSpeaker:JoinChannel() 來執行此操作)。
私人
- 類型:: bool
- 說明:: 決定是否將通道包含在由 ChatService:GetChannelList() 返回的通道列表中。這是用於低語對話和團隊對話的。
方法
踢除喇叭
- 說明:: 移除具有給定 speakerName 的講者從通頻道中,向用戶和通道發送消息,將用戶踢出的用戶從通道中移除。如果提供了 reason,原因將包含在訊息中。
- 返回值:: 無效
静音扬声器
- 說明:: 將喇叭靜音,使用指定的 speakerName 在通道上的時間長度靜音。如果 duration 是 nil 或 0,則靜音無限期。如果 reason 提供,則會向包含原因的通道發送一個訊息。
- 返回值:: 無效
取消静音扬声器
- 說明:: 將通頻道中的指定 speakerName 解除靜音。
- 返回值:: 無效
是否静音扬声器
- 說明:: 描述是否有與給定的 speakerName 相同的發言者在通頻道中靜音。
- 返回值:: bool
取得喇叭列表
- 參數:: 無
- 說明:: 返回包含所有如果名稱的 ChatSpeaker 目前在通頻道中的列表。
- 返回值:: 陣列< string >
傳送系統訊息
- 說明:: 從「系統」ChatSpeaker發送一個訊息到通頻道。
- 返回值:: 無效
註冊過濾訊息功能
- 說明:: 註冊一個過濾功能,func ,由 functionId 識別到通頻道。過濾功能將使用 ChatSpeaker、ChatMessage 和 string:訊息起源的通道名稱。訊息的變更將持續存在,並在過濾後顯示。
- 返回值:: 無效
- 範例::
-- 將此範例貼到聊天模組文件夾內的模組腳本中。
local functionId = "getPizza"
local command = "/pizza"
local toolId = 22596452 -- 意大利辣香腸披薩片裝備
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
取消註冊過濾訊息功能
- 說明:: 取消註冊過濾功能(由 RegisterFilterMessageFunction 註冊),給予其標識符,functionId 。
- 返回值:: 無效
註冊過程指令函數
- 說明:: 註冊一個過程指令功能,func ,由 functionId 識別到聊天。在訊息被過濾之前,它會通過 func (以及其他由此註冊的功能) 。函數 func 應該檢查訊息是否呼叫指令。如果是,執行指令的動作並返回真值。返回真指示訊息確實是指令,不應顯示。該功能可以使用 UnregisterProcessCommandsFunction 取消註冊。
- 返回值:: 無效
- 範例::
-- 將此範例貼到聊天模組文件夾內的模組腳本中。
-- 這個例子過濾關鍵字,如果成功,將設置訊息的聊天顏色
local functionId = "greenText"
local keyword = "#green"
local chatColor = Color3.new(0, 1, 0) -- 綠色
local function doFilter(speaker, messageObject, channelName)
-- 檢查訊息是否包含關鍵字
local start, finish = string.find(messageObject.Message, keyword)
if start and finish then
-- 從訊息中移除(過篩選器)關鍵字,並設定聊天顏色
messageObject.Message = string.gsub(messageObject.Message, keyword, "")
messageObject.ExtraData.ChatColor = chatColor
end
end
local function runChatModule(ChatService)
-- 創建一個通道並註冊過濾功能
local testChannel = ChatService:AddChannel("TestChannel")
testChannel:RegisterFilterMessageFunction(functionId, doFilter)
end
return runChatModule
取消註冊過程指令函數
- 說明:: 取消註冊指定標識 (由 functionId 。
- 返回值:: 無效
事件
已發送的訊息
- 說明:: 在通頻道發布訊息時發生火災。
發言者已加入
- 說明:: 當 ChatSpeaker 加入通頻道時,發生火災。
喇叭左
- 說明:: 當 ChatSpeaker 離開通頻道時,發生火災。
喇叭靜音
- 說明:: 在通頻道中靜音一個 ChatSpeaker 時發生火災。
取消喇叭靜音
- 說明:: 在 ChatSpeaker 被解除靜音時發射。