다양한 소스 및 입력에 적용되는 텍스트 필터링은 사용자가 부적절한 언어와 개인 식별 정보를 보지 못하도록 합니다. 음성 채팅에서 메시지를 보내면 Roblox가 자동으로 표시하는 일반적인 텍스트 출력을 필터링하지만, 필터링
필터 시나리오
텍스트는 사용자에게 제공되며/또는 다양한 시나리오에 표시될 수 있습니다.
사용자의 텍스트 입력을 수집하는 경험은 Class.Toolbar 항목을 통해 TextBox 버튼이나 키보드/키패드 인터페이스와 같은 사용자 지정 도구를 사용하여 사용자의 텍스트 입력을 수집합니다. 또는 3D 공간의 인터랙티브 키보드 모델과 같은 버튼이 있는 사용자 지정 GUI.
사용자에게 표시되는 무작위 단어를 생성하는 경험이며, 부적절한 단어를 만들 수 있습니다.
외부 웹 서버에 연결하여 경험에 표시되는 콘텐츠를 가져오는 경험. 종종 경험 내 콘텐츠에 대한 제어가 없으며 제3자가 정보를 편집할 수 있습니다.
사용자의 애완 동물 이름과 같은 텍스트를 데이터 저장소를 사용하여 저장하는 경험, 저장된 텍스트에 부적절한 단어가 포함되어 검색할 때 필터링해야 하는 경우가 있습니다.
필터링 프로세스
TextService:FilterStringAsync() 텍스트 경험 텍스트에서 문자열 및 UserId 사용자가 텍스트를 입력한 문자열을 가져와 TextFilterResult 개체를 반환합니다. 이 개체는 두 가지 추가 메서드를 가진 텍스트 필터를 가진
- TextFilterResult:GetNonChatStringForBroadcastAsync() 사용자 경험의 모든 사용자에게 보이는 텍스트를 필터링하는 경우, 서버에 있는 모든 사용자에게 표시되는 표지판에 사용자가 메시지를 작성하도록 하는 대화 상자와 같은 경우.
- TextFilterResult:GetNonChatStringForUserAsync() 를 사용하여 특정 사용자에게 나이와 다른 세부 정보에 따라 필터링된 텍스트를 표시합니다.
Class.Toolbar 입력의 컨텍스트에서 다음 예시는 Class.Toolbar.FocusLost|FocusL
텍스트 입력 필터링 - 클라이언트 스크립트
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local textBox = script.Parent
textBox.ClearTextOnFocus = false
textBox.PlaceholderText = "..."
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.TextScaled = true
-- 텍스트 입력을 서버에 보내려면 원격 이벤트
local inputRemoteEvent = ReplicatedStorage:FindFirstChild("InputRemoteEvent")
-- 주의를 잃고 입력을 누르는 이벤트 처리기
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)
텍스트 입력 필터링 - 서버 스크립트
local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- 필터링을 위해 클라이언트에서 텍스트 입력 받는 원격 이벤트
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
-- 입력란에서 텍스트 입력 시 발생
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)