Appliqué à diverses sources et entrées, filtrage du texte empêche les utilisateurs de voir un langage inapproprié et des informations personnellement identifiables telles que les numéros de téléphone.Roblox filtre automatiquement les sorties de texte communes telles que les messages qui ont traversé le chat de texte en expérience, mais vous êtes responsable du filtrage de tout texte affiché dont vous n'avez pas de contrôle explicite .
Filtrer les scénarios
Le texte peut être collecté et/ou affiché aux utilisateurs dans une variété de scénarios, y compris :
Une expérience qui réunit l'entrée du texte des utilisateurs à travers TextBox entrées, une GUI personnalisée avec des boutons tels qu'une interface clavier/clavier 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 Web externe et un tiers peut modifier les informations.
Une expérience qui stocke du texte comme les noms d'animaux 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() les filtres dans le texte de l'expérience prennent 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 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 TextBox , l'exemple suivant récupère l'entrée sur l'événement FocusLost et l'envoie au serveur via un RemoteEvent .Sur le serveur, il est d'abord filtré par FilterStringAsync() et ensuite GetNonChatStringForBroadcastAsync() avec l'intention que le texte sera 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
-- Événement distant pour envoyer une entrée de texte au serveur pour filtrage
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Traiteur d'événement pour le focus perdu et l'entrée appuyée
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)
Filtrage de l'entrée de texte - Script du serveur
local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Événement distant 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("Error generating TextFilterResult:", errorMessage)
end
end
-- Tiré lorsque le client soumet une entrée dans la 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("FILTERED:", filteredText)
else
warn("Error filtering text!")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)