This script allows the user to spy on chat messages in a Roblox game. It connects to the chat events to detect hidden messages. When a message is sent, the script will re-broadcast it publicly or privately depending on the script's configuration settings. It can toggle spying on/off with the "/spy" command and customize the look of private logs.
This script allows the user to spy on chat messages in a Roblox game. It connects to the chat events to detect hidden messages. When a message is sent, the script will re-broadcast it publicly or privately depending on the script's configuration settings. It can toggle spying on/off with the "/spy" command and customize the look of private logs.
This script allows the user to spy on chat messages in a Roblox game. It connects to the chat events to detect hidden messages. When a message is sent, the script will re-broadcast it publicly or privately depending on the script's configuration settings. It can toggle spying on/off with the "/spy" command and customize the look of private logs.
--This script reveals ALL hidden messages in the default chat
enabled = true --chat "/spy" to toggle!
spyOnMyself = true --if true will check your messages too public = false --if true will chat the logs publicly (fun, risky) publicItalics = true --if true will use /me to stand out privateProperties = { --customize private logs Color = Color3.fromRGB(0,255,255); Font = Enum.Font.SourceSansBold; TextSize = 18; }
local StarterGui = game:GetService("StarterGui")
local Players = game:GetService("Players") local player = Players.LocalPlayer or Players:GetPropertyChangedSignal("LocalPlayer"):Wait() or Players.LocalPlayer local saymsg = game:GetService("ReplicatedStorage"):WaitForChild("DefaultChatSystemChatEvents"):Wa itForChild("SayMessageRequest") local getmsg = game:GetService("ReplicatedStorage"):WaitForChild("DefaultChatSystemChatEvents"):Wa itForChild("OnMessageDoneFiltering") local instance = (_G.chatSpyInstance or 0) + 1 _G.chatSpyInstance = instance
local function onChatted(p,msg)
if _G.chatSpyInstance == instance then if p==player and msg:lower():sub(1,4)=="/spy" then enabled = not enabled wait(0.3) privateProperties.Text = "{SPY "..(enabled and "EN" or "DIS").."ABLED}" StarterGui:SetCore("ChatMakeSystemMessage",privateProperties) elseif enabled and (spyOnMyself==true or p~=player) then msg = msg:gsub("[\n\r]",''):gsub("\t",' '):gsub("[ ]+",' ') local hidden = true local conn = getmsg.OnClientEvent:Connect(function(packet,channel) if packet.SpeakerUserId==p.UserId and packet.Message==msg:sub(#msg- #packet.Message+1) and (channel=="All" or (channel=="Team" and public==false and Players[packet.FromSpeaker].Team==player.Team)) then hidden = false end end) wait(1) conn:Disconnect() if hidden and enabled then if public then saymsg:FireServer((publicItalics and "/me " or '').."{SPY} [".. p.Name .."]: "..msg,"All") else privateProperties.Text = "{SPY} [".. p.Name .."]: "..msg StarterGui:SetCore("ChatMakeSystemMessage",privateProperties) end end end end end
for _,p in ipairs(Players:GetPlayers()) do
p.Chatted:Connect(function(msg) onChatted(p,msg) end) end Players.PlayerAdded:Connect(function(p) p.Chatted:Connect(function(msg) onChatted(p,msg) end) end) privateProperties.Text = "{SPY "..(enabled and "EN" or "DIS").."ABLED}" StarterGui:SetCore("ChatMakeSystemMessage",privateProperties) if not player.PlayerGui:FindFirstChild("Chat") then wait(3) end local chatFrame = player.PlayerGui.Chat.Frame chatFrame.ChatChannelParentFrame.Visible = true chatFrame.ChatBarParentFrame.Position = chatFrame.ChatChannelParentFrame.Position+UDim2.new(UDim.new(),chatFrame.ChatChanne lParentFrame.Size.Y)