funky v4
Key RequiredUniversal

funky v4

Universal ScriptAnujhunyawrAnujhunyawr 571 views 428 executesUpdated Jan 7, 2026
Unrated
00
Lua Script•778 lines (27893 chars)
-- FUNKY V4 - ALL REQUESTS FIXED (Original behavior preserved for owner commands)
-- Added protection for "Anuj" (case-insensitive + leet speak)
-- All protected names now show "CANT USE THAT NAME"
-- !spam with protected names blocked for everyone (including owner/admins)

local Players = game:GetService("Players")
local TextChatService = game:GetService("TextChatService")
local UserInputService = game:GetService("UserInputService")
local VirtualInputManager = game:GetService("VirtualInputManager")

local player = Players.LocalPlayer
local OWNER_NAME = "ShinChanHKSFF"
local LIMITED_ADMINS = {"Captain_Anuj94", "Must2358”}

local playerGui = player:WaitForChild("PlayerGui")

-- Clean old GUIs
if playerGui:FindFirstChild("FUNKY V4") then playerGui["FUNKY V4"]:Destroy() end
if playerGui:FindFirstChild("FUNKY V3") then playerGui["FUNKY V3"]:Destroy() end
if playerGui:FindFirstChild("FUNKY V2") then playerGui["FUNKY V2"]:Destroy() end

local screenGui = Instance.new("ScreenGui")
screenGui.Name = "FUNKY V4"
screenGui.ResetOnSpawn = false
screenGui.DisplayOrder = 999
screenGui.Parent = playerGui

local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 320, 0, 180)
frame.Position = UDim2.new(0.5, -160, 0.5, -90)
frame.BackgroundColor3 = Color3.fromRGB(30, 30, 35)
frame.BorderSizePixel = 0
frame.Active = true
frame.Draggable = true
frame.Parent = screenGui

local frameCorner = Instance.new("UICorner")
frameCorner.CornerRadius = UDim.new(0, 12)
frameCorner.Parent = frame

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 35)
title.BackgroundTransparency = 1
title.Text = "FUNKY V4"
title.TextColor3 = Color3.fromRGB(0, 255, 255)
title.Font = Enum.Font.GothamBlack
title.TextSize = 24
title.Parent = frame

task.spawn(function()
    while task.wait(0.05) and title.Parent do
        title.TextColor3 = Color3.fromHSV(tick() % 5 / 5, 1, 1)
    end
end)

local textBox = Instance.new("TextBox")
textBox.Size = UDim2.new(0, 170, 0, 35)
textBox.Position = UDim2.new(0, 100, 0, 50)
textBox.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
textBox.PlaceholderText = "ENTER H8TER NAME"
textBox.Text = ""
textBox.TextColor3 = Color3.new(1, 1, 1)
textBox.Font = Enum.Font.GothamSemibold
textBox.TextSize = 17
textBox.ClearTextOnFocus = false
textBox.Parent = frame

local boxCorner = Instance.new("UICorner")
boxCorner.CornerRadius = UDim.new(0, 10)
boxCorner.Parent = textBox

local method1Btn = Instance.new("TextButton")
method1Btn.Size = UDim2.new(0, 85, 0, 30)
method1Btn.Position = UDim2.new(0, 10, 0, 50)
method1Btn.BackgroundColor3 = Color3.fromRGB(0, 200, 0)
method1Btn.Text = "-_-_-"
method1Btn.TextColor3 = Color3.new(1,1,1)
method1Btn.Font = Enum.Font.GothamBold
method1Btn.TextSize = 16
method1Btn.Parent = frame

local m1Corner = Instance.new("UICorner")
m1Corner.CornerRadius = UDim.new(0, 10)
m1Corner.Parent = method1Btn

local method2Btn = Instance.new("TextButton")
method2Btn.Size = UDim2.new(0, 85, 0, 30)
method2Btn.Position = UDim2.new(0, 10, 0, 85)
method2Btn.BackgroundColor3 = Color3.fromRGB(0, 140, 0)
method2Btn.Text = "____"
method2Btn.TextColor3 = Color3.new(1,1,1)
method2Btn.Font = Enum.Font.GothamBold
method2Btn.TextSize = 16
method2Btn.Parent = frame

