ภาพรวมการแชทด้วยข้อความ

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

Roblox เสนอกระบวนการส่งข้อความระหว่างผู้เล่นในเซสชันสดผ่าน TextChatService ซึ่งเป็นคลาสเดียวที่รับผิดชอบในการจัดการระบบแชททั้งหมด รวมถึงการกรองข้อความแชท การควบคุม และสิทธิ์ของผู้ใช้ บริการนี้มีฟังก์ชันการทำงานมาตรฐานและยังมีชุดของวิธีการและเหตุการณ์สำหรับการขยายและปรับแต่งแชท เช่น การส่งข้อความตาม ข้อกำหนดที่กำหนดเอง การเพิ่มสิทธิ์พิเศษหรือการควบคุมให้กับผู้เล่นเฉพาะ และการสร้าง คำสั่งที่กำหนดเอง เพื่อดำเนินการตามการกระทำเฉพาะ

การกำหนดค่า UI

TextChatService มี UI เริ่มต้นที่สามารถปรับแต่งให้เหมาะกับความต้องการของเกมของคุณ ปิดการกำหนดค่าใด ๆ เหล่านี้เพื่อซ่อนองค์ประกอบ UI ที่เกี่ยวข้อง หากต้องการ คุณยังสามารถแทนที่องค์ประกอบ UI เหล่านี้ด้วยอินเทอร์เฟซที่กำหนดเอง:

สำหรับข้อมูลเพิ่มเติม โปรดดูที่ Chat window และ Bubble chat

ช่องข้อความ คำสั่ง และข้อความ

  • TextChannel — ช่องข้อความจะส่งข้อความที่ผู้ใช้ส่งจากไคลเอนต์ไปยังเซิร์ฟเวอร์ ซึ่งจะแสดงให้ผู้ใช้คนอื่นตามสิทธิ์ ช่องข้อความต้องถูกจัดให้อยู่ภายใต้ TextChatService เพื่อให้ทำงานได้

  • TextSource — ผู้ใช้ใน TextChannel แหล่งข้อความจะถูกจัดให้อยู่ภายใต้ TextChannel โดยตรงเมื่อเรียกใช้ AddUserAsync() แหล่งข้อความจะมีรายละเอียดสิทธิ์ของผู้ใช้ในช่อง เช่น ความสามารถในการส่งข้อความ หากผู้ใช้คนเดียวอยู่ในหลายช่องข้อความ พวกเขาจะเชื่อมโยงกับแหล่งข้อความหลายแห่ง

  • TextChatMessage — ข้อความในช่องข้อความ ข้อความแชทจะมีข้อมูลพื้นฐาน เช่น ผู้ส่งข้อความ ข้อความต้นฉบับ ข้อความที่กรอง และเวลาที่สร้าง

  • TextChatCommand — ช่วยให้ผู้ใช้สามารถเรียกใช้การกระทำหรือพฤติกรรมเฉพาะโดยการส่งข้อความที่ตรงกับคุณสมบัติ PrimaryAlias หรือ SecondaryAlias คำสั่งแชทต้องถูกจัดให้อยู่ภายใต้ TextChatService เพื่อให้ทำงานได้

แผนผังการไหลของแชท

การแชทด้วยข้อความใช้โมเดล client‑server โดยมี ไคลเอนต์ที่ส่งข้อความ เซิร์ฟเวอร์ และ ไคลเอนต์ที่รับข้อความ

แผนผังสำหรับการแชทด้วยข้อความในเกม
  1. ผู้เล่นส่งข้อความจากอุปกรณ์ท้องถิ่นของตน ซึ่งจะกระตุ้นให้เรียกใช้วิธี TextChannel:SendAsync() วิธีนี้จะประมวลผลข้อความและกำหนดว่ามันเป็นคำสั่งแชทหรือข้อความแชทปกติ

    • หากข้อความเป็นคำสั่งแชท จะมีการเรียกเหตุการณ์ TextChatCommand.Triggered เพื่อดำเนินการตามการกระทำที่กำหนด ไม่ต้องมีขั้นตอนเพิ่มเติม

    • หากข้อความเป็นข้อความแชทปกติ จะมีการเรียกเหตุการณ์ TextChatService.SendingMessage เพื่อแสดงข้อความให้กับผู้ส่งในไคลเอนต์ที่ส่งข้อความ ในขณะเดียวกัน TextChannel:SendAsync() จะส่งข้อความไปยังเซิร์ฟเวอร์

  2. เซิร์ฟเวอร์จะเรียก TextChannel.ShouldDeliverCallback เพื่อตัดสินใจว่าจะส่งข้อความไปยังผู้เล่นคนอื่นตามสิทธิ์และข้อกำหนดการกรองชุมชนของ Roblox หรือไม่

  3. หาก TextChannel.ShouldDeliverCallback ตัดสินใจว่าข้อความนั้นมีสิทธิ์ที่จะส่งไปยังผู้เล่นคนอื่น เซิร์ฟเวอร์จะใช้การกรองใด ๆ และเรียก TextChannel.OnIncomingMessage สองครั้ง:

    1. ครั้งแรกจะเกิดขึ้นในไคลเอนต์ที่ส่งข้อความและสัญญาณว่าเซิร์ฟเวอร์กำลังประมวลผลข้อความผ่านเหตุการณ์ TextChatService.MessageReceived เหตุการณ์นี้จะเปลี่ยนข้อความในท้องถิ่นในไคลเอนต์ที่ส่งข้อความด้วยข้อความที่ประมวลผลจากเซิร์ฟเวอร์ ข้อความจะเหมือนกันหากข้อความต้นฉบับไม่ต้องการการกรอง

    2. ครั้งที่สองจะเกิดขึ้นในไคลเอนต์ที่รับข้อความ ซึ่งจะกระตุ้นเหตุการณ์ TextChatService.MessageReceived เพื่อแสดงข้อความให้กับผู้เล่นคนอื่น

