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 transité par le chat texte en expérience, mais vous êtes responsable de filtrer 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 :
Une expérience qui recueille les entrées de texte des utilisateurs à travers des entrées de TextBox, une interface GUI personnalisée avec des boutons tels qu'un clavier/interface de pavé numérique, ou un modèle de clavier interactif dans l'espace 3D.
Une expérience qui génère des mots à partir de caractères aléatoires et les affiche aux utilisateurs, car il y a une chance qu'elle crée des mots inappropriés.
Une expérience qui se connecte à un serveur web externe pour récupérer du contenu qui est affiché dans l'expérience. Souvent, vous n'aurez pas le contrôle sur le contenu du site externe et un tiers peut modifier l'information.
Une expérience qui stocke du texte tel que les noms d'animaux des utilisateurs en utilisant les 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 expérience en prenant une chaîne de texte et le UserId de l'utilisateur qui a créé le texte en entrée. Il retourne 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 par tous les utilisateurs dans une expérience, comme pour un dialogue qui permet à un utilisateur d'écrire un message sur un panneau visible par tous les utilisateurs sur le serveur.
- TextFilterResult:GetNonChatStringForUserAsync() pour afficher du texte filtré pour un utilisateur spécifique, basé sur l'âge et d'autres détails.
Dans le contexte de l'entrée TextBox, l'exemple suivant recueille l'entrée sur l'événement FocusLost et l'envoie au serveur par le biais d'un RemoteEvent. Sur le serveur, il est d'abord filtré par 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.
Filtrage de l'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 au serveur pour filtrage
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Gestionnaire d'événements pour perte de focus et pression de la touche 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)
Filtrage de l'entrée de texte - Script serveur
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 du 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 de filtrage du texte !")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)