local m2Corner = Instance.new("UICorner")
m2Corner.CornerRadius = UDim.new(0, 10)
m2Corner.Parent = method2Btn

local method3Btn = Instance.new("TextButton")
method3Btn.Size = UDim2.new(0, 85, 0, 30)
method3Btn.Position = UDim2.new(0, 10, 0, 120)
method3Btn.BackgroundColor3 = Color3.fromRGB(0, 140, 0)
method3Btn.Text = "####"
method3Btn.TextColor3 = Color3.new(1,1,1)
method3Btn.Font = Enum.Font.GothamBold
method3Btn.TextSize = 16
method3Btn.Parent = frame

local m3Corner = Instance.new("UICorner")
m3Corner.CornerRadius = UDim.new(0, 10)
m3Corner.Parent = method3Btn

local toggleBtn = Instance.new("TextButton")
toggleBtn.Size = UDim2.new(0, 100, 0, 40)
toggleBtn.Position = UDim2.new(1, -115, 1, -55)
toggleBtn.BackgroundColor3 = Color3.fromRGB(0, 180, 0)
toggleBtn.Text = "START"
toggleBtn.TextColor3 = Color3.new(1, 1, 1)
toggleBtn.Font = Enum.Font.GothamBold
toggleBtn.TextSize = 20
toggleBtn.Parent = frame

local toggleCorner = Instance.new("UICorner")
toggleCorner.CornerRadius = UDim.new(0, 10)
toggleCorner.Parent = toggleBtn

local delayBtn = Instance.new("TextButton")
delayBtn.Size = UDim2.new(0, 80, 0, 35)
delayBtn.Position = UDim2.new(1, -200, 1, -52)
delayBtn.BackgroundColor3 = Color3.fromRGB(180, 140, 0)
delayBtn.Text = "DELAY"
delayBtn.TextColor3 = Color3.new(1, 1, 1)
delayBtn.Font = Enum.Font.GothamBold
delayBtn.TextSize = 18
delayBtn.Parent = frame

local delayCorner = Instance.new("UICorner")
delayCorner.CornerRadius = UDim.new(0, 10)
delayCorner.Parent = delayBtn

local delayInput = Instance.new("TextBox")
delayInput.Size = UDim2.new(0, 70, 0, 30)
delayInput.Position = UDim2.new(1, -195, 1, -90)
delayInput.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
delayInput.PlaceholderText = "sec"
delayInput.Text = ""
delayInput.TextColor3 = Color3.new(1, 1, 1)
delayInput.Font = Enum.Font.GothamSemibold
delayInput.TextSize = 16
delayInput.Visible = false
delayInput.Parent = frame

local inputCorner = Instance.new("UICorner")
inputCorner.CornerRadius = UDim.new(0, 10)
inputCorner.Parent = delayInput

local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 30, 0, 30)
closeBtn.Position = UDim2.new(1, -40, 0, 8)
closeBtn.BackgroundTransparency = 1
closeBtn.Text = "X"
closeBtn.TextColor3 = Color3.fromRGB(255, 100, 100)
closeBtn.Font = Enum.Font.GothamBlack
closeBtn.TextSize = 28
closeBtn.TextStrokeTransparency = 0.5
closeBtn.TextStrokeColor3 = Color3.fromRGB(255, 0, 0)
closeBtn.Parent = frame

local warningLabel = Instance.new("TextLabel")
warningLabel.Size = UDim2.new(1, -20, 0, 40)
warningLabel.Position = UDim2.new(0, 10, 0.75, 0)
warningLabel.BackgroundTransparency = 1
warningLabel.Text = ""
warningLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
warningLabel.Font = Enum.Font.GothamBold
warningLabel.TextSize = 16
warningLabel.TextWrapped = true
warningLabel.Visible = false
warningLabel.Parent = frame

local function showWarning(text)
    warningLabel.Text = text or "CANT USE THAT NAME"
    warningLabel.Visible = true
    task.delay(4, function() warningLabel.Visible = false end)
