Appliqué à diverses sources et entrées, le filtrage de texte empêche les utilisateurs de voir un langage inapproprié et des informations personnellement identifiables telles que des numéros de téléphone. Roblox filtre automatiquement les sorties de texte courantes telles que les messages qui ont passé par le chat textuel en jeu, mais vous êtes responsable du filtrage de tout texte affiché sur lequel vous n'avez pas de contrôle explicite.
Scénarios de filtrage
Le texte peut être recueilli et/ou affiché aux utilisateurs dans une variété de scénarios, y compris :
Un jeu qui recueille les entrées de texte des utilisateurs via des entrées TextBox, une interface GUI personnalisée avec des boutons tels qu'une interface clavier/pavé numérique, ou un modèle de clavier interactif dans l'espace 3D.
Un jeu qui génère des mots à partir de caractères aléatoires et les affiche aux utilisateurs, car il y a une chance qu'il crée des mots inappropriés.
Un jeu qui se connecte à un serveur web externe pour récupérer du contenu qui est affiché dans le jeu. Souvent, vous n'aurez pas le contrôle sur le contenu du site externe et un tiers peut modifier les informations.
Un jeu qui stocke du texte tel que les noms d'animaux de compagnie des utilisateurs en utilisant des magasins de données, où le texte stocké pourrait inclure des mots inappropriés qui devraient être filtrés lors de leur récupération.
Processus de filtrage
TextService:FilterStringAsync() filtre le texte en jeu 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 à tous les utilisateurs dans un jeu, comme pour un dialogue qui permet à un utilisateur d'écrire un message sur un panneau visible à tous les utilisateurs sur le serveur.
- TextFilterResult:GetNonChatStringForUserAsync() pour afficher du texte filtré pour un utilisateur spécifique, en fonction de l'âge et d'autres détails.
Dans le contexte de l'entrée TextBox, l'exemple suivant recueille l'entrée lors de l'événement FocusLost et l'envoie au serveur via un RemoteEvent. Sur le serveur, il est d'abord filtré via FilterStringAsync() puis GetNonChatStringForBroadcastAsync() avec l'intention que le texte soit affiché à tous les utilisateurs sur un objet côté serveur tel qu'un SurfaceGui dans le monde 3D.
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 au serveur pour filtrage
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Gestionnaire d'événements pour la perte de focus et l'appui sur entrée
local function onFocusLost(enterPressed, inputObject)
if enterPressed then
print("SOUMIS :", 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 pour recevoir l'entrée de texte du client pour 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("Erreur lors de la génération de TextFilterResult :", errorMessage)
end
end
-- Déclenché lorsque le client soumet l'entrée du 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("FILTRÉ :", filteredText)
else
warn("Erreur lors du filtrage du texte !")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)