ฮุคและการเรียกกลับของการแชทด้วยข้อความ

API ของ TextChatService ส่งเสริมการแยกแยะที่ชัดเจนเกี่ยวกับลักษณะและการส่งข้อความแชท หลายอินสแตนซ์ของระบบแชทด้วยข้อความให้ฮุคและการเรียกกลับเพื่อจัดรูปแบบในสถานที่ที่ชัดเจนและรวมศูนย์

แผนผังลำดับการเรียกกลับของ TextChatService

การส่งข้อความตามเงื่อนไข

การเรียกกลับ TextChannel.ShouldDeliverCallback ควรกำหนดไว้เฉพาะในเซิร์ฟเวอร์ การเรียกกลับจะถูกเรียกสำหรับแต่ละ TextSource ลูกของช่องข้อความเมื่อมีการส่งข้อความเพื่อตัดสินใจว่าข้อความควรจะถูกส่งหรือไม่ การเรียกกลับนี้สามารถใช้เพื่อดำเนินการตรรกะการส่งข้อความที่กำหนดเองซึ่งอาจขึ้นอยู่กับบริบทการเล่นเกมเพิ่มเติม เช่น:

  • การแชทตามระยะทาง ซึ่งผู้ใช้สามารถส่งข้อความไปยังผู้ที่อยู่ใกล้เคียงเท่านั้น
  • ป้องกันไม่ให้ผู้ใช้ที่มีคุณสมบัติบางอย่างส่งข้อความไปยังผู้อื่น

ปรับแต่งการแสดงข้อความ

UI เริ่มต้นของ TextChatService ขึ้นอยู่กับ rich text เพื่อจัดรูปแบบและปรับแต่งวิธีการแสดงข้อความ คุณสามารถใช้การเรียกกลับต่อไปนี้เพื่อจัดรูปแบบข้อความก่อนที่จะถูกแสดงให้ผู้ใช้ เช่น การเพิ่มสีหรือ แท็กแชท ให้กับชื่อผู้ใช้หรือจัดรูปแบบเนื้อหาข้อความ

การเรียกกลับต่อไปนี้จะถูกเรียกในทุก 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 — การเรียกกลับนี้ควรกำหนดไว้เฉพาะในไคลเอนต์ ใช้เพื่อปรับแต่งลักษณะของข้อความแชทใน UI ของหน้าต่างแชทโดยไม่ขึ้นอยู่กับลักษณะของข้อความในฟองแชท

การย้ายจากแชทเก่า

ส่วนนี้ช่วยคุณในการย้ายจากระบบแชทเก่าโดยการให้วิธีการทางเลือกในการดำเนินการฟังก์ชันและพฤติกรรมแชททั่วไปโดยใช้ TextChatService

  1. ในหน้าต่าง Explorer ให้เลือก TextChatService

  2. ในหน้าต่าง Properties ให้ค้นหาตัวเลือกดรอปดาวน์ ChatVersion และเลือก TextChatService

ฟังก์ชันการทำงานพื้นฐาน

แม้ว่าทั้งสองระบบจะแบ่งปันฟังก์ชันการทำงานพื้นฐานเดียวกัน แต่การใช้งาน TextChatService โดยทั่วไปมีความยั่งยืนมากกว่าและง่ายต่อการพัฒนา

