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 permainan, tetapi Anda bertanggung jawab untuk menyaring teks yang ditampilkan yang tidak Anda kendalikan secara eksplisit.
Skenario Penyaringan
Teks dapat dikumpulkan dan/atau ditampilkan kepada pengguna dalam berbagai skenario, termasuk:
Sebuah permainan yang mengumpulkan input teks pengguna melalui entri TextBox, GUI kustom dengan tombol seperti antarmuka keyboard/keypad, atau model keyboard interaktif di ruang 3D.
Sebuah permainan yang menghasilkan kata-kata dari karakter acak dan menampilkannya kepada pengguna, karena ada kemungkinan akan menciptakan kata-kata yang tidak pantas.
Sebuah permainan yang terhubung ke server web eksternal untuk mengambil konten yang ditampilkan dalam permainan. Seringkali Anda tidak akan memiliki kendali atas konten situs eksternal dan pihak ketiga dapat mengedit informasi tersebut.
Sebuah permainan 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 mengambilnya.
Proses Penyaringan
TextService:FilterStringAsync() menyaring teks dalam permainan 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 permainan, seperti untuk dialog yang memungkinkan pengguna menulis pesan pada tanda yang terlihat oleh semua pengguna di server.
- TextFilterResult:GetNonChatStringForUserAsync() untuk menampilkan teks yang telah disaring untuk satu pengguna tertentu, berdasarkan usia dan detail lainnya.
Dalam konteks input TextBox, contoh berikut mengumpulkan input pada peristiwa FocusLost dan mengirimkannya ke server melalui RemoteEvent. Di server, teks tersebut disaring terlebih dahulu melalui FilterStringAsync() dan kemudian GetNonChatStringForBroadcastAsync() dengan tujuan agar teks tersebut ditampilkan kepada semua pengguna pada objek sisi server seperti SurfaceGui di dunia 3D.
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)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("Kesalahan menghasilkan TextFilterResult:", errorMessage)
end
end
-- Ditembak saat 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("Kesalahan menyaring teks!")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)