تُطبق على مصادر ومدخلات متنوعة، تصفية النصوص تمنع المستخدمين من رؤية اللغة غير اللائقة والمعلومات الشخصية القابلة للتعرف عليها مثل أرقام الهواتف. تقوم روبلوكس بتصفية المخرجات النصية الشائعة تلقائيًا، مثل الرسائل التي مرت عبر الدردشة النصية داخل التجربة، لكن أنت مسؤول عن تصفية أي نص معروض لا تتحكم به بشكل صريح.
سيناريوهات التصفية
يمكن جمع وعرض النصوص للمستخدمين في مجموعة متنوعة من السيناريوهات، بما في ذلك:
تجربة تجمع مدخلات النصوص من المستخدمين عبر إدخالات TextBox، واجهة مستخدم مخصصة مع أزرار مثل واجهات لوحة المفاتيح/الأرقام، أو نموذج لوحة مفاتيح تفاعلي في الفضاء ثلاثي الأبعاد.
تجربة تولد كلمات من أحرف عشوائية وتعرضها للمستخدمين، حيث يوجد احتمال أن تؤدي إلى إنشاء كلمات غير لائقة.
تجربة تتصل بخادم ويب خارجي لجلب محتوى يتم عرضه داخل التجربة. غالبًا لن يكون لديك السيطرة على محتوى الموقع الخارجي ويمكن لطرف ثالث تعديل المعلومات.
تجربة تخزن نصوصًا مثل أسماء حيوانات أليفة للمستخدمين باستخدام مخازن البيانات، حيث قد تتضمن النصوص المخزنة كلمات غير لائقة يجب تصفيتها عند استرجاعها.
عملية التصفية
TextService:FilterStringAsync() يقوم بتصفية النص الداخلي للتجارب من خلال أخذ سلسلة نصية وUserId للمستخدم الذي أنشأ النص كمدخلات. يُرجع كائن TextFilterResult الذي يحتوي على طريقتين إضافيتين يمكنك استدعاؤهما في سيناريوهات مختلفة:
- TextFilterResult:GetNonChatStringForBroadcastAsync() لتصفية النصوص المرئية لجميع المستخدمين في تجربة، مثل التفاعل الذي يسمح للمستخدم بكتابة رسالة على لافتة مرئية لجميع المستخدمين في السيرفر.
- TextFilterResult:GetNonChatStringForUserAsync() لعرض نصوص مصفاة لمستخدم واحد محدد، استنادًا إلى العمر وتفاصيل أخرى.
في سياق مدخلات TextBox، المثال التالي يجمع المدخلات في حدث FocusLost ويرسلها إلى السيرفر عبر RemoteEvent. على السيرفر، يتم تصفيتها أولاً عبر FilterStringAsync() ثم GetNonChatStringForBroadcastAsync() مع النية أن يتم عرض النص لجميع المستخدمين على كائن جانب السيرفر مثل SurfaceGui في العالم ثلاثي الأبعاد.
تصفية مدخلات النص - سكربت العميل
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")
-- معالج الحدث لفقدان التركيز وضغط زر الإدخال
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)