Angewendet auf verschiedene Quellen und Eingänge, Textfilterung verhindert, dass Benutzer unangemessene Sprache und persönlich identifizierbare Informationen wie Telefonnummern sehen.Roblox filtert automatisch häufige Textausgaben wie Nachrichten, die durch In-Experience-Textchat hindurchgegangen sind, aber du bist verantwortlich für die Filterung jedes angezeigten Textes, über den du keine explizite Kontrolle hast .
Filter-Szenarien
Text kann von Benutzern in einer Vielzahl von Szenarien gesammelt und/oder angezeigt werden, einschließlich:
Ein Erlebnis, das Wörter aus zufälligen Zeichen generiert und sie den Benutzern anzeigt, da es die Möglichkeit gibt, unangemessene Wörter zu erstellen.
Ein Erlebnis, das sich mit einem externen Webserver verbindet, um Inhalte abzurufen, die im Erlebnis angezeigt werden.Oft hast du keine Kontrolle über den Inhalt der externen Website und ein Dritter kann die Informationen bearbeiten.
Ein Erlebnis, das Text wie Haustiernamen von Benutzern speichert, indem es Datenspeicher verwendet, in denen der gespeicherte Text möglicherweise unangemessene Wörter enthalten kann, die beim Abrufen gefiltert werden müssen.
Filtern-Prozess
TextService:FilterStringAsync() Filter in-experience Text, indem sie eine Reihe von Text und die UserId des Benutzers, der den Text erstellt hat, als Eingabe verwenden.Es gibt ein TextFilterResult Objekt zurück, das zwei zusätzliche Methoden hat, die Sie in verschiedenen Szenarien aufrufen können:
- TextFilterResult:GetNonChatStringForBroadcastAsync() für das filtern von text, der für alle benutzer in einem erlebnis sichtbar ist, wie zum beispiel für einen dialog, der es einem benutzer ermöglicht, eine nachricht auf einem schild zu schreiben, das für alle benutzer auf dem server sichtbar ist.
- TextFilterResult:GetNonChatStringForUserAsync() um gefilterten text für einen bestimmten benutzer anzuzeigen, basierend auf alter und anderen details.
Im Kontext von TextBox, sammelt das folgende Beispiel Eingaben über das Ereignis FocusLost und sendet sie an den Server durch ein RemoteEvent.Auf dem Server wird er zuerst durch FilterStringAsync() gefiltert und dann durch GetNonChatStringForBroadcastAsync() mit der Absicht, dass der Text allen Benutzern auf einem Server-Objekt wie einem SurfaceGui in der 3D-Welt angezeigt wird.
Texteingabe filtern - Skript, das. PL: die Skripts
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- Remote-Ereignis, um Text输入 an den Server für die Filterung zu senden
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Ereignishändler für verlorenen Fokus und Eingabe drücken
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)
Texteingabe filtern - Server-Skript
local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Remote-Ereignis, um Text输入 vom Client für die Filterung zu erhalten
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
-- Feuert ab, wenn der Client Eingabe aus der TextBox einreicht
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)