Chat controller Early Access
Key RequiredUniversal

Chat controller Early Access

Universal ScriptNoooooo_986Noooooo_986 2.7K views 142 executesUpdated Apr 2, 2026
1.0/ 5(5 votes)
1420% Positive
Lua Script•122 lines (5262 chars)
local Players = game:GetService("Players")
local CoreGui = game:GetService("CoreGui")
local TextChatService = game:GetService("TextChatService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local lp = Players.LocalPlayer

-- CLEANUP PREVIOUS SCRIPT
if CoreGui:FindFirstChild("DeltaSculpt") then CoreGui.DeltaSculpt:Destroy() end

local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "DeltaSculpt"
ScreenGui.Parent = (gethui and gethui()) or CoreGui
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling

-- [MAIN CONTROL FRAME]
local MainFrame = Instance.new("Frame", ScreenGui)
MainFrame.Size = UDim2.new(0, 250, 0, 180)
MainFrame.Position = UDim2.new(0.5, -260, 0.5, -90)
MainFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
MainFrame.Active = true; MainFrame.Draggable = true
Instance.new("UICorner", MainFrame).CornerRadius = UDim.new(0, 15)

-- [CUSTOMIZER FRAME]
local CustomFrame = Instance.new("Frame", ScreenGui)
CustomFrame.Size = UDim2.new(0, 250, 0, 180)
CustomFrame.Position = UDim2.new(0.5, 10, 0.5, -90)
CustomFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
CustomFrame.Active = true; CustomFrame.Draggable = true
Instance.new("UICorner", CustomFrame).CornerRadius = UDim.new(0, 15)

-- [TITLE & TOGGLES]
local Title = Instance.new("TextLabel", MainFrame)
Title.Size = UDim2.new(1, 0, 0, 30); Title.Text = "MAIN CONTROLS"; Title.TextColor3 = Color3.new(1,1,1); Title.BackgroundTransparency = 1

local autoChatEnabled = true
local ToggleBtn = Instance.new("TextButton", MainFrame)
ToggleBtn.Size = UDim2.new(0.9, 0, 0, 35); ToggleBtn.Position = UDim2.new(0.05, 0, 0.25, 0)
ToggleBtn.Text = "AUTO-CHAT: ON"; ToggleBtn.BackgroundColor3 = Color3.fromRGB(0, 150, 0); ToggleBtn.TextColor3 = Color3.new(1,1,1)
Instance.new("UICorner", ToggleBtn)

local chatDelay = 10
local SpeedInput = Instance.new("TextBox", MainFrame)
SpeedInput.Size = UDim2.new(0.9, 0, 0, 35); SpeedInput.Position = UDim2.new(0.05, 0, 0.5, 0)
SpeedInput.PlaceholderText = "Delay (Current: 10s)"; SpeedInput.Text = "10"; SpeedInput.BackgroundColor3 = Color3.fromRGB(30, 30, 30); SpeedInput.TextColor3 = Color3.new(1,1,1)
Instance.new("UICorner", SpeedInput)

-- [CUSTOM PHRASE CONTROLS]
local CTitle = Instance.new("TextLabel", CustomFrame)
CTitle.Size = UDim2.new(1, 0, 0, 30); CTitle.Text = "CHAT CUSTOMIZER"; CTitle.TextColor3 = Color3.new(1,1,1); CTitle.BackgroundTransparency = 1

local PhraseInput = Instance.new("TextBox", CustomFrame)
PhraseInput.Size = UDim2.new(0.9, 0, 0, 35); PhraseInput.Position = UDim2.new(0.05, 0, 0.2, 0)
PhraseInput.PlaceholderText = "Type new phrase..."; PhraseInput.BackgroundColor3 = Color3.fromRGB(40, 40, 40); PhraseInput.TextColor3 = Color3.new(1,1,1)
Instance.new("UICorner", PhraseInput)

local AddBtn = Instance.new("TextButton", CustomFrame)
AddBtn.Size = UDim2.new(0.42, 0, 0, 35); AddBtn.Position = UDim2.new(0.05, 0, 0.45, 0)
AddBtn.Text = "ADD TEXT"; AddBtn.BackgroundColor3 = Color3.fromRGB(0, 100, 200); AddBtn.TextColor3 = Color3.new(1,1,1)
Instance.new("UICorner", AddBtn)

local ClearBtn = Instance.new("TextButton", CustomFrame)
ClearBtn.Size = UDim2.new(0.42, 0, 0, 35); ClearBtn.Position = UDim2.new(0.53, 0, 0.45, 0)
ClearBtn.Text = "DELETE ALL"; ClearBtn.BackgroundColor3 = Color3.fromRGB(150, 0, 0); ClearBtn.TextColor3 = Color3.new(1,1,1)
Instance.new("UICorner", ClearBtn)

-- [LOGIC & PHRASES]
local myPhrases = {"hi test test 🤖", "Delta Sculpting...", "made by noooooo_986"}

AddBtn.MouseButton1Click:Connect(function()
    if PhraseInput.Text ~= "" then
        table.insert(myPhrases, PhraseInput.Text)
        PhraseInput.Text = ""
        AddBtn.Text = "ADDED!"
        task.wait(1)
        AddBtn.Text = "ADD TEXT"
    end
end)

ClearBtn.MouseButton1Click:Connect(function()
    myPhrases = {}
    ClearBtn.Text = "CLEARED!"
    task.wait(1)
    ClearBtn.Text = "DELETE ALL"
end)

ToggleBtn.MouseButton1Click:Connect(function()
    autoChatEnabled = not autoChatEnabled
    ToggleBtn.Text = "AUTO-CHAT: " .. (autoChatEnabled and "ON" or "OFF")
    ToggleBtn.BackgroundColor3 = autoChatEnabled and Color3.fromRGB(0, 150, 0) or Color3.fromRGB(150, 0, 0)
end)

SpeedInput:GetPropertyChangedSignal("Text"):Connect(function()
    chatDelay = tonumber(SpeedInput.Text) or 10
end)

-- [CHAT LOOP]
local function sendMessage(msg)
    pcall(function()
        if TextChatService.ChatVersion == Enum.ChatVersion.TextChatService then
            local channel = TextChatService.TextChannels:FindFirstChild("RBXGeneral")
            if channel then channel:SendAsync(msg) end
        else
            local remote = ReplicatedStorage:FindFirstChild("SayMessageRequest", true)
            if remote then remote:FireServer(msg, "All") end
        end
    end)
end

task.spawn(function()
    while true do
        task.wait(chatDelay)
        if autoChatEnabled and #myPhrases > 0 then
            local playersList = Players:GetPlayers()
            local target = playersList[math.random(1, #playersList)]
            local chosen = myPhrases[math.random(1, #myPhrases)]
            
            -- Replaces {player} in your custom text with a random name if you want!
            local finalMsg = chosen:gsub("{player}", target.Name)
            sendMessage(finalMsg)
        end
    end
end)

Features & Information

You can control the speed and add your own text ( not chat bypass )

Community Comments (3)

Noooooo_986Noooooo_986Apr 15, 2026

Please do not dislike my first time scripting :(

Noooooo_986Noooooo_986Apr 17, 2026

@SaiIsMe ok

NOOB_IITNOOB_IITAug 28, 2026

Why paid

More Scripts for Universal Scripts