--// Chat Spammer GUI (2025–2026 compatible) --// Use at your own risk — most games detect & punish this very quickly local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local UserInputService = game:GetService("UserInputService") local VirtualInputManager = game:GetService("VirtualInputManager") local VirtualUser = game:GetService("VirtualUser") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") -- GUI local sg = Instance.new("ScreenGui") sg.Name = "ChatSpammer" sg.ResetOnSpawn = false sg.Parent = playerGui local frame = Instance.new("Frame") frame.Size = UDim2.new(0, 340, 0, 360) frame.Position = UDim2.new(0.5, -170, 0.5, -180) frame.BackgroundColor3 = Color3.fromRGB(25, 25, 35) frame.BorderSizePixel = 0 frame.Parent = sg local uicorner = Instance.new("UICorner") uicorner.CornerRadius = UDim.new(0, 12) uicorner.Parent = frame -- Title local title = Instance.new("TextLabel") title.Size = UDim2.new(1, -50, 0, 45) title.BackgroundTransparency = 1 title.Text = "Chat Spammer" title.TextColor3 = Color3.fromRGB(255, 90, 90) title.Font = Enum.Font.GothamBold title.TextSize = 22 title.TextXAlignment = Enum.TextXAlignment.Left title.Position = UDim2.new(0, 12, 0, 0) title.Parent = frame -- Close button local closeBtn = Instance.new("TextButton") closeBtn.Size = UDim2.new(0, 34, 0, 34) closeBtn.Position = UDim2.new(1, -40, 0, 6) closeBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50) closeBtn.Text = "X" closeBtn.TextColor3 = Color3.new(1,1,1) closeBtn.Font = Enum.Font.GothamBold closeBtn.TextSize = 20 closeBtn.Parent = frame Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0, 8) closeBtn.MouseButton1Click:Connect(function() sg:Destroy() end) -- Message box local msgbox = Instance.new("TextBox") msgbox.Size = UDim2.new(0.92, 0, 0, 44) msgbox.Position = UDim2.new(0.04, 0, 0.14, 0) msgbox.BackgroundColor3 = Color3.fromRGB(40, 40, 52) msgbox.TextColor3 = Color3.new(1,1,1) msgbox.PlaceholderText = "Message (blank = random numbers)" msgbox.Text = "" msgbox.Font = Enum.Font.Gotham msgbox.TextSize = 17 msgbox.ClearTextOnFocus = false msgbox.Parent = frame Instance.new("UICorner", msgbox).CornerRadius = UDim.new(0, 8) -- Delay local delayLabel = Instance.new("TextLabel") delayLabel.Size = UDim2.new(0.92, 0, 0, 24) delayLabel.Position = UDim2.new(0.04, 0, 0.295, 0) delayLabel.BackgroundTransparency = 1 delayLabel.Text = "Delay: 1.8 s (min 0.8 – max 6)" delayLabel.TextColor3 = Color3.fromRGB(170, 170, 210) delayLabel.Font = Enum.Font.Gotham delayLabel.TextSize = 14 delayLabel.Parent = frame local delayBox = Instance.new("TextBox") delayBox.Size = UDim2.new(0.92, 0, 0, 36) delayBox.Position = UDim2.new(0.04, 0, 0.36, 0) delayBox.BackgroundColor3 = Color3.fromRGB(40, 40, 52) delayBox.TextColor3 = Color3.new(1,1,1) delayBox.Text = "1.8" delayBox.Font = Enum.Font.Gotham delayBox.TextSize = 17 delayBox.Parent = frame Instance.new("UICorner", delayBox).CornerRadius = UDim.new(0, 8) -- Toggle button local toggle = Instance.new("TextButton") toggle.Size = UDim2.new(0.92, 0, 0, 52) toggle.Position = UDim2.new(0.04, 0, 0.49, 0) toggle.BackgroundColor3 = Color3.fromRGB(55, 170, 55) toggle.Text = "OFF – Click to START" toggle.TextColor3 = Color3.new(1,1,1) toggle.Font = Enum.Font.GothamBold toggle.TextSize = 19 toggle.Parent = frame Instance.new("UICorner", toggle).CornerRadius = UDim.new(0, 10) -- Remotes display local remotesLabel = Instance.new("TextLabel") remotesLabel.Size = UDim2.new(0.92, 0, 0, 24) remotesLabel.Position = UDim2.new(0.04, 0, 0.67, 0) remotesLabel.BackgroundTransparency = 1 remotesLabel.Text = "Detected remotes: 0" remotesLabel.TextColor3 = Color3.fromRGB(140, 190, 255) remotesLabel.Font = Enum.Font.GothamSemibold remotesLabel.TextSize = 14 remotesLabel.TextXAlignment = Enum.TextXAlignment.Left remotesLabel.Parent = frame local remotesScroll = Instance.new("ScrollingFrame") remotesScroll.Size = UDim2.new(0.92, 0, 0, 78) remotesScroll.Position = UDim2.new(0.04, 0, 0.74, 0) remotesScroll.BackgroundColor3 = Color3.fromRGB(32, 32, 42) remotesScroll.BorderSizePixel = 0 remotesScroll.ScrollBarThickness = 5 remotesScroll.CanvasSize = UDim2.new(0,0,0,0) remotesScroll.Parent = frame Instance.new("UICorner", remotesScroll).CornerRadius = UDim.new(0, 8) local listLayout = Instance.new("UIListLayout") listLayout.SortOrder = Enum.SortOrder.LayoutOrder listLayout.Padding = UDim.new(0, 3) listLayout.Parent = remotesScroll -- Draggable local dragging, dragStart, startPos frame.InputBegan:Connect(function(input) if not (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) then return end dragging = true dragStart = input.Position startPos = frame.Position local conn; conn = input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false conn:Disconnect() end end) end) UserInputService.InputChanged:Connect(function(input) if not dragging then return end if not (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then return end local delta = input.Position - dragStart frame.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end) -- ──────────────────────────────────────────────── -- Logic -- ──────────────────────────────────────────────── local spamActive = false local chatRemotes = {} local legacySay = nil local zwsp = "\226\128\139" local function updateRemotesUI() for _, child in remotesScroll:GetChildren() do if child:IsA("GuiObject") and child ~= listLayout then child:Destroy() end end local count = 0 for _, remote in chatRemotes do count += 1 local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -8, 0, 22) lbl.BackgroundTransparency = 1 lbl.Text = remote:GetFullName() lbl.TextColor3 = Color3.fromRGB(210, 220, 255) lbl.Font = Enum.Font.Gotham lbl.TextSize = 13 lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.TextTruncate = Enum.TextTruncate.SplitWord lbl.Parent = remotesScroll end remotesScroll.CanvasSize = UDim2.new(0, 0, 0, count * 25) remotesLabel.Text = "Detected remotes: " .. #chatRemotes .. (legacySay and " + legacy" or "") end local function scanChatRemotes() chatRemotes = {} local patterns = {"chat","say","message","msg","talk","send","speak","textchat","chatremote","saymessage"} for _, obj in ReplicatedStorage:GetDescendants() do if obj:IsA("RemoteEvent") then local nameLower = obj.Name:lower() for _, pat in patterns do if nameLower:find(pat) then table.insert(chatRemotes, obj) break end end end end local legacyFolder = ReplicatedStorage:FindFirstChild("DefaultChatSystemChatEvents", true) legacySay = legacyFolder and legacyFolder:FindFirstChild("SayMessageRequest") updateRemotesUI() end scanChatRemotes() -- Better random message local function getMessage() if msgbox.Text ~= "" then local r = math.random(1,5) if r == 1 then return msgbox.Text .. zwsp end if r == 2 then return zwsp .. msgbox.Text end if r == 3 then return msgbox.Text .. " ‍" end return msgbox.Text end return "spam " .. math.random(10000,999999) end local function getDelayTime() local num = tonumber(delayBox.Text) return num and math.clamp(num, 0.8, 6) or 1.8 end -- Main spam loop task.spawn(function() while true do if spamActive then local msg = getMessage() local del = getDelayTime() -- Attempt legacy (most common old system) if legacySay then pcall(function() legacySay:FireServer(msg, "All") end) end -- Fire all found remotes (with different argument orders) for _, remote in chatRemotes do task.spawn(function() pcall(remote.FireServer, remote, msg, "All") task.wait(0.03) pcall(remote.FireServer, remote, "All", msg) task.wait(0.03) pcall(remote.FireServer, remote, msg) end) end -- Optional: try to simulate real chat bar (unreliable in many games now) --[[ pcall(function() local chatGui = playerGui:FindFirstChild("Chat") if chatGui then local textbox = chatGui:FindFirstChildWhichIsA("TextBox", true) if textbox then textbox.Text = msg VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.Return, false, game) task.wait(0.015) VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.Return, false, game) end end end) --]] end task.wait(getDelayTime()) end end) -- Toggle toggle.MouseButton1Click:Connect(function() spamActive = not spamActive if spamActive then toggle.Text = "STOP SPAMMING" toggle.BackgroundColor3 = Color3.fromRGB(210, 60, 60) else toggle.Text = "START SPAMMING" toggle.BackgroundColor3 = Color3.fromRGB(55, 170, 55) end end) -- Update delay label when user finishes editing delayBox.FocusLost:Connect(function(enterPressed) local d = getDelayTime() delayLabel.Text = string.format("Delay: %.1f s (min 0.8 – max 6)", d) end) -- Re-scan remotes every ~40 seconds task.spawn(function() while true do task.wait(40) scanChatRemotes() end end) -- Simple anti-AFK (mouse right-click simulation – less detectable than camera move) task.spawn(function() while true do pcall(function() VirtualUser:Button2Down(Vector2.new()) task.wait(0.08) VirtualUser:Button2Up(Vector2.new()) end) task.wait(55 + math.random(-4,4)) -- ~50–60 seconds end end) print("Chat spammer GUI loaded")