ใช้กับแหล่งข้อมูลและข้อมูลนำเข้าต่างๆ, การกรองข้อความ จะป้องกันไม่ให้ผู้ใช้เห็นภาษาที่ไม่เหมาะสมและข้อมูลส่วนบุคคลที่สามารถระบุได้เช่นหมายเลขโทรศัพท์ Roblox จะกรองข้อความทั่วไปที่ส่งผ่าน การแชทในประสบการณ์ โดยอัตโนมัติ แต่ คุณมีหน้าที่รับผิดชอบในการกรองข้อความที่แสดงซึ่งคุณไม่สามารถควบคุมได้อย่างชัดเจน.
สถานการณ์การกรอง
ข้อความสามารถถูกเก็บรวบรวมและ/หรือแสดงต่อผู้ใช้ในสถานการณ์ที่หลากหลาย รวมถึง:
ประสบการณ์ที่รวบรวม ข้อมูลนำเข้าข้อความ ของผู้ใช้ผ่านการป้อน TextBox, GUI แบบกำหนดเองที่มีปุ่มเช่นอินเทอร์เฟซคีย์บอร์ด/แป้นกด, หรือโมเดลคีย์บอร์ดที่เชื่อมต่อใน 3D.
ประสบการณ์ที่สร้างคำจากตัวอักษรสุ่มและแสดงให้ผู้เห็น เนื่องจากอาจสร้างคำที่ไม่เหมาะสมได้.
ประสบการณ์ที่เชื่อมต่อกับเซิร์ฟเวอร์เว็บภายนอกเพื่อดึงเนื้อหาที่แสดงอยู่ในประสบการณ์. บ่อยครั้งที่คุณจะไม่มีการควบคุมเนื้อหาของเว็บไซต์ภายนอกและบุคคลที่สามสามารถแก้ไขข้อมูลได้.
ประสบการณ์ที่เก็บข้อความเช่นชื่อสัตว์เลี้ยงของผู้ใช้ด้วยการใช้ data stores, ซึ่งข้อความที่เก็บอาจรวมถึงคำที่ไม่เหมาะสมที่ควรทำการกรองเมื่อดึงข้อมูล.
กระบวนการกรอง
TextService:FilterStringAsync() จะกรองข้อความในประสบการณ์ด้วยการรับข้อความในรูปแบบสตริงและ UserId ของผู้ใช้ที่สร้างข้อความเป็นข้อมูลนำเข้า. คลาสจะคืนค่าออบเจ็กต์ TextFilterResult ที่มีสองวิธีเพิ่มเติมที่คุณสามารถเรียกใช้ในสถานการณ์ต่างๆ:
- TextFilterResult:GetNonChatStringForBroadcastAsync() สำหรับการกรองข้อความที่มองเห็นได้สำหรับผู้ใช้ทั้งหมดในประสบการณ์ เช่น สำหรับกล่องโต้ตอบที่ให้ผู้ใช้เขียนข้อความบนป้ายที่มองเห็นได้สำหรับผู้ใช้ทุกคนในเซิร์ฟเวอร์.
- TextFilterResult:GetNonChatStringForUserAsync() เพื่อแสดงข้อความที่ถูกกรองสำหรับผู้ใช้เฉพาะคนหนึ่ง, ขึ้นอยู่กับอายุและรายละเอียดอื่นๆ.
ในบริบทของการป้อนข้อมูล TextBox, ตัวอย่างต่อไปนี้จะรวบรวมข้อมูลนำเข้าสำหรับเหตุการณ์ FocusLost และส่งไปยังเซิร์ฟเวอร์ผ่าน RemoteEvent. บนเซิร์ฟเวอร์, ข้อความจะถูกกรองก่อนผ่าน FilterStringAsync() และจากนั้น GetNonChatStringForBroadcastAsync() โดยมีเจตนาว่าข้อความจะแสดงสำหรับผู้ใช้ทั้งหมดในวัตถุฝั่งเซิร์ฟเวอร์เช่น SurfaceGui ในโลก 3D.
การกรองข้อความนำเข้า - สคริปต์ของไคลเอนต์
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- RemoteEvent เพื่อส่งข้อมูลนำเข้านข้อความไปยังเซิร์ฟเวอร์สำหรับการกรอง
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- ตัวจัดการเหตุการณ์สำหรับการสูญเสียโฟกัสและการกดปุ่ม Enter
local function onFocusLost(enterPressed, inputObject)
if enterPressed then
print("ส่งข้อมูล:", textBox.Text)
if inputRemoteEvent then
inputRemoteEvent:FireServer(textBox.Text)
end
end
end
textBox.FocusLost:Connect(onFocusLost)
การกรองข้อความนำเข้า - สคริปต์ของเซิร์ฟเวอร์
local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- RemoteEvent เพื่อรับข้อมูลนำเข้าข้อความจากไคลเอนต์สำหรับการกรอง
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
local function getFilterResult(text, fromUserId)
local filterResult
local success, errorMessage = pcall(function()
filterResult = TextService:FilterStringAsync(text, fromUserId)
end)
if success then
return filterResult
else
warn("เกิดข้อผิดพลาดในการสร้าง TextFilterResult:", errorMessage)
end
end
-- จะถูกเรียกใช้เมื่อไคลเอนต์ส่งข้อมูลจาก TextBox
local function onInputReceived(player, text)
if text ~= "" then
local filterResult = getFilterResult(text, player.UserId)
if filterResult then
local success, filteredText = pcall(function()
return filterResult:GetNonChatStringForBroadcastAsync()
end)
if success then
print("ข้อความที่ถูกกรอง:", filteredText)
else
warn("เกิดข้อผิดพลาดในการกรองข้อความ!")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)