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

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

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

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

การกำหนดค่าระดับสูง

คลาสโซลเดี่ยว TextChatService มีความรับผิดชอบในการจัดการระบบแชทโดยรวมรวมถึงการจัดการการกรองข้อความแชทการควบคุมและสิทธิ์ผู้ใช้ใช้คุณสมบัติเช่น CreateDefaultTextChannels และ CreateDefaultCommands เพื่อเปิดใช้งานหรือปิดใช้งานช่องแชทและคําสั่งเริ่มต้น

การกำหนดค่า UI เริ่มต้น

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

  • ChatWindowConfiguration — แทนที่ UI หน้าต่างแชทเริ่มต้นรวมถึงรูปลักษณ์และพฤติกรรม ปิดใช้งานเพื่อซ่อนหน้าต่างแชท
  • ChatInputBarConfiguration — แทนที่อินเทอร์เฟซการใส่ข้อความแชทเริ่มต้นรวมถึงรูปลักษณ์และพฤติกรรม
  • — แทนที่ UI บับเบิ้ลแชทเริ่มต้น รวมถึงรูปลักษณ์และพฤติกรรม

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

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

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

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

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

แผนภาพการสนทนา

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

A flowchart for in-experience text chat.
  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 ส่งเสริมการแยกที่ชัดเจนในการปรากฏตัวและการส่งข้อความแชทหลายตัวอย่างของระบบแชทข้อความให้การเชื่อมต่อและการโทรกลับเพื่อรูปแบบในสถานที่กลางแจ้งและชัดเจน

A flowchart of the TextChatService callbacks order

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

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

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

  1. ในหน้าต่าง สํารวจ เลือก TextChatService

  2. ในหน้าต่าง คุณสมบัติ ค้นหาการเลื่อนลง ChatVersion และเลือก TextChatService

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

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

การทำงานแชทมรดกบริการ TextChatServiceข้อแตกต่าง
ส่งข้อความแชทPlayers:Chat()TextChannel:SendAsync()วิธี SendAsync() สนับสนุนคุณสมบัติการแชทที่ทันสมัยมากขึ้น เช่น การจัดรูปแบบข้อความที่มีเนื้อหารวยและลําดับความสําคัญของข้อความนอกจากนี้ยังรวมถึงการกรองที่ติดตั้งไว้เพื่อช่วยป้องกันไม่ให้ข้อความที่ไม่เหมาะสมถูกส่ง
ใช้การโทรกลับข้อความChat:InvokeChatCallback()``Class.Chat:RegisterChatCallback()Class.TextChatService.SendingMessage``Class.TextChatService.OnIncomingMessageระบบแชทมรดกผูกฟังก์ชันกับอีเวนต์ระบบแชทเพื่อส่งข้อความสองวิธีของ TextChatService เสนอความยืดหยุ่นและการปรับแต่งที่ดีกว่า
เพิ่มคำสั่งแชทที่กําหนดเองChatService/ChatCommand โมดูลTextChatCommandTextChatService มีคลาสที่กำหนดเองสำหรับคำสั่งข้อความมากกว่าการใช้โมดูลแชทรุ่นเก่า
แสดงข้อความระบบStarterGui:SetCore() โดยใช้ ChatMakeSystemMessageTextChannel: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.ClassicChatChatWindowConfiguration.Enabled
เปิดใช้งานการแชทฟองสบู่Class.Chat.BubbleChatEnabled``Class.Players.BubbleChatBubbleChatConfiguration.Enabled
ตั้งค่าคุณสมบัติของหน้าต่างแชทPlayers:SetChatStyle()ChatWindowConfiguration
ตั้งค่าคุณสมบัติการแชทฟองสบู่Chat:SetBubbleChatSettings()``Class.Chat.BubbleChatSettingsChanged()``Class.Players.BubbleChat``Class.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 .แทนที่ใช้ 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