Toegepast op verschillende bronnen en invoer, voorkomt tekstfiltering dat gebruikers ongepaste taal en persoonlijk identificeerbare informatie zoals telefoonnummers zien. Roblox filtert automatisch veelvoorkomende tekstuitvoer zoals berichten die zijn doorgegeven via in-game tekstchat, maar jij bent verantwoordelijk voor het filteren van alle weergegeven tekst waar je geen expliciete controle over hebt.
Filterscenario's
Tekst kan in verschillende scenario's worden verzameld en/of weergegeven aan gebruikers, waaronder:
Een game die de tekstinvoer van gebruikers verzamelt via TextBox-invoeren, een aangepaste GUI met knoppen zoals een toetsenbord/toetsenpaneelinterface, of een interactief toetsenbordmodel in de 3D-ruimte.
Een game die woorden genereert uit willekeurige karakters en deze aan gebruikers toont, omdat er een kans is dat het ongepaste woorden creëert.
Een game die verbinding maakt met een externe webserver om inhoud op te halen die in de game wordt weergegeven. Vaak heb je geen controle over de inhoud van de externe site en kan een derde partij de informatie bewerken.
Een game die tekst opslaat, zoals de huisdiernamen van gebruikers, met behulp van gegevensopslag, waarbij de opgeslagen tekst ongepaste woorden kan bevatten die gefilterd moeten worden bij het ophalen ervan.
Filteringproces
TextService:FilterStringAsync() filtert in-game tekst door een tekststring en de UserId van de gebruiker die de tekst heeft gemaakt als invoer te nemen. Het retourneert een TextFilterResult-object dat twee extra methoden heeft die je in verschillende scenario's kunt aanroepen:
- TextFilterResult:GetNonChatStringForBroadcastAsync() voor het filteren van tekst die zichtbaar is voor alle gebruikers in een game, zoals voor een dialoog waarmee een gebruiker een bericht op een bord kan schrijven dat zichtbaar is voor alle gebruikers op de server.
- TextFilterResult:GetNonChatStringForUserAsync() om gefilterde tekst weer te geven voor één specifieke gebruiker, op basis van leeftijd en andere details.
In de context van TextBox-invoer verzamelt het volgende voorbeeld invoer op het FocusLost-evenement en verzendt het naar de server via een RemoteEvent. Op de server wordt het eerst gefilterd via FilterStringAsync() en vervolgens GetNonChatStringForBroadcastAsync() met de bedoeling dat de tekst wordt weergegeven aan alle gebruikers op een server-side object zoals een SurfaceGui in de 3D-wereld.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- RemoteEvent om tekstinvoer naar de server te verzenden voor filtering
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Evenement handler voor focus verloren en enter ingedrukt
local function onFocusLost(enterPressed, inputObject)
if enterPressed then
print("INGEDIEND:", 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 om tekstinvoer van de client te ontvangen voor filtering
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("Fout bij het genereren van TextFilterResult:", errorMessage)
end
end
-- Geactiveerd wanneer de client invoer indient vanuit de 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("GEFILTERD:", filteredText)
else
warn("Fout bij het filteren van tekst!")
end
end
end
end
inputRemoteEvent.OnServerEvent:Connect(onInputReceived)