Appliqué à diverses sources et entrées, filtrage de texte empêche les utilisateurs de voir des langues inappropriées et des informations personnalisées telles que des numéros de téléphone. Roblox filtre automatiquement les sorties de texte courantes telles que les messages qui ont passé à travers chat textuel , mais vous êtes responsable du filtrage de tout texte que vous n'avez pas de contrôle explicite sur .
Filtrer les scénarios
Le texte peut être recueilli et/ou affiché aux utilisateurs dans une variété de scénarios, y compris :
Une expérience qui génère des mots à partir de personnages aléatoires et les affiche aux utilisateurs, car il y a une chance qu'il crée des mots inappropriés.
Une expérience qui se connecte à un serveur web externe pour obtenir du contenu qui est affiché dans l'expérience. Habituellement, vous n'aurez pas le contrôle sur le contenu du site Web externe et un tiers peut modifier les informations.
Une expérience qui stocke le texte, comme les noms de compagnie des utilisateurs, en utilisant des magasins de données, où le texte stocké peut inclure des mots inappropriés qui devraient être filtrés lors de leur récupération.
Processus de filtrage
TextService:FilterStringAsync() les filtres dans le texte d'expérience en prenant une chaîne de texte et le UserId de l'utilisateur qui a créé le texte comme entrée. Il renvoie un objet TextFilterResult qui a deux méthodes supplémentaires que vous pouvez appeler dans différents scénarios :
- TextFilterResult:GetNonChatStringForBroadcastAsync() pour filtrer le texte visible pour tous les utilisateurs dans une expérience, comme pour un dialogue qui permet à un utilisateur d'écrire un message sur un panneau qui est visible pour tous les utilisateurs sur le serveur.
- TextFilterResult:GetNonChatStringForUserAsync() pour afficher le texte filtré pour un utilisateur spécifique, en fonction de l'âge et d'autres détails.
Dans le contexte de l'entrée de TextBox , le code suivant recueille l'entrée sur l'événement
Filtre d'entrée de texte - Script client
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- RemoteEvent pour envoyer l'entrée de texte sur le serveur pour le filtrage
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Détecteur d'événement pour le focus perdu et entrée en jeu
local function onFocusLost(enterPressed, inputObject)
if enterPressed then
print("SUBMITTED:", textBox.Text)
if inputRemoteEvent then
inputRemoteEvent:FireServer(textBox.Text)
end
end
end
textBox.FocusLost:Connect(onFocusLost)
Filtre d'entrée de texte - Server Script
local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Événement distant à recevoir l'entrée de texte du client pour le filtrage
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
-- Activé lorsque le client soumet l'entrée à partir de la boîte de texte
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("FILTERED:", filteredText)
else
warn("Error filtering text!")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)