ฟังก์ชันการทำงานแชทเก่าTextChatServiceความแตกต่าง
ส่งข้อความแชทPlayers:Chat()TextChannel:SendAsync()วิธี SendAsync() รองรับฟีเจอร์แชทที่มีความก้าวหน้ามากขึ้น เช่น การจัดรูปแบบข้อความที่มีความซับซ้อนและลำดับความสำคัญของข้อความ นอกจากนี้ยังรวมถึงการกรองในตัวเพื่อช่วยป้องกันไม่ให้มีการส่งข้อความที่ไม่เหมาะสม
ดำเนินการเรียกกลับข้อความChat:InvokeChatCallback()
Chat:RegisterChatCallback()
TextChatService.SendingMessage
TextChatService.OnIncomingMessage
ระบบแชทเก่าผูกฟังก์ชันกับเหตุการณ์ของระบบแชทเพื่อส่งข้อความ ฟังก์ชันทั้งสองของ TextChatService เสนอความยืดหยุ่นและการปรับแต่งที่ดีกว่า
เพิ่มคำสั่งแชทที่กำหนดเองโมดูล ChatService/ChatCommandTextChatCommandTextChatService มีคลาสเฉพาะสำหรับคำสั่งข้อความแทนที่จะใช้โมดูลแชทเก่า
แสดงข้อความระบบStarterGui:SetCore() โดยใช้ ChatMakeSystemMessageTextChannel:DisplaySystemMessage()การเรียกกลับ TextChannel.OnIncomingMessage สามารถส่งคืนอินสแตนซ์ TextChatMessageProperties เพื่อปรับแต่งลักษณะของข้อความ
ปิดการแชทโมดูล ChatWindow/ChatSettings สำหรับซ่อนหน้าต่างแชทChatWindowConfiguration.Enabled

การกรองข้อความ

TextChatService จะกรองข้อความแชทโดยอัตโนมัติตามข้อมูลบัญชีของผู้เล่นแต่ละคน ดังนั้นคุณจึงไม่จำเป็นต้องดำเนินการกรองข้อความด้วยตนเองสำหรับข้อความแชททุกรูปแบบ

ฟังก์ชันการทำงานแชทเก่าTextChatService
กรองข้อความแชทสำหรับผู้เล่นแต่ละคนChat:FilterStringAsync()อัตโนมัติ
กรองข้อความที่ออกอากาศChat:FilterStringForBroadcast()อัตโนมัติ

หน้าต่างและแชทฟอง

ทั้งพฤติกรรมและตัวเลือกการปรับแต่งของ หน้าต่างแชท และ แชทฟอง ของ TextChatService เหมือนกับระบบแชทเก่า เนื่องจากระบบแชทเก่าอนุญาตให้ปรับแต่งได้เฉพาะโดยใช้โมดูลแชทหรือคอนเทนเนอร์ Players บริการนี้จึงมีคลาสเฉพาะ (ChatWindowConfiguration และ BubbleChatConfiguration) เพื่อจัดการคุณสมบัติของหน้าต่างแชทและแชทฟองทั้งหมด นอกจากนี้คุณยังสามารถปรับแต่งและดูตัวอย่างลักษณะและพฤติกรรมของแชทฟองได้อย่างง่ายดายโดยใช้การตั้งค่าใน Studio แทนที่จะต้องเขียนสคริปต์ทั้งหมด

ฟังก์ชันการทำงานแชทเก่าTextChatService
เปิดใช้งานหน้าต่างแชทChat.LoadDefaultChat
Players.ClassicChat
ChatWindowConfiguration.Enabled
เปิดใช้งานแชทฟองChat.BubbleChatEnabled
Players.BubbleChat
BubbleChatConfiguration.Enabled
ตั้งค่าคุณสมบัติของหน้าต่างแชทPlayers:SetChatStyle()ChatWindowConfiguration
ตั้งค่าคุณสมบัติของแชทฟองChat:SetBubbleChatSettings()
Chat.BubbleChatSettingsChanged()
Players.BubbleChat
Players:SetChatStyle()
BubbleChatConfiguration
เปิดใช้งานฟอง NPCChat:Chat()TextChatService:DisplayBubble()

ย้ายข้อมูล "เพิ่มเติม" ของผู้พูด

ระบบแชท Lua เก่าอนุญาตให้ผู้พัฒนาสามารถใช้ SetExtraData บนคลาส Speaker ข้อมูลนี้ถูกใช้เพื่อจัดรูปแบบสีชื่อ สีแชท หรือใช้แท็กชื่อสำหรับผู้พูดที่กำหนด

Legacy Chat System 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 โดยตรง แทนที่จะใช้ การเรียกกลับ เช่น OnWindowAdded เพื่อปรับแต่งลักษณะของข้อความโดยใช้ rich text ตาม TextSource ของข้อความ

ต่อไปนี้เป็นตัวอย่างการเลียนแบบ "ข้อมูลเพิ่มเติม" ของแชท Lua เก่าด้วยการเข้าถึงคุณสมบัติในวัตถุ Player:

TextChatService 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)

จากนั้นคุณสามารถใช้การเรียกกลับ OnChatWindowAdded เพื่อปรับแต่งลักษณะของหน้าต่างแชทตามคุณสมบัติที่ตั้งค่าไว้ในผู้เล่น:

TextChatService 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
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