server script:
---- Services ----
local TextChatService = game:GetService("TextChatService")
local MessagingService = game:GetService("MessagingService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TextService = game:GetService("TextService")
local Players = game:GetService("Players")
---- Variables ----
local Messenger = ReplicatedStorage:WaitForChild("Messenger")
local topic = "GlobalChat"
Messenger.OnServerEvent:Connect(function(player, message)
print("messenger on server event ran")
local dataToBeSent = player.Name .. '\\' .. message
MessagingService:PublishAsync(topic, dataToBeSent)
end)
MessagingService:SubscribeAsync(topic, function(message)
print("subscribe async ran")
local fromPlayer, playerMessage = string.match(message.Data, "(.-)\\(.*)")
if not table.find(Players:GetPlayers(), Players:GetPlayerByUserId(Players:GetUserIdFromNameAsync(fromPlayer))) then
for _, player in Players:GetPlayers() do
local objectSuccess, object = pcall(function()
return TextService:FilterStringAsync(
playerMessage, -- the message
Players:GetUserIdFromNameAsync(fromPlayer),
Enum.TextFilterContext.PublicChat -- Context for filtering
)
end)
if not objectSuccess then return end
local filterSuccess, result = pcall(function()
return object:GetChatForUserAsync(player.UserId)
end)
if not filterSuccess then print(`filter success is fail: {filterSuccess}`) return end
Messenger:FireClient(player, fromPlayer, result)
end
end
end)```