Diterapkan pada berbagai sumber dan input, penyaringan teks mencegah pengguna dari melihat bahasa yang tidak pantas dan informasi yang dapat diidentifikasi secara pribadi seperti nomor telepon. Roblox secara otomatis menyaring keluaran teks umum seperti pesan yang telah melewati obrolan teks dalam pengalaman, tetapi anda bertanggung jawab untuk menyaring teks yang ditampilkan yang tidak Anda kontrol secara eksplisit.
Skenario Penyaringan
Teks dapat dikumpulkan dan/atau ditampilkan kepada pengguna dalam berbagai skenario, termasuk:
Sebuah pengalaman yang mengumpulkan input teks pengguna melalui entri TextBox, GUI kustom dengan tombol seperti antarmuka keyboard, atau model keyboard interaktif di ruang 3D.
Sebuah pengalaman yang menghasilkan kata-kata dari karakter acak dan menampilkannya kepada pengguna, karena ada kemungkinan akan menciptakan kata-kata yang tidak pantas.
Sebuah pengalaman yang terhubung ke server web eksternal untuk mengambil konten yang ditampilkan dalam pengalaman. Seringkali Anda tidak akan memiliki kontrol atas konten situs eksternal dan pihak ketiga dapat mengedit informasi tersebut.
Sebuah pengalaman yang menyimpan teks seperti nama hewan peliharaan pengguna menggunakan data stores, di mana teks yang disimpan mungkin termasuk kata-kata yang tidak pantas yang harus disaring saat diambil.
Proses Penyaringan
TextService:FilterStringAsync() menyaring teks dalam pengalaman dengan mengambil string teks dan UserId dari pengguna yang membuat teks sebagai input. Ini mengembalikan objek TextFilterResult yang memiliki dua metode tambahan yang dapat Anda panggil dalam skenario yang berbeda:
- TextFilterResult:GetNonChatStringForBroadcastAsync() untuk menyaring teks yang terlihat oleh semua pengguna dalam sebuah pengalaman, seperti untuk dialog yang memungkinkan pengguna menulis pesan pada papan yang terlihat oleh semua pengguna di server.
- TextFilterResult:GetNonChatStringForUserAsync() untuk menampilkan teks yang telah disaring untuk satu pengguna tertentu, berdasarkan usia dan rincian lainnya.
Dalam konteks input TextBox, contoh berikut mengumpulkan input pada kejadian FocusLost dan mengirimnya ke server melalui RemoteEvent. Di server, ini terlebih dahulu disaring melalui FilterStringAsync() dan kemudian GetNonChatStringForBroadcastAsync() dengan tujuan bahwa teks tersebut akan ditampilkan kepada semua pengguna pada objek sisi server seperti SurfaceGui di dunia 3D.
Menyaring Input Teks - Skrip Klien
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- RemoteEvent untuk mengirim input teks ke server untuk penyaringan
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Penangan acara untuk fokus hilang dan enter ditekan
local function onFocusLost(enterPressed, inputObject)
if enterPressed then
print("DIAJUKAN:", textBox.Text)
if inputRemoteEvent then
inputRemoteEvent:FireServer(textBox.Text)
end
end
end
textBox.FocusLost:Connect(onFocusLost)
Menyaring Input Teks - Skrip Server
local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- RemoteEvent untuk menerima input teks dari klien untuk penyaringan
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("Error generating TextFilterResult:", errorMessage)
end
end
-- Dipicu ketika klien mengirim input dari 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("TERFILTER:", filteredText)
else
warn("Error filtering text!")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)