Applicato a varie fonti e input, il filtro di testo impedisce agli utenti di vedere linguaggio inappropriato e informazioni personali identificabili come numeri di telefono. Roblox filtra automaticamente le uscite di testo comuni come i messaggi che sono passati attraverso la chat di testo in gioco, ma sei responsabile del filtraggio di qualsiasi testo visualizzato su cui non hai controllo esplicito.
Scenari di filtraggio
Il testo può essere raccolto e/o visualizzato agli utenti in una varietà di scenari, tra cui:
Un gioco che raccoglie l'input di testo degli utenti tramite voci TextBox, un'interfaccia GUI personalizzata con pulsanti come un'interfaccia tastiera/tastierino, o un modello di tastiera interattivo nello spazio 3D.
Un gioco che genera parole da caratteri casuali e le visualizza agli utenti, poiché c'è la possibilità che crei parole inappropriate.
Un gioco che si connette a un server web esterno per recuperare contenuti visualizzati in gioco. Spesso non avrai controllo sul contenuto del sito esterno e una terza parte può modificare le informazioni.
Un gioco che memorizza testo come i nomi degli animali domestici degli utenti utilizzando data store, dove il testo memorizzato potrebbe includere parole inappropriate che dovrebbero essere filtrate durante il recupero.
Processo di filtraggio
TextService:FilterStringAsync() filtra il testo in gioco prendendo una stringa di testo e l'UserId dell'utente che ha creato il testo come input. Restituisce un oggetto TextFilterResult che ha due metodi aggiuntivi che puoi chiamare in diversi scenari:
- TextFilterResult:GetNonChatStringForBroadcastAsync() per filtrare il testo visibile a tutti gli utenti in un gioco, come per un dialogo che consente a un utente di scrivere un messaggio su un cartello visibile a tutti gli utenti sul server.
- TextFilterResult:GetNonChatStringForUserAsync() per visualizzare testo filtrato per un singolo utente specifico, in base all'età e ad altri dettagli.
Nel contesto dell'input TextBox, il seguente esempio raccoglie l'input all'evento FocusLost e lo invia al server tramite un RemoteEvent. Sul server, viene filtrato prima tramite FilterStringAsync() e poi GetNonChatStringForBroadcastAsync() con l'intenzione che il testo venga visualizzato a tutti gli utenti su un oggetto lato server come un SurfaceGui nel mondo 3D.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- RemoteEvent per inviare input di testo al server per il filtraggio
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Gestore eventi per la perdita di focus e l'invio
local function onFocusLost(enterPressed, inputObject)
if enterPressed then
print("INVIATO:", 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 per ricevere input di testo dal client per il filtraggio
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("Errore nella generazione di TextFilterResult:", errorMessage)
end
end
-- Attivato quando il client invia input dal 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("FILTRATO:", filteredText)
else
warn("Errore nel filtraggio del testo!")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)