คุณสามารถใช้โมดูลแชทต่อไปนี้เพื่อสนับสนุนพฤติกรรมด้านเซิร์ฟเวอร์ของระบบแชทเก่า ๆ รวมถึง:
- ChatService : โซลูชันเดี่ยวที่จัดการโมดูลแชทอื่น ๆ ทั้งหมด
- ChatSpeaker : เอนทิตีที่อาจสร้างข้อความในช่องแชท; แต่ละ Player จะมี ChatSpeaker โดยอัตโนมัติและบอทสามารถแชทได้โดยการสร้าง ChatSpeakers
- ข้อความแชท : คอนเทนเนอร์สำหรับเนื้อหาที่ ChatSpeaker ส่งไปยัง ChatChannel; มีเมตาดาตาที่ใช้ในการรูปแบบข้อความหรือเพิ่มฟังก์ชันเสริมให้กับคําสั่ง
- ช่องแชท : ช่องที่ ChatSpeakers สามารถแลกเปลี่ยนข้อความแชทได้; ใช้สำหรับการแชททีมและการแชทกระซิบเช่นกัน
บริการแชท
ChatService เป็นวัตถุโดดเดี่ยวที่จัดการพฤติกรรมด้านเซิร์ฟเวอร์ของระบบแชท Lua เช่น ChatChannels และ ChatSpeakers
ทั้งหมด ModuleScript ภายในโฟลเดอร์ ChatModules ควรจะส่งคืนฟังก์ชันและฟังก์ชันนั้นจะถูกเรียกด้วยโซลเดียนของ ChatService
วิธีการ
เพิ่มช่องทาง
- คําอธิบาย: สร้างวัตถุ ChatChannel ด้วยชื่อที่กำหนดและส่งคืนมัน
- การ返回: ช่องแชท
ลบช่อง
- คําอธิบาย: ลบช่องที่มีชื่อที่กำหนดไว้
- การคืน: วองเปล่า
รับช่องทาง
- คําอธิบาย: ส่งคืนช่องที่มีชื่อที่กำหนด หรือ nil หากไม่มีอยู่
- การ返回: ช่องแชท
เพิ่มลำโพง
- คําอธิบาย: สร้างและเพิ่มลำโพงในการแชทด้วยชื่อที่กำหนดแล้วจากนั้นจะส่งคืนมัน
- การ返回:: ChatSpeaker
ลบลำโพง
- คําอธิบาย: ลบลำโพงออกจากการแชทด้วยชื่อที่กำหนด
- การคืน: วองเปล่า
รับลำโพง
- คําอธิบาย: ส่งผู้พูดที่มีชื่อที่กำหนด หรือ nil หากไม่มี
- การ返回:: ChatSpeaker
รับรายการช่องทางได้
- พารามิเตอร์: ไม่มี
- คําอธิบาย: ส่งคืนรายการชื่อของช่องทั้งหมดที่ไม่ใช่ส่วนตัวในการแชท
- การคืน: รายการ < string >
รับรายการช่องเข้าร่วมอัตโนมัติ
- พารามิเตอร์: ไม่มี
- คําอธิบาย: ส่งคืนรายการชื่อของช่องทั้งหมดในการแชทที่ตั้งค่า AutoJoin เป็นจริง
- การคืน: รายการ < string >
ลงทะเบียนฟังก์ชันข้อความกรอง
- คําอธิบาย: ลงทะเบียนฟังก์ชันตัวกรองในการแชทที่ระบุโดย functionId .การเปลี่ยนแปลงใดๆ ในข้อความจะยังคงอยู่และแสดงเมื่อข้อความผ่านฟังก์ชันการกรองอื่นๆ ทั้งหมดฟังก์ชันนี้ส่งชื่อของลำโพง วัตถุข้อความ และช่องที่ข้อความเริ่มต้นมา
- การคืน: วองเปล่า
- ตัวอย่าง:
-- ใส่ตัวอย่างนี้ลงใน ModuleScript ภายในโฟลเดอร์ ChatModules
-- ตัวอย่างนี้กรองคำหลักและหากสําเร็จจะตั้งค่า chatColor ของข้อความ
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
-- ลบ (ตัวกรอง) คําหลักออกจากข้อความและตั้งค่า 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
ฟังก์ชันข้อความกรองลงทะเบียนไม่ได้
- คําอธิบาย: ไม่ลงทะเบียนฟังก์ชันตัวกรอง (ลงทะเบียนโดย RegisterFilterMessageFunction) โดยให้รหัสระบุของมัน functionId
- การคืน: วองเปล่า
ลงทะเบียนโปรเซสคําสั่งฟังก์ชัน
- คําอธิบาย: ลงทะเบียนฟังก์ชันคําสั่งของกระบวนการไปยังแชทที่ระบุโดย functionId .ก่อนที่จะมีการกรองข้อความ มันจะผ่าน func (และฟังก์ชันอื่นๆ ที่ลงทะเบียนโดยสิ่งนี้)ฟังก์ชัน func ควรตรวจสอบว่าข้อความเรียกใช้คำสั่งหรือไม่หากเป็นเช่นนั้น ทำการดำเนินการของคำสั่งและส่งคืนความจริงการกลับคืนค่าจริงบ่งชี้ว่าข้อความเป็นคำสั่งจริงและไม่ควรแสดงออกฟังก์ชันสามารถยกเลิกการลงทะเบียนได้โดยใช้ UnregisterProcessCommandsFunction
- การคืน: วองเปล่า
- ตัวอย่าง:
-- ใส่ตัวอย่างนี้ลงใน ModuleScript ภายในโฟลเดอร์ ChatModules
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
ฟังก์ชันคําสั่งลบลงทะเบียนไม่ได้
- คําอธิบาย: ไม่ลงทะเบียนตัวประมวลผลคําสั่ง (ลงทะเบียนโดย ลงทะเบียนโปรเซสคําสั่งฟังก์ชัน ) โดยใช้ตัวระบุ, functionId .
- การคืน: วองเปล่า
อีเวนต์
เพิ่มช่อง
- คําอธิบาย: ไฟเมื่อช่องถูกเพิ่มลงในแชท
ลบช่องแล้ว
- คําอธิบาย: ไฟเมื่อช่องถูกลบออกจากการแชท
เพิ่มลำโพง
- คําอธิบาย: จะเกิดไฟไหม้เมื่อมีการเพิ่มลำโพงในการแชท
ลำโพงถูกลบ
- คําอธิบาย: เกิดไฟไหม้เมื่อลำโพงถูกลบออกจากการแชท
แชทสปีกเกอร์
A ChatSpeaker คือการแสดงของหนึ่งเอนทิตีที่อาจพูดใน ChatChannelแต่ละ Player เชื่อมต่อกับเกมโดยอัตโนมัติมี ChatSpeaker ที่เกี่ยวข้องสปีกเชอร์เพิ่มเติมอาจถูกสร้างขึ้นสำหรับผู้ใช้ที่ไม่ใช่ (เช่นผู้ประกาศหรือข้อความเคล็ดลับ) โดยใช้ ChatService:AddSpeaker()
คุณสมบัติ
ชื่อ
- คําอธิบาย: ชื่อของผู้พูดที่ใช้ในการอ้างอิงถึงผู้พูดรายนี้ในขณะที่เรียกฟังก์ชันอื่น ๆ จํานวนมาก
วิธีการ
เข้าร่วมช่อง
- คําอธิบาย: เพิ่มลำโพงในช่องด้วย channelName ที่กำหนด
- การคืน: วองเปล่า
ปล่อยช่องทาง
- คําอธิบาย: ลบลำโพงออกจากช่องด้วย channelName ที่กำหนด
- การคืน: วองเปล่า
รับรายการช่องทางได้
- พารามิเตอร์: ไม่มี
- คําอธิบาย: ส่งคืนรายการชื่อของช่องทั้งหมดที่ผู้พูดอยู่
- การคืน: รายการ < string >
อยู่ในช่องทาง IsInChannel
- คําอธิบาย: ส่งคืนว่าผู้พูดอยู่ในช่องด้วย channelName ที่กำหนดหรือไม่
- การคืน: bool
พูดข้อความ
- การ返回: ข้อความแชท
ส่งข้อความ
- พารามิเตอร์: : , : , : , :
- คําอธิบาย: ส่งข้อความไปยัง ChatSpeaker ด้วยชื่อที่กำหนด fromSpeakerหากไม่มีลำโพงดังกล่าวอยู่ในช่อง วิธีนี้จะสร้างคําเตือนและลำโพงจะไม่เห็นข้อความ
- การคืน: วองเปล่า
ส่งข้อความระบบ
- คําอธิบาย: ส่งข้อความระบบไปยัง ChatChannel ด้วย channelName ที่กำหนดหากลำโพงไม่อยู่ในช่อง ข้อความนี้จะสร้างคําเตือนและลำโพงอื่นๆ ในช่องจะไม่เห็นข้อความ
- การคืน: วองเปล่า
รับผู้เล่น
- พารามิเตอร์: ไม่มี
- คําอธิบาย: ส่งคืนวัตถุ Player ที่เกี่ยวข้องกับลำโพงหากลำโพงไม่ใช่สำหรับผู้ใช้ (บอท) แล้วสิ่งนี้จะคืน nil
- การคืน: Player หรือ nil
ตั้งค่าข้อมูลเพิ่มเติม
- คําอธิบาย: ตั้งข้อมูลเพิ่มเติมบางอย่างสําหรับผู้พูดภายใต้ key เฉพาะเมื่อใดก็ตามที่ผู้พูดส่ง ข้อความแชท ข้อมูลเพิ่มเติมนี้จะถูกแนบไปกับข้อความถ้าไม่มีให้โดยเฉพาะกับข้อความตัวอย่างเช่น ตั้งค่า
- การคืน: วองเปล่า
รับข้อมูลเพิ่มเติม
- คำอธิบาย: ส่งคืนข้อมูลเพิ่มเติมที่เกี่ยวข้องกับ key ที่กำหนด โดยใช้ SetExtraData
- การคืน: ตัวแปร
ตั้งช่องหลัก
- คําอธิบาย: ตั้งค่าลำโพงให้พูดในช่องที่ให้ไว้ ยิง MainChannelSet
- การคืน: nil
อีเวนต์
กล่าวว่าข้อความ
รับข้อความแล้ว
ได้รับข้อความระบบ
เข้าร่วมช่องแล้ว
ช่องซ้าย
ปิดเสียง
- คําอธิบาย: ยิงเมื่อผู้พูดถูกปิดเสียงบน ChatChannel ด้วย channelName ที่กําหนดให้เป็นระยะเวลาที่กําหนด (ถ้ามี)อาจมีหรือไม่มี reason ที่ให้ไว้
ปิดการปิดเสียง
ข้อมูลเพิ่มเติมอัปเดต
- คําอธิบาย: ยิงเมื่อค่าเริ่มต้นของคีย์ในข้อมูลเสริมของลำโพงได้รับการอัปเดตโดยใช้ SetExtraData
ชุดช่องหลัก
ข้อความแชท
A ข้อความแชท เป็นโครงสร้างข้อมูลที่แทนที่ข้อความที่ส่งจาก ChatSpeakerมันมีข้อมูลเกี่ยวกับข้อความรวมถึงความยาวของข้อความว่าข้อความถูกกรองโดย Roblox หรือไม่และข้อมูลเพิ่มเติมเกี่ยวกับรูปลักษณ์ของข้อความ
คุณสมบัติ
ID
- ประเภท: int
- คําอธิบาย: ตัวระบุทางเลขที่ไม่ซ้ํากันสําหรับข้อความ
จากลำโพง
- ประเภท: string :
- คําอธิบาย: ชื่อของ ChatSpeaker ที่ส่งข้อความ
ช่องเดิม
- ประเภท: string :
- คําอธิบาย: ชื่อของ ChatChannel ซึ่งเป็นที่มาของข้อความ
กรองแล้ว
- ประเภท: bool
- คำอธิบาย: อธิบายว่าข้อความถูกกรองโดย Roblox (ถ้าเป็นจริงข้อความจะเป็น nil )
ระยะเวลาข้อความ
- ประเภท: int
- คําอธิบาย: ความยาวของข้อความ คุณสามารถใช้สิ่งนี้เพื่อสร้างสตริงที่ไม่ซ้ํากันหากข้อความถูกกรอง
ข้อความ
- คําอธิบาย: ข้อความของข้อความ คุณสมบัตินี้จะเป็น nil หาก IsFiltered เป็นจริง
ประเภทข้อความ
- ประเภท: string :
- คําอธิบาย: ประเภทของข้อความ ประเภทเหล่านี้จะได้รับการอธิบายในโมดูล ChatConstants:
- ค่าที่เป็นไปได้: "Message" , "System" , "MeCommand" , "Welcome" , "SetCore" , "Whisper"
เวลา
ข้อมูลเสริม
- ประเภท: สารานุกรม< string , ตัวแปร>
ช่องแชท
ChatChannel เป็นวัตถุที่เก็บข้อมูลเกี่ยวกับช่องเดียวซึ่งเป็นวิธีที่ข้อความสามารถแลกเปลี่ยนได้ระหว่าง ChatSpeakersนอกจากนี้ยังมีคุณสมบัติสิทธิ์การเข้าถึงที่กำหนดความสามารถในการมองเห็นข้อความพร้อมกับว่าผู้ใช้สามารถเข้าร่วมหรือออกจากช่องได้ด้วยตนเอง (โดยใช้คำสั่ง /join หรือ /leave หรือไม่)
โดยค่าเริ่มต้นแต่ละผู้ใช้จะมี ChatSpeaker ที่จะถูกเพิ่มอัตโนมัติไปยังช่องแชท "ทั้งหมด" และ "ระบบ" (แม้ว่า "ระบบ" จะอ่านได้เท่านั้น)หากผู้ใช้อยู่บน Player.Team พวกเขาจะมีสิทธิ์เข้าถึงช่องสำหรับทีมนั้นเท่านั้น
คุณสมบัติ
ชื่อ
- ประเภท: string
- คําอธิบาย: ชื่อช่องที่ใช้เพื่ออ้างอิงถึงช่องในฟังก์ชันอื่น
ข้อความต้อนรับ
- ประเภท: string
- คําอธิบาย: ข้อความที่จะแสดงเมื่อผู้ใช้เข้าร่วมช่อง
เข้าร่วมได้
- ประเภท: bool
- คําอธิบาย: กําหนดว่าผู้ใช้สามารถเข้าร่วมช่องได้ด้วยตนเองโดยใช้คําสั่ง /joinผู้ใช้ยังสามารถเพิ่มไปยังช่องโดยใช้ ChatSpeaker:JoinChannel() หรือวิธีอื่นแม้ว่าคุณสมบัตินี้จะเป็นเท็จก็ตาม
สามารถเอาออกได้
- ประเภท: bool
- คําอธิบาย: กำหนดว่าผู้ใช้สามารถออกจากช่องได้ด้วยตนเองโดยใช้คําสั่ง /leaveผู้ใช้ยังคงสามารถถูกลบออกจากช่องโดยใช้ ChatSpeaker:LeaveChannel() หรือวิธีการอื่นแม้ว่าคุณสมบัตินี้จะเป็นเท็จก็ตาม
เข้าร่วมอัตโนมัติ
- ประเภท: 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 : ชื่อช่องที่ข้อความเริ่มต้นมาการเปลี่ยนแปลงของข้อความจะยังคงอยู่และจะแสดงหลังจากการกรอง
- การคืน: วองเปล่า
- ตัวอย่าง:
-- ใส่ตัวอย่างนี้ลงใน ModuleScript ภายในโฟลเดอร์ ChatModules
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
- การคืน: วองเปล่า
- ตัวอย่าง:
-- ใส่ตัวอย่างนี้ลงใน ModuleScript ภายในโฟลเดอร์ ChatModules
-- ตัวอย่างนี้กรองคำหลักและหากสําเร็จจะตั้งค่า chatColor ของข้อความ
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
-- ลบ (ตัวกรอง) คําหลักออกจากข้อความและตั้งค่า ChatColor
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
ฟังก์ชันคําสั่งลบลงทะเบียนไม่ได้
- คําอธิบาย: ยกเลิกการลงทะเบียนตัวประมวลผลคําสั่ง (ลงทะเบียนโดย RegisterProcessCommandsFunction) โดยใช้ตัวระบุ, functionId 。
- การคืน: วองเปล่า
อีเวนต์
โพสต์ข้อความ
- คําอธิบาย: ไฟเมื่อข้อความถูกโพสต์ในช่อง
สปีกเกอร์เข้าร่วม
- คําอธิบาย: ไฟเมื่อ ChatSpeaker เข้าร่วมช่อง
ลำโพงซ้าย
- คําอธิบาย: ไฟเมื่อ ChatSpeaker ออกจากช่อง
ลำโพงถูกปิดเสียง
- คําอธิบาย: จะเกิดไฟไหม้เมื่อ ChatSpeaker ถูกปิดกั้นในช่อง
ลำโพงปิดเสียง
- คําอธิบาย: ไฟไหม้เมื่อ ChatSpeaker ถูกปิดการใช้งาน