So, I'm planning on using a custom chat Gui with the coreGui of Chat Disabled, Currently, I modified the Custom Chat Gui of UristMcSparks in the wiki http://wiki.roblox.com/index.php?title=Custom_chat_GUI by replacing the event of player.Chatted to a server event called SendMessage for filtering enabled. So i made a textbox that whenever you press /, it focuses and when you click enter and the focus is lost, it sends the message to the event. The code works, but whenever a player chats, the message appears x the amount of players, help? (NOTE FILTERING ENABLED IS ON) Server Script

local MAX_MESSAGES = 15
-- a dictionary between players and the list of messages they should see
-- note the use of weak tables (http://wiki.roblox.com/index.php?title=Weak_tables)
-- to save memory, so that message lists are kept only while the player is in game
local messageData = {}
 
-- function to store filtered message for each player and send update
function storeMessage(sender, message)
	-- loop through all players in the game
	for _, player in pairs(game.Players:GetPlayers()) do
		-- filter message
		local filteredMessage = sender .. ": " .. message
		-- get table containing past messages
		local playerMessages = messageData[player] 
		-- add new message to table
		table.insert(playerMessages, filteredMessage)
		-- check if table is full. If so, remove the oldest message
		if #playerMessages > MAX_MESSAGES then
			table.remove(playerMessages, 1)
		end
		-- send update to the player
 	game.ReplicatedStorage.SendMessages:FireClient(player, playerMessages) 
	end
end
 
-- bind function to when player joins the game
game.Players.PlayerAdded:connect(function(player)
	-- setup table to hold messages for the player
	local playerMessages = {}
	messageData[player] = playerMessages
	-- bind function to player chat
local event = game.ReplicatedStorage.SendMessage
event.OnServerEvent:connect(function(player, message)
		storeMessage(player.Name,  message)
	end)
end)

GUI Local Script

local chatFrame = script.Parent.ChatFrame
 game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Chat, false)
-- Bind function to update from server
game.ReplicatedStorage.SendMessages.OnClientEvent:connect(function(messages)
	-- Clear all of the current messages
	chatFrame:ClearAllChildren()	
	-- Create TextLabel for every message
	for i, message in pairs(messages) do
		local newLine = Instance.new("TextLabel", chatFrame)
		newLine.Text = message	
		newLine.Size = UDim2.new(1,0,0,18)
		newLine.Position = UDim2.new(0,0,0,18*(i-1))
		newLine.TextXAlignment = Enum.TextXAlignment.Left
		newLine.TextYAlignment = Enum.TextYAlignment.Center
		newLine.BackgroundTransparency = 1
		newLine.BorderSizePixel = 0
		newLine.FontSize = Enum.FontSize.Size18
		newLine.Font = Enum.Font.SourceSans
	end
end)
local Mouse = game.Players.LocalPlayer:GetMouse()
 local TextBox = script.Parent.TextBox
Mouse.KeyDown:connect(function(Key)
	if Key:lower() == "/" then
		TextBox:CaptureFocus()
	end
end)
TextBox.FocusLost:connect(function(enterPressed)
	if enterPressed then
		local Message = TextBox.Text
		local Event = game.ReplicatedStorage.SendMessage
		Event:FireServer(Message)
		Message = ""
		print(Message)
	end
end)