Roblox เสนอการส่งข้อความแบบข้อความระหว่างผู้เล่นในเซสชั่นสดผ่าน TextChatServiceบริการนี้มีฟังก์ชันมาตรฐาน แต่ยังให้ชุดของวิธีการและเหตุการณ์สำหรับการขยายและปรับแต่งการแชท เช่น ส่งข้อความตามความต้องการที่กำหนดเอง กำหนดเอง เพิ่มสิทธิ์พิเศษหรือการกลั่นกรองให้กับผู้เล่นบางราย และสร้าง คำสั่งซื้อที่กำหนดเอง เพื่อดำเนินการการดำเนินการที่เฉพาะเจาะจง
ส่วนต่อไปนี้สรุปคลาสและตัวอย่างหลักที่คุณสามารถใช้เพื่อปรับแต่งระบบแชท
การกำหนดค่าระดับสูง
คลาสโซลเดี่ยว TextChatService มีความรับผิดชอบในการจัดการระบบแชทโดยรวมรวมถึงการจัดการการกรองข้อความแชทการควบคุมและสิทธิ์ผู้ใช้ใช้คุณสมบัติเช่น CreateDefaultTextChannels และ CreateDefaultCommands เพื่อเปิดใช้งานหรือปิดใช้งานช่องแชทและคําสั่งเริ่มต้น
การกำหนดค่า UI เริ่มต้น
TextChatService ให้ UI เริ่มต้นที่สามารถปรับแต่งได้เพื่อให้เหมาะกับความต้องการของประสบการณ์ของคุณแต่ละการกำหนดค่าเหล่านี้สามารถปิดใช้งานเพื่อซ่อนองค์ประกอบ UI ที่เกี่ยวข้องและสามารถแทนที่ด้วยอินเทอร์เฟซที่กําหนดเองได้หากต้องการ
- ChatWindowConfiguration — แทนที่ UI หน้าต่างแชทเริ่มต้นรวมถึงรูปลักษณ์และพฤติกรรม ปิดใช้งานเพื่อซ่อนหน้าต่างแชท
- ChatInputBarConfiguration — แทนที่อินเทอร์เฟซการใส่ข้อความแชทเริ่มต้นรวมถึงรูปลักษณ์และพฤติกรรม
- — แทนที่ UI บับเบิ้ลแชทเริ่มต้น รวมถึงรูปลักษณ์และพฤติกรรม
ช่อง ข้อความ และคำสั่ง
TextChannel — แทนที่ช่องแชทข้อความที่ส่งโดยผู้ใช้จากไคลเอนต์ไปยังเซิร์ฟเวอร์ซึ่งจะแสดงให้กับผู้ใช้รายอื่นตามสิทธิ์ตัวอย่างเหล่านี้ต้องถูกผูกกับ TextChatService เพื่อให้สามารถทำงานได้
TextSource — แทนที่ผู้ใช้ใน TextChannelตัวอย่างเหล่านี้จะถูกผูกโดยตรงกับ TextChannel เมื่อ AddUserAsync() ถูกเรียกแหล่งข้อความมีสิทธิ์รายละเอียดของผู้ใช้ในช่อง เช่น ความสามารถในการส่งข้อความผู้ใช้รายเดียวสามารถเชื่อมโยงกับหลายแหล่งข้อความหากพวกเขาถูกเพิ่มลงในช่องข้อความหลายช่อง
TextChatMessage — แทนที่ข้อความแชทเดียวในช่องข้อความด้วยข้อมูลพื้นฐานเช่นผู้ส่งข้อความข้อความเดิมข้อความที่กรองและเวลาที่สร้าง
TextChatCommand — อนุญาตให้ผู้ใช้เรียกการดำเนินการหรือพฤติกรรมเฉพาะโดยส่งข้อความที่ตรงกับ PrimaryAlias หรือ SecondaryAliasตัวอย่างเหล่านี้ต้องถูกผูกกับ TextChatService เพื่อให้สามารถทำงานได้
แผนภาพการสนทนา
การแชทข้อความใช้โมเดล ไคลเอนต์-เซิร์ฟเวอร์ โดยมี ส่งไคลเอนต์ , เซิร์ฟเวอร์ และ ไคลเอนต์รับ

