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

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

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

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

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

สำหรับข้อมูลเพิ่มเติม โปรดดูที่ หน้าต่างแชท และ แชทบอลลูน

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

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

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

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

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

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

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

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

การเรียกกลับต่อไปนี้จะถูกเรียกใช้ในทุก 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() สนับสนุนฟีเจอร์แชทขั้นสูงมากขึ้น เช่น การจัดรูปแบบข้อความที่มีสีและลำดับชั้นของข้อความ นอกจากนี้ยังรวมถึงการกรองที่มาพร้อมกับการช่วยป้องกันไม่ให้มีข้อความที่ไม่เหมาะสมถูกส่งออก
Implement messaging callbacksChat:InvokeChatCallback()
Chat:RegisterChatCallback()
TextChatService.SendingMessage
TextChatService.OnIncomingMessage
ระบบแชทยุคเก่าผูกฟังก์ชันกับเหตุการณ์ระบบแชทเพื่อส่งข้อความ การใช้งานด้านต่าง ๆ ของ TextChatService มีความยืดหยุ่นและปรับแต่งได้ดีกว่า
เพิ่มคำสั่งแชทที่กำหนดเองโมดูล ChatService/ChatCommandTextChatCommandTextChatService มีคลาสต dedicated สำหรับคำสั่งข้อความแทนที่จะใช้โมดูลแชทยุคเก่า
แสดงข้อความระบบStarterGui:SetCore() โดยใช้ ChatMakeSystemMessageTextChannel:DisplaySystemMessage()การเรียกกลับ TextChannel.OnIncomingMessage สามารถส่งคืนอินสแตนซ์ของ TextChatMessageProperties เพื่อตกแต่งลักษณะของข้อความ
ปิดการแชทการตั้งค่าประสบการณ์ ใน Studio และโมดูล 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 ข้อมูลนี้ถูกใช้เพื่อตกแต่งสีของชื่อ สีข้อความแชท หรือกำหนดแท็กชื่อสำหรับผู้พูดที่กำหนด

ระบบแชทยุคเก่า 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 เพื่อปรับแต่งรูปลักษณ์ของข้อความโดยใช้ข้อความที่มีรูปแบบตาม TextSource ของข้อความ

ตัวอย่างด้านล่างแสดงการทำงานของ "ข้อมูลเสริม" ในแชทยุคเก่าโดยการเข้าถึงคุณสมบัติต่าง ๆ บนวัตถุ 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 เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