Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Chat filter isn't working in custom chat, help please??

Asked by 6 years ago
Edited 6 years ago

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

0
I'd also like to learn how to put team coloring into the chat too, that'd also be greatly appreciated, thanks again! Unkn0wn_Species 20 — 6y

1 answer

Log in to vote
-1
Answered by
H1LD -2
6 years ago
Edited 6 years ago

FilterStringAsync doesn't work in studio. http://wiki.roblox.com/index.php?title=Custom_chat_GUI

-- FilterStringAsync does not work in Studio

0
I know that, I always publish the game and test it in a server because of those issues, some other things do that too. I always publish the game and test it. Unkn0wn_Species 20 — 6y
Ad

Answer this question