Filtrowanie tekstu

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Zastosowane do różnych źródeł i wejść, filtrowanie tekstu zapobiega użytkownikom widzeniu nieodpowiedniego języka i osobowo identyfikowalnych informacji, takich jak numery telefonów.Roblox automatycznie filtruje zwykłe wyniki tekstowe, takie jak wiadomości, które przeszły przez czat tekstowy w doświadczeniu, ale jesteś odpowiedzialny za filtrowanie każdego wyświetlanego tekstu, nad którym nie masz żadnej kontroli wyraźnej .

Filtruj scenariusze

Tekst może być gromadzony i/lub wyświetlany użytkownikom w różnych scenariuszach, w tym:

  • Doświadczenie, które gromadzi wpisy użytkowników tekstowe poprzez TextBox, niestandardowe interfejsy GUI z przyciskami, takimi jak interfejs klawiatury/klawiatury lub interaktywny model klawiatury w przestrzeni 3D.

  • Doświadczenie, które generuje słowa z losowych znaków i wyświetla je użytkownikom, ponieważ istnieje szansa, że stworzy nieodpowiednie słowa.

  • Doświadczenie, które łączy się z zewnętrznym serwerem internetowym, aby pobrać treści wyświetlane w doświadczeniu.Często nie będziesz miał kontroli nad zawartością zewnętrznej strony i strona trzecia może edytować informacje.

  • Doświadczenie, które przechowuje tekst, tak jak nazwy zwierząt użytkowników za pomocą magazynów danych, gdzie przechowywany tekst może zawierać nieodpowiednie słowa, które powinny zostać przefiltrowane podczas ich odzyskiwania.

Proces filtrowania

TextService:FilterStringAsync() filtry w tekście doświadczenia, biorąc ciąg tekstu i UserId użytkownika, który stworzył tekst jako wejście.Zwraca obiekt TextFilterResult, który ma dwa dodatkowe metody, które możesz wezwać w różnych scenariuszach:

W kontekście wejścia TextBox wpisu następujący przykład gromadzi wejście na wydarzenie FocusLost i przesyła je na serwer za pośrednictwem RemoteEvent.Na serwerze jest najpierw filtrowany przez FilterStringAsync() i następnie GetNonChatStringForBroadcastAsync() z zamiarem, że tekst zostanie wyświetlony dla wszystkich użytkowników na obiekcie serwerowym, takim jak SurfaceGui w świecie 3D.

Filtrowanie wpisu tekstowego - skrypt klienta

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- Wydarzenie zdalne, aby wysłać tekstowe wpisanie na serwer do filtrowania
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- Menadżer zdarzeń dla utraconego skupienia i wciśnięcia klawisza
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)
Filtrowanie wpisu tekstowego - skrypt serwera

local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Wydarzenie zdalne do otrzymywania wpisu tekstowego od klienta do filtrowania
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
-- Wystrzelony, gdy klient przesyła wejście z 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)