ผู้เล่นส่งข้อความจากอุปกรณ์ท้องถิ่นของพวกเขา ทำให้เกิดการเรียกใช้วิธี TextChannel:SendAsync()วิธีนี้จะประมวลผลข้อความและตรวจสอบว่าเป็นคำสั่งแชทหรือข้อความแชทปกติ
หากข้อความเป็นคำสั่งแชท มันจะส่งเหตุการณ์ TextChatCommand.Triggered แอ็คชันไม่จำเป็นต้องทำขั้นตอนเพิ่มเติม
หากข้อความเป็นข้อความแชทปกติ จะส่งเหตุการณ์ TextChatService.SendingMessage เพื่อแสดงข้อความให้กับผู้ส่งบนไคลเอนต์ส่งในเวลาเดียวกัน TextChannel:SendAsync() ส่งข้อความไปยังเซิร์ฟเวอร์
เซิร์ฟเวอร์ยิง TextChannel.ShouldDeliverCallback เพื่อตรวจสอบว่าจะส่งข้อความไปยังผู้เล่นคนอื่นตามความต้องการด้านสิทธิ์และความต้องการการกรองชุมชน Roblox
หาก TextChannel.ShouldDeliverCallback ตรวจสอบว่าข้อความสามารถส่งไปยังผู้เล่นคนอื่นได้ เซิร์ฟเวอร์จะใช้ฟิลเตอร์ใดๆ และยิง TextChannel.OnIncomingMessage สองครั้ง:
ครั้งแรกคือบนไคลเอนต์ส่งและสัญญาณว่าเซิร์ฟเวอร์กําลังประมวลผลข้อความผ่านอีเวนต์ TextChatService.MessageReceivedอีเวนต์นี้แทนที่ข้อความท้องถิ่นบนไคลเอนต์ส่งกับข้อความที่ประมวลผลจากเซิร์ฟเวอร์ข้อความเป็นเช่นเดียวกันหากต้นฉบับไม่ต้องการการกรอง
ครั้งที่สองคือบนไคลเอนต์ที่รับซึ่งเปิดใช้งานการเหตุการณ์ TextChatService.MessageReceived เพื่อแสดงข้อความให้กับผู้เล่นคนอื่น
ตัวเชื่อมต่อแชทข้อความและการโทรกลับ
API TextChatService ส่งเสริมการแยกที่ชัดเจนในการปรากฏตัวและการส่งข้อความแชทหลายตัวอย่างของระบบแชทข้อความให้การเชื่อมต่อและการโทรกลับเพื่อรูปแบบในสถานที่กลางแจ้งและชัดเจน