end

local function normalizeLeet(str)
    str = string.lower(str)
    str = str:gsub("1", "i"):gsub("!", "i"):gsub("3", "e"):gsub("4", "a"):gsub("0", "o"):gsub("5", "s"):gsub("7", "t"):gsub("@", "a"):gsub("$", "s")
    str = str:gsub("[^a-z]", "")
    return str
end

local function isForbiddenName(name)
    if not name or name == "" then return false end
    local normalized = normalizeLeet(name)
    return normalized:find("FUNKY") or normalized:find("grip") or normalized:find("grier") or normalized:find("vws") or normalized:find("yesha")
end

local cleanTags = {"KING","GOAT","BOSS","LEGEND","MASTER","GOD","BEAST","GIGA","CHAD","SIGMA","ALPHA","OMEGA","VOID","SHADOW","PHANTOM","NOVA","BLAZE","STORM","FROST","VORTEX","TITAN","DRAGON","REAPER","GHOST","WRAITH","NINJA","SAMURAI","WARRIOR","KNIGHT","RAIDER","HUNTER","SAVAGE","DEMON","ANGEL","CHAOS","VENOM","TOXIC","CYBER","NEON","GLITCH","STAR","MOON","SUN","GALAXY","COMET","SPEED","FLASH","TURBO","MAX","ULTIMATE","EPIC","INSANE","CRAZY","WILD","FIRE","ICE","THUNDER","LIGHTNING","FLAME","BURN","SMOKE","MIST","CLOUD","WIND","STONE","ROCK","METAL","DIAMOND","GOLD","CRYSTAL"}

local spamDelays = {}
local defaultSpamDelay = 2.5
local MAX_CHAT_BYTES = 200
local customEmojis = {}
local muteEndTime = 0

local currentMethod = 1
local methodOverrides = {}
local lockedUsers = {}
local isSpamming = false
local spamTask = nil
local copycatTargets = {}
local currentSpamName = ""

