I'm trying to make my own custom chat here is my source.
http://wiki.roblox.com/index.php?title=Custom_chat_GUI
My only problem is the chat filter isn't working, I thought it was in the script already as it has "FilterStringAsync" in it.
Script (Chat Manager)
-- ROBLOX Services local ChatService = game:GetService("Chat") -- Local variables local chatMessage = game.ReplicatedStorage.ChatMessage -- Function called when a player sends a chat message local function onChatReceived(sender, message) -- Loop through all of the players in the game (except for the player that sent the message) for _, player in pairs(game.Players:GetPlayers()) do if sender ~= player then local filteredMessage if game:GetService("RunService"):IsStudio() then -- FilterStringAsync does not work in Studio chatMessage:FireClient(player, sender, message) else local success, filteredMessage = pcall(function() return ChatService:FilterStringAsync(message, sender, player) end) if not success then filteredMessage = "<Failed to filter message>" end chatMessage:FireClient(player, sender, filteredMessage) end end end end
Local Script (ChatScript)
-- ROBLOX Services local ContextActionService = game:GetService("ContextActionService") -- Static variables local MAX_MESSAGES = 10 local MESSAGE_HEIGHT = 25 -- Local variables local player = game.Players.LocalPlayer local messages = {} local chatMessageEvent = game.ReplicatedStorage.ChatMessage -- Variables for GUI elements local chatScreen = script.Parent local chatFrame = chatScreen.ChatFrame local chatInput = chatFrame.ChatInput local messageFrame = chatFrame.MessageFrame -- Make a copy of the message that will be used later local messageTemplate = messageFrame.Message:Clone() messageFrame.Message:Destroy() local function addMessage(sender, message) -- Check if the number of messages has hit the maximum if #messages >= MAX_MESSAGES then -- If so remove the oldest message from the table table.remove(messages, #messages):Destroy() end -- Shift all of the messages up one slot for i = 1, #messages do local y = (MAX_MESSAGES - i - 1) * MESSAGE_HEIGHT messages[i].Position = UDim2.new(0, 0, 0, y) end -- Create new message GUI elements and add to the message table local newMessage = messageTemplate:Clone() newMessage.NameLabel.Text = sender.Name .. ": " newMessage.Content.Text = message newMessage.Parent = messageFrame newMessage.Position = UDim2.new(0, 0, 0, (MAX_MESSAGES - 1) * MESSAGE_HEIGHT) table.insert(messages, 1, newMessage) end -- Function when the input TextBox looses focus local function onFocusLost(enterPressed, inputObject) -- Check if TextBox lost focus because the user pressed "Enter" if enterPressed then -- Add the message to the GUI (no need to filter messages from the local player) addMessage(player, chatInput.Text) -- Send message to the server to get filtered and sent to other players chatMessageEvent:FireServer(chatInput.Text) -- Reset TextBox text chatInput.Text = "Enter text here" end end -- Function when the player presses the slash key local function onSlashPressed(actionName, inputState, inputObject) if inputState == Enum.UserInputState.End then -- If key up then capture focus in the TextBox so the user can start typing chatInput:CaptureFocus() end end -- Disable ROBLOX default chat game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Chat, false) -- Bind functions chatMessageEvent.OnClientEvent:connect(addMessage) chatInput.FocusLost:connect(onFocusLost) ContextActionService:BindAction("Chatting", onSlashPressed, false, Enum.KeyCode.Slash)
Help would be GREATLY appreciated!
Thanks for your time
-Species
(Here's a testing server for you to see for yourself)
https://www.roblox.com/games/793394320/Custom-Chat-Testing
FilterStringAsync doesn't work in studio. http://wiki.roblox.com/index.php?title=Custom_chat_GUI
-- FilterStringAsync does not work in Studio