local cg = game:GetService("CoreGui") local ts = game:GetService("TweenService") local logs = game:GetService("LogService") local setclip = setclipboard or toclipboard or (Clipboard and Clipboard.set) local function getLogs(console) local lines = {} local scroller = console:FindFirstChildWhichIsA("ScrollingFrame", true) if scroller then for _, v in ipairs(scroller:GetDescendants()) do if (v:IsA("TextLabel") or v:IsA("TextBox")) and v.Text ~= "" then table.insert(lines, { order = v.LayoutOrder, y = v.AbsolutePosition.Y, text = v.Text }) end end end if #lines > 0 then table.sort(lines, function(a, b) if a.order ~= 0 and b.order ~= 0 and a.order ~= b.order then return a.order < b.order end return a.y < b.y end) local res = {} for i = 1, #lines do res[i] = lines[i].text end return table.concat(res, "\n") end local history = logs:GetLogHistory() local raw = {} for i, item in ipairs(history) do raw[i] = item.message end return table.concat(raw, "\n") end local function checkValid(btn) if not (btn and btn:IsA("GuiObject") and btn.Name == "Clear") then return false end local buttons = btn.Parent if not (buttons and buttons.Name == "Buttons") then return false end local rConsole = buttons.Parent if not (rConsole and rConsole.Name == "RobloxConsole") then return false end local console = rConsole.Parent return (console and console.Name == "Console") end local function init() for _, obj in ipairs(cg:GetDescendants()) do if checkValid(obj) then local buttons = obj.Parent local rConsole = buttons.Parent if not buttons:FindFirstChild("Copy") then local copy = obj:Clone() copy.Name = "Copy" local title = copy:FindFirstChild("Title") if title then title.Text = "Copy" end local layout = buttons:FindFirstChildOfClass("UIListLayout") if layout then copy.LayoutOrder = obj.LayoutOrder + 1 else local w = obj.AbsoluteSize.X > 0 and (obj.AbsoluteSize.X + 8) or 65 copy.Position = UDim2.new(obj.Position.X.Scale, obj.Position.X.Offset + w, obj.Position.Y.Scale, obj.Position.Y.Offset) end local defaultColor = copy.BackgroundColor3 local busy = false local tIn = ts:Create(copy, TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { BackgroundColor3 = Color3.fromRGB(35, 175, 85) }) local tOut = ts:Create(copy, TweenInfo.new(0.35, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { BackgroundColor3 = defaultColor }) local function handleClick() if busy then return end busy = true if setclip then setclip(getLogs(rConsole)) end if title then title.Text = "Copied!" end tIn:Play() task.delay(1, function() tOut:Play() if title and title.Parent then title.Text = "Copy" end task.wait(0.35) busy = false end) end if copy:IsA("GuiButton") then copy.MouseButton1Click:Connect(handleClick) else local subBtn = copy:FindFirstChildWhichIsA("GuiButton", true) if subBtn then subBtn.MouseButton1Click:Connect(handleClick) end end copy.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then handleClick() end end) copy.Parent = buttons end end end end cg.DescendantAdded:Connect(function(desc) if checkValid(desc) then task.wait(0.1) init() end end) task.spawn(function() while true do pcall(init) task.wait(2) end end) init()