| โทรกลับ | ค่าการ返回 | | ----------------------------------------- | ----------------------------------- | | | boolean | | | | | | | | | | | | | | |
ส่งข้อความขึ้นอยู่กับเงื่อนไข
การโทรกลับ TextChannel.ShouldDeliverCallback ควรจะกำหนดไว้เฉพาะในเซิร์ฟเวอร์เท่านั้นการเรียกคืนถูกเรียกสำหรับแต่ละเด็ก TextSource ของช่องข้อความเมื่อส่งข้อความเพื่อตรวจสอบว่าข้อความควรจะส่งหรือไม่คอลเลกชันนี้สามารถใช้เพื่อใช้โลจิสติกส่งข้อความที่กําหนดเองที่อาจขึ้นอยู่กับบริบทการเล่นเกมเพิ่มเติม เช่น:
- การแชทแบบใกล้เคียง ซึ่งผู้ใช้สามารถส่งข้อความไปยังผู้ที่อยู่ใกล้พวกเขาเท่านั้น
- ป้องกันผู้ใช้ที่มีลักษณะบางอย่างจากการส่งข้อความไปยังผู้อื่น
ปรับแต่งการแสดงข้อความ
UI เริ่มต้น TextChatService มีความพึ่งพาต่อ ข้อความที่มีรูปแบบ ในการรูปแบบและปรับแต่งวิธีที่ข้อความจะแสดงคุณสามารถใช้คำโทรกลับต่อไปนี้เพื่อรูปแบบข้อความก่อนที่จะแสดงให้กับผู้ใช้ เช่น เพื่อเพิ่มสีหรือแท็กการแชท ชื่อผู้ใช้ หรือรูปแบบเนื้อหาข้อความ
คำโทรกลับต่อไปนี้จะเรียกในทุก TextChatMessage ที่กำลังจะแสดงขึ้นซึ่งช่วยให้คุณปรับแต่งรูปลักษณ์ของหน้าต่างแชทตามเนื้อหา TextChannel หรือ TextSource หรือ TextChatMessageเมื่อไคลเอนต์ส่งข้อความ คอลเลกชันนี้จะถูกเรียกเมื่อข้อความถูกส่งไปยังเซิร์ฟเวอร์และค่า TextChatMessage.Status จะเป็น Enum.TextChatMessageStatus.Sendingเมื่อข้อความได้รับการส่งโดยเซิร์ฟเวอร์และถูกส่งไปยังผู้ใช้รายอื่นแล้ว ไคลเอนต์ส่งข้อความจะได้รับข้อความอีกครั้งด้วยค่า Enum.TextChatMessageStatus ที่อัปเดต
- TextChatService.OnIncomingMessage — คอลเลกชันนี้ควรจะกำหนดไว้เฉพาะในไคลเอนต์เท่านั้นการโทรกลับจะถูกเรียกเมื่อได้รับข้อความ ไม่ว่าจะมาจากเซิร์ฟเวอร์หรือหากไคลเอนต์ท้องถิ่นเพิ่งส่งข้อความการเรียกคืนจะเรียกในทุก TextChatMessage ที่ได้รับจากทุก TextChannel ตัวอย่างและเป็นครั้งแรกที่จะประมวลผลข้อความก่อนที่จะแสดงให้กับผู้ใช้
- TextChannel.OnIncomingMessage — คอลเลกชันนี้ควรจะกำหนดไว้เฉพาะในไคลเอนต์เท่านั้นการโทรกลับจะถูกเรียกเมื่อได้รับข้อความจากเซิร์ฟเวอร์การเรียกคืนจะเรียกทุกครั้งที่ TextChatMessage ได้รับจาก TextChannelตัวอย่างเริ่มต้น TextChannel ที่สร้างจาก TextChatService.CreateDefaultTextChannels มีการเรียกคืนนี้กำหนดไว้และสามารถเขียนทับได้
- TextChatService.OnBubbleAdded — คอลเลกชันนี้ควรจะกำหนดไว้เฉพาะในไคลเอนต์เท่านั้นใช้เพื่อปรับแต่งรูปลักษณ์ของฟองข้อความแชทอย่างอิสระจากรูปลักษณ์ของข้อความในหน้าต่างแชท UI
- TextChatService.OnChatWindowAdded — คอลเลกชันนี้ควรจะกำหนดไว้เฉพาะในไคลเอนต์เท่านั้นใช้เพื่อปรับแต่งรูปลักษณ์ของข้อความแชทในหน้าต่างแชทโดยไม่ขึ้นอยู่กับรูปลักษณ์ของข้อความในฟองแชท
ย้ายจากการแชทรุ่นเก่า
ส่วนนี้ช่วยคุณในการย้ายจากระบบแชทเก่าโดยให้วิธีทดแทนสําหรับการใช้งานและพฤติกรรมแชททั่วไปโดยใช้
ในหน้าต่าง สํารวจ เลือก TextChatService
ในหน้าต่าง คุณสมบัติ ค้นหาการเลื่อนลง ChatVersion และเลือก TextChatService
ฟังก์ชันพื้นฐาน
แม้ว่าทั้งสองระบบจะแบ่งปันฟังก์ชันการแชทพื้นฐานเดียวกัน แต่การใช้งาน TextChatService จะเป็นที่ยั่งยืนมากขึ้นและง่ายต่อการทำซ้ำ
การทำงาน | แชทมรดก | บริการ TextChatService | ข้อแตกต่าง |
---|---|---|---|
ส่งข้อความแชท | Players:Chat() | TextChannel:SendAsync() | วิธี SendAsync() สนับสนุนคุณสมบัติการแชทที่ทันสมัยมากขึ้น เช่น การจัดรูปแบบข้อความที่มีเนื้อหารวยและลําดับความสําคัญของข้อความนอกจากนี้ยังรวมถึงการกรองที่ติดตั้งไว้เพื่อช่วยป้องกันไม่ให้ข้อความที่ไม่เหมาะสมถูกส่ง |
ใช้การโทรกลับข้อความ | Chat:InvokeChatCallback()``Class.Chat:RegisterChatCallback() | Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessage | ระบบแชทมรดกผูกฟังก์ชันกับอีเวนต์ระบบแชทเพื่อส่งข้อความสองวิธีของ TextChatService เสนอความยืดหยุ่นและการปรับแต่งที่ดีกว่า |
เพิ่มคำสั่งแชทที่กําหนดเอง | ChatService/ChatCommand โมดูล | TextChatCommand | TextChatService มีคลาสที่กำหนดเองสำหรับคำสั่งข้อความมากกว่าการใช้โมดูลแชทรุ่นเก่า |
แสดงข้อความระบบ | StarterGui:SetCore() โดยใช้ ChatMakeSystemMessage | TextChannel:DisplaySystemMessage() | การโทรกลับ TextChannel.OnIncomingMessage สามารถส่งคืนตัวอย่าง TextChatMessageProperties เพื่อปรับแต่งรูปลักษณ์ของข้อความ |
ปิดการแชท | การตั้งค่าเกม ใน Studio และ ChatWindow/ChatSettings โมดูลสำหรับการซ่อนหน้าต่างแชท | ChatWindowConfiguration.Enabled |
การกรองข้อความ
TextChatService กรองข้อความแชทโดยอัตโนมัติตามข้อมูลบัญชีผู้เล่นแต่ละราย ดังนั้นคุณจึงไม่จำเป็นต้องดำเนินการกรองข้อความแชทด้วยตนเองสำหรับทุกประเภทของข้อความแชท
การทำงาน | แชทมรดก | บริการ TextChatService |
---|---|---|
กรองข้อความแชทสำหรับผู้เล่นแต่ละคน | Chat:FilterStringAsync() | อัตโนมัติ |
กรองข้อความการออกอากาศ | Chat:FilterStringForBroadcast() | อัตโนมัติ |
การแชทแบบหน้าต่างและฟองสบู่
ทั้ง หน้าต่างแชท และ การแชทฟองสบู่ พฤติกรรมและตัวเลือกการปรับแต่งของ TextChatService เป็นเช่นเดียวกับระบบแชทรุ่นเก่าเนื่องจากระบบแชทมรดกเพียงอนุญาตการปรับแต่งโดยใช้โมดูลแชทหรือคอนเทนเนอร์ Players ผู้ให้บริการจะให้บริการชั้นเรียนที่กำหนดเอง ( ChatWindowConfiguration และ BubbleChatConfiguration ) เพื่อจัดการคุณสมบัติทั้งหมดของหน้าต่างแชทและฟองบับแชทนอกจากนี้คุณสามารถปรับและดูตัวอย่างการปรากฏตัวและพฤติกรรมของฟองบับแชทได้อย่างง่ายดายโดยใช้การตั้งค่าของ Studio แทนที่จะต้องสคริปต์ทั้งหมด
การทำงาน | แชทมรดก | บริการ TextChatService |
---|---|---|
เปิดใช้งานหน้าต่างแชท | Class.Chat.LoadDefaultChat``Class.Players.ClassicChat | ChatWindowConfiguration.Enabled |
เปิดใช้งานการแชทฟองสบู่ | Class.Chat.BubbleChatEnabled``Class.Players.BubbleChat | BubbleChatConfiguration.Enabled |
ตั้งค่าคุณสมบัติของหน้าต่างแชท | Players:SetChatStyle() | ChatWindowConfiguration |
ตั้งค่าคุณสมบัติการแชทฟองสบู่ | Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat``Class.Players:SetChatStyle() | BubbleChatConfiguration |
เปิดใช้ฟองอากาศ NPC | Chat:Chat() | TextChatService:DisplayBubble() |
ย้ายผู้พูด "ข้อมูลเพิ่มเติม"
ระบบแชท Lua รุ่นเก่าอนุญาตให้นักพัฒนาใช้ SetExtraData ในคลาส Speakerข้อมูลนี้ถูกใช้เพื่อรูปแบบชื่อสี, สีแชท หรือใช้แท็กชื่อสำหรับผู้พูดที่กำหนด
ชุดข้อมูลเพิ่มเติมของระบบแชทมรดก SetExtraData
-- ตัวอย่างการตั้งค่าข้อมูลเพิ่มเติมบนลำโพงในระบบแชทมรดก
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 ไม่มีเทียบเท่าโดยตรงกับ SetExtraData .แทนที่ใช้ callbacks เช่น OnWindowAdded เพื่อปรับแต่งรูปลักษณ์ของข้อความโดยใช้ข้อความที่มีรูปแบบรวยตาม TextSource ของข้อความ
ต่อไปนี้เป็นตัวอย่างของการจำลอง "ข้อมูลเพิ่มเติม" ของแชท Lua รุ่นเก่าโดยการเข้าถึงคุณสมบัติบนวัตถุ Player :
บริการแชทข้อความตั้งค่าคุณสมบัติ
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)
จากนั้นคุณสามารถใช้การโทรกลับ 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