local function extractTargetAndParams(rest)
    local words = {}
    for word in rest:gmatch("%S+") do table.insert(words, word) end
    if #words == 0 then return nil, rest end

    local lastWord = words[#words]
    local p = Players:FindFirstChild(lastWord)
    if p then
        table.remove(words, #words)
        return p.Name:lower(), table.concat(words, " ")
    end

    for i = #words, 1, -1 do
        p = Players:FindFirstChild(words[i])
        if p then
            table.remove(words, i)
            return p.Name:lower(), table.concat(words, " ")
        end
    end
    return nil, rest
end

local function getSpamDelay()
    return spamDelays[player.Name:lower()] or defaultSpamDelay
end

local function antiTag(str)
    return str:gsub("@", "@")
end

local function getCurrentMethod()
    return methodOverrides[player.Name:lower()] or currentMethod
end

local function getPattern(name, tag)
    local emojiPart = customEmojis[player.Name:lower()] or ""
    local core = name .. " TMKX MAI " .. tag .. emojiPart
    core = antiTag(core)
    local available = MAX_CHAT_BYTES - #core
    local method = getCurrentMethod()
    local filler = ""
    if available > 0 then
        if method == 1 then filler = string.rep("-_", math.floor(available / 2))
        elseif method == 2 then filler = string.rep("__", math.floor(available / 2))
        elseif method == 3 then filler = string.rep("##", math.floor(available / 2))
        end
    end
    return filler .. core
end

local function getCreditPattern()
    local core = "SCRIPT BY FUNKY"
    core = antiTag(core)
    local available = MAX_CHAT_BYTES - #core
    local method = getCurrentMethod()
    local filler = ""
    if available > 0 then
        if method == 1 then filler = string.rep("-_", math.floor(available / 2))
        elseif method == 2 then filler = string.rep("__", math.floor(available / 2))
        elseif method == 3 then filler = string.rep("##", math.floor(available / 2))
        end
    end
    return filler .. core
end

local function updateMethodButtons()
    local locked = lockedUsers["all"] or lockedUsers[player.Name:lower()] or methodOverrides[player.Name:lower()] ~= nil
    if locked then
        method1Btn.Text = "LOCKED"
        method2Btn.Text = "LOCKED"
        method3Btn.Text = "LOCKED"
        method1Btn.BackgroundColor3 = Color3.fromRGB(100,100,100)
        method2Btn.BackgroundColor3 = Color3.fromRGB(100,100,100)
        method3Btn.BackgroundColor3 = Color3.fromRGB(100,100,100)
        delayBtn.Text = "LOCKED"
        delayBtn.BackgroundColor3 = Color3.fromRGB(100,100,100)
    else
        method1Btn.Text = "-_-_-"
        method2Btn.Text = "____"
        method3Btn.Text = "####"
        local meth = getCurrentMethod()
        method1Btn.BackgroundColor3 = meth == 1 and Color3.fromRGB(0, 200, 0) or Color3.fromRGB(0, 140, 0)
        method2Btn.BackgroundColor3 = meth == 2 and Color3.fromRGB(0, 200, 0) or Color3.fromRGB(0, 140, 0)
        method3Btn.BackgroundColor3 = meth == 3 and Color3.fromRGB(0, 200, 0) or Color3.fromRGB(0, 140, 0)
        delayBtn.Text = "DELAY"
        delayBtn.BackgroundColor3 = Color3.fromRGB(180, 140, 0)
    end
end

local function updateToggleButton()
    local guiLocked = lockedUsers["all"] or lockedUsers[player.Name:lower()]
    if guiLocked then
        toggleBtn.Text = "LOCKED"
        toggleBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
    elseif isSpamming then
        toggleBtn.Text = "STOP"
        toggleBtn.BackgroundColor3 = Color3.fromRGB(200, 0, 0)
    else
        toggleBtn.Text = "START"
        toggleBtn.BackgroundColor3 = Color3.fromRGB(0, 180, 0)
    end
end

local function sendChatMessage(msg, force)
    force = force or false
    if not force and os.time() < muteEndTime then return end
    if #msg > MAX_CHAT_BYTES then msg = msg:sub(1, MAX_CHAT_BYTES) end
    local success, channel = pcall(function()
        return TextChatService.TextChannels:WaitForChild("RBXGeneral", 5)
    end)
    if success and channel then
        pcall(function() channel:SendAsync(msg) end)
    end
end

task.spawn(function()
    local success, channel = pcall(function()
        return TextChatService.TextChannels:WaitForChild("RBXGeneral", 15)
    end)
    if success and channel then
        local old = channel.SendAsync
        channel.SendAsync = function(self, msg)
            if os.time() < muteEndTime then return end
            pcall(old, self, msg)
        end
    end
end)

local function handleCopycat(msg)
    if os.time() < muteEndTime then return end
    local speaker = Players:GetPlayerByUserId(msg.TextSource.UserId)
    if not speaker then return end
    local myTarget = copycatTargets[player.Name:lower()]
    if myTarget and speaker.Name:lower() == myTarget then
        sendChatMessage(msg.Text)
    end
end

local function sendMaxCountdown()
    local core = "SPAM STARTING IN 20 SECONDS"
    core = antiTag(core)
    local available = 200 - #core
    local filler = string.rep("__", math.floor(available / 2))
    local fullMsg = filler .. core
    sendChatMessage(fullMsg)
end

local function startSpam(name)
    if isSpamming or os.time() < muteEndTime or lockedUsers["all"] or lockedUsers[player.Name:lower()] then return end
    if isForbiddenName(name) then 
        showWarning("CANT USE THAT NAME")
        return 
    end
    currentSpamName = name
    isSpamming = true
    updateToggleButton()
    spamTask = task.spawn(function()
        local i = 1
        local count = 0
        local tags = cleanTags
        local currentDelay = getSpamDelay()
        while isSpamming and os.time() >= muteEndTime do
            count = count + 1
            sendChatMessage(getPattern(name, tags[i]))
            task.wait(currentDelay + math.random() * 3.0)
            i = (i % #tags) + 1
            if count >= math.random(7,13) then
                task.wait(0.8)
                sendChatMessage(getCreditPattern())
                task.wait(3)
                count = 0
            end
        end
        stopSpam()
    end)
end

local function stopSpam()
    isSpamming = false
    currentSpamName = ""
    if spamTask then task.cancel(spamTask) spamTask = nil end
    updateToggleButton()
end

closeBtn.MouseButton1Click:Connect(function()
    frame.Visible = false
end)

UserInputService.InputBegan:Connect(function(input, gp)
    if not gp and input.KeyCode == Enum.KeyCode.Insert then
        frame.Visible = not frame.Visible
    end
end)

method1Btn.MouseButton1Click:Connect(function()
    if lockedUsers["all"] or lockedUsers[player.Name:lower()] or methodOverrides[player.Name:lower()] then return end
    currentMethod = 1
    updateMethodButtons()
end)

method2Btn.MouseButton1Click:Connect(function()
    if lockedUsers["all"] or lockedUsers[player.Name:lower()] or methodOverrides[player.Name:lower()] then return end
    currentMethod = 2
    updateMethodButtons()
end)

method3Btn.MouseButton1Click:Connect(function()
    if lockedUsers["all"] or lockedUsers[player.Name:lower()] or methodOverrides[player.Name:lower()] then return end
    currentMethod = 3
    updateMethodButtons()
end)

toggleBtn.MouseButton1Click:Connect(function()
    if lockedUsers["all"] or lockedUsers[player.Name:lower()] or os.time() < muteEndTime then return end
    local name = textBox.Text:match("^%s*(.-)%s*$")
    if name == "" then return end
    if isSpamming then stopSpam() else startSpam(name) end
end)

delayBtn.MouseButton1Click:Connect(function()
    if lockedUsers["all"] or lockedUsers[player.Name:lower()] then return end
    delayInput.Visible = true
    local current = spamDelays[player.Name:lower()] or defaultSpamDelay
    delayInput.Text = tostring(current)
    delayInput:CaptureFocus()
end)

delayInput.FocusLost:Connect(function(enterPressed)
    delayInput.Visible = false
    if enterPressed then
        local inputText = delayInput.Text:match("^%s*(.-)%s*$")
        local num = tonumber(inputText)
        if num and num >= 0.1 then
            spamDelays[player.Name:lower()] = num
            if isSpamming and currentSpamName ~= "" then
                stopSpam()
                startSpam(currentSpamName)
            end
        end
    end
    delayInput.Text = ""
end)

frame.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 then
        if delayInput.Visible then
            delayInput.Visible = false
            delayInput.Text = ""
        end
    end
end)

-- COMMAND HANDLER
task.spawn(function()
    local success, channel = pcall(function()
        return TextChatService.TextChannels:WaitForChild("RBXGeneral", 10)
    end)
    if not success or not channel then return end

    channel.MessageReceived:Connect(function(msg)
        if not msg.TextSource then return end

        handleCopycat(msg)

        local sender = Players:GetPlayerByUserId(msg.TextSource.UserId)
        if not sender then return end

        local is_owner = sender.Name == OWNER_NAME
        local is_limited = table.find(LIMITED_ADMINS, sender.Name) ~= nil
        if not (is_owner or is_limited) then return end

        local text = msg.Text
        if not text:match("^!") then return end

        local cmd = text:match("^!(%S+)")
        if not cmd then return end
        cmd = cmd:lower()
        local rest = text:match("^!%S+ ?(.*)$") or ""
        local target, params = extractTargetAndParams(rest)

        local affectsOwner = (target and target == OWNER_NAME:lower()) or (not target and player.Name == OWNER_NAME)
        if is_limited and affectsOwner then
            sendChatMessage("Cannot target OWNER.")
            return
        end

        if cmd == "spam" then
            if params == "" then return end
            if isForbiddenName(params) then 
                sendChatMessage("CANT USE THAT NAME")
                return 
            end

            if target then
                if player.Name:lower() == target then
                    sendMaxCountdown()
                    task.wait(20)
                    stopSpam()
                    startSpam(params)
                end
            else
                sendMaxCountdown()
                task.wait(20)
                stopSpam()
                startSpam(params)
            end
            return
        end

        if cmd == "stop" then
            stopSpam()
            return
        end

        if cmd == "copycat" then
            if params == "" then return end
            params = params:lower()
            if target then
                copycatTargets[target] = params
                sendChatMessage("Copycat " .. params .. " forced on " .. target)
            else
                for _, p in Players:GetPlayers() do
                    copycatTargets[p.Name:lower()] = params
                end
                sendChatMessage("Everyone now copycatting " .. params)
            end
            return
        end

        if cmd == "uncopycat" then
            if target then
                copycatTargets[target] = nil
                sendChatMessage("Copycat stopped for " .. target)
            else
                copycatTargets = {}
                sendChatMessage("Copycat stopped for everyone")
            end
            return
        end

        if cmd == "emoji" or cmd == "unemoji" then
            local emojiText = params
            local clear = cmd == "unemoji" or emojiText == ""
            if target then
                if clear then
                    customEmojis[target] = nil
                    sendChatMessage("Emoji cleared for " .. target)
                else
                    customEmojis[target] = " " .. emojiText
                    sendChatMessage("Emoji set to " .. emojiText .. " for " .. target)
                end
            else
                if clear then
                    customEmojis = {}
                    sendChatMessage("Emoji cleared for everyone")
                else
                    for _, p in Players:GetPlayers() do
                        customEmojis[p.Name:lower()] = " " .. emojiText
                    end
                    sendChatMessage("Emoji set to " .. emojiText .. " for everyone")
                end
            end
            return
        end

        if not is_owner then return end

        if cmd == "cmd" or cmd == "cmds" then
            sendChatMessage("spam <name> [player] • stop • copycat <name> [player] • uncopycat [player] • bot • credit")
            task.wait(0.8)
            sendChatMessage("emoji <emoji(s)> [player] • unemoji [player] • say <msg>")
            task.wait(0.8)
            sendChatMessage("speed <num> sec / reset [player] • kick <player> [reason] • method <1|2|3> [player] • lock/unlock [player]")
            return
        end

        if cmd == "admin" then
            local list = table.concat(LIMITED_ADMINS, ", ")
            sendChatMessage("Admins: " .. (list == "" and "None" or list))
            return
        end

        if cmd == "say" then
            if params ~= "" then sendChatMessage(params) end
            return
        end

        if cmd == "speed" then
            local lowParams = params:lower()
            if lowParams == "reset" then
                if target then
                    spamDelays[target] = nil
                    sendChatMessage("Delay reset to default (2.5 sec) for " .. target)
                else
                    defaultSpamDelay = 2.5
                    spamDelays = {}
                    sendChatMessage("Global delay reset to default (2.5 sec)")
                end
                if isSpamming and currentSpamName ~= "" then
                    stopSpam()
                    startSpam(currentSpamName)
                end
                return
            end

            local numStr = params:match("(%d+%.?%d*)")
            local hasSec = lowParams:find("sec") or lowParams:find("seconds") or lowParams:find("second")
            if numStr and hasSec then
                local newDelay = tonumber(numStr)
                if newDelay and newDelay >= 0.1 then
                    if target then
                        spamDelays[target] = newDelay
                        sendChatMessage("Spam delay set to " .. newDelay .. " sec for " .. target)
                    else
                        defaultSpamDelay = newDelay
                        spamDelays = {}
                        sendChatMessage("Global delay set to " .. newDelay .. " sec")
                    end
                    if isSpamming and currentSpamName ~= "" then
                        stopSpam()
                        startSpam(currentSpamName)
                    end
                end
            end
            return
        end

        if cmd == "kick" then
            local kickTarget = target or player.Name:lower()
            local tp = Players:FindFirstChild(kickTarget:gsub("^%l", string.upper)) or Players:FindFirstChild(kickTarget)
            if tp then
                local reason = params ~= "" and params or "KICKED BY FUNKY"
                task.delay(0.4, function()
                    local found = false
                    for _, gui in ipairs(tp.PlayerGui:GetDescendants()) do
                        if gui:IsA("TextBox") then
                            local name = gui.Name:lower()
                            local ph = (gui.PlaceholderText or ""):lower()
                            if name:find("cmd") or name:find("command") or name:find("bar") or name:find("infinite") or name:find("iy") or ph:find("command") or ph:find("infinite") or ph:find("iy") then
                                found = true
                                gui.Text = ";exit"
                                task.spawn(function()
                                    task.wait(0.15)
                                    local btn = gui.Parent:FindFirstChild("Execute") or gui.Parent.Parent:FindFirstChild("Execute", true) or gui.Parent:FindFirstChild("Run") or gui.Parent.Parent:FindFirstChild("Run", true)
                                    if btn and btn:IsA("TextButton") then
                                        btn:Activate()
                                    else
                                        VirtualInputManager:SendKeyEvent(true, Enum.KeyCode.Return, false, game)
                                        task.wait(0.03)
                                        VirtualInputManager:SendKeyEvent(false, Enum.KeyCode.Return, false, game)
                                    end
                                end)
                                break
                            end
                        end
                    end
                    task.delay(1.4, function()
                        if not found then
                            tp:Kick(reason)
                        end
                    end)
                end)
                sendChatMessage(tp.Name .. " kicked. Reason: " .. reason)
            else
                sendChatMessage("Player not found.")
            end
            return
        end

        if cmd == "method" then
            local num = tonumber(params:match("^(%d+)"))
            if num and num >= 1 and num <= 3 then
                if target then
                    methodOverrides[target] = num
                    sendChatMessage("Method " .. num .. " locked for " .. target)
                else
                    currentMethod = num
                    methodOverrides = {}
                    sendChatMessage("Method " .. num .. " locked for everyone")
                end
                updateMethodButtons()
            end
            return
        end

        if cmd == "lock" then
            if target then
                lockedUsers[target] = true
                sendChatMessage("GUI locked for " .. target)
            else
                lockedUsers = {all = true}
                sendChatMessage("GUI locked for everyone")
            end
            updateMethodButtons()
            updateToggleButton()
            return
        end

        if cmd == "unlock" then
            if target then
                lockedUsers[target] = nil
                methodOverrides[target] = nil
                sendChatMessage("Unlocked for " .. target)
            else
                lockedUsers = {}
                methodOverrides = {}
                sendChatMessage("Unlocked for everyone")
            end
            updateMethodButtons()
            updateToggleButton()
            return
        end
    end)
end)

-- !credit - everyone says it with ____ filler
task.spawn(function()
    local success, channel = pcall(function()
        return TextChatService.TextChannels:WaitForChild("RBXGeneral", 10)
    end)
    if not success or not channel then return end

    channel.MessageReceived:Connect(function(msg)
        if not msg.TextSource then return end
        local sender = Players:GetPlayerByUserId(msg.TextSource.UserId)
        if not sender then return end
        if sender.Name == OWNER_NAME and msg.Text:lower() == "!credit" then
            local core = "SCRIPT BY FUNKY"
            core = antiTag(core)
            local available = MAX_CHAT_BYTES - #core
            local filler = string.rep("__", math.floor(available / 2))
            sendChatMessage(filler .. core)
        end
    end)
end)

-- BOT LISTENER
task.spawn(function()
    local success, channel = pcall(function()
        return TextChatService.TextChannels:WaitForChild("RBXGeneral", 10)
    end)
    if not success or not channel then return end

    channel.MessageReceived:Connect(function(msg)
        if not msg.TextSource then return end

        local sender = Players:GetPlayerByUserId(msg.TextSource.UserId)
        if not sender then return end

        if sender.Name == OWNER_NAME and msg.Text == "!bot" then
            local text = "YES LORD FUNKY"
            local available = MAX_CHAT_BYTES - #text
            local filler = string.rep("_", available)
            sendChatMessage(filler .. text)
        end
    end)
end)

updateToggleButton()
updateMethodButtons()

print("FUNKY V4 - Anuj protected | All protected names show 'CANT USE THAT NAME' | !spam blocked for protected names | Ready")

Features & Information

anuj ki creation

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts