Message filtering error - Message returning as "Instance"

So I am making a chat system in Roblox Studio, and I want it so that when the player clicks enter, a few functions are send to a server script where it filters the message, then returns and displays the message. The problem is that every time it filters, it comes back as a string, “Instance”, instead of the actual filtered message.


Code

Local script which fires the message to the server script

script.Parent.FocusLost:Connect(function(enterPressed)
	if enterPressed then
		local player = game.Players.LocalPlayer
		local message = game.Players.LocalPlayer.PlayerGui.Main.BackgroundFrame.ChatDMS.MessageBar.Message.Text
		game.ReplicatedStorage.SendMessageToServer:FireServer(player, message)
	end
end)

Server Script which filters the message

local TextService = game:GetService("TextService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local sendMessageToServer = ReplicatedStorage.SendMessageToServer

local function getTextObject(message, fromPlayerId)
	local textObject
	local success, errorMessage = pcall(function()
		textObject = TextService:FilterStringAsync(message, fromPlayerId)
	end)
	if success then
		return textObject
	elseif errorMessage then
		print("Error generating TextFilterResult:", errorMessage)
	end
	return false
end

local function getFilteredMessage(textObject)
	local filteredMessage
	local success, errorMessage = pcall(function()
		filteredMessage = textObject:GetNonChatStringForBroadcastAsync()
	end)
	if success then
		return filteredMessage
	elseif errorMessage then
		print("Error filtering message:", errorMessage)
	end
	return false
end

sendMessageToServer.OnServerEvent:Connect(function(player, message)
	local messageObject = getTextObject(message, player.UserId)
	local filteredText = ""
	filteredText = getFilteredMessage(messageObject)
	local text = filteredText
	print(text)

	-- ReplicatedStorage.SendFilteredText:FireClient(player, message)
end)

Local script which should display the message

local playerr = game.Players.LocalPlayer
local Players = game:GetService("Players")
local chatDMS = playerr.PlayerGui.Main.BackgroundFrame.ChatDMS

local function getPhoto(image)
	local userId = playerr.UserId
	local thumbType = Enum.ThumbnailType.HeadShot
	local thumbSize = Enum.ThumbnailSize.Size420x420
	local content, isReady = Players:GetUserThumbnailAsync(userId, thumbType, thumbSize)
	
	image.Image = content
end

game.ReplicatedStorage.SendFilteredText.OnClientEvent:Connect(function(player, message)
	local msg = chatDMS.MessageHandler.MessageTemplateFolder.MessageTemplate:Clone()
	msg.MessageSent.Text = message
	getPhoto(msg.Avatar)
	msg.Parent = chatDMS.MessageHandler
	msg.Visible = true
end)

Can anybody help?

You’re sending the client player to the server. When you fire a RemoteEvent/Function to the server, the player is automatically a parameter, because we need to know who fired the RemoteEvent/Function

So, I remove the player parameter? How can I declare the player variable in the server script?

It automatically declares the player variable as the first received parameter in the remote event.

1 Like