0% found this document useful (0 votes)
68 views13 pages

Message

The document is a Lua script designed for a Roblox game that implements an HTTP logging tool with a graphical user interface (GUI). It includes features such as saving logs, highlighting, and a toggle for enabling or disabling the tool, along with error handling for various operations. The GUI allows users to interact with the tool, view logs, and manage settings through buttons and draggable elements.

Uploaded by

ilikenerdslol892
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
68 views13 pages

Message

The document is a Lua script designed for a Roblox game that implements an HTTP logging tool with a graphical user interface (GUI). It includes features such as saving logs, highlighting, and a toggle for enabling or disabling the tool, along with error handling for various operations. The GUI allows users to interact with the tool, view logs, and manage settings through buttons and draggable elements.

Uploaded by

ilikenerdslol892
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 13

local options = ({...

})[1] or {
AutoDecode = true,
Highlighting = true,
SaveLogs = true,
CLICommands = true,
ShowResponse = true,
BlockedURLs = {},
API = true,
GuiEnabled = true
}
local logname = string.format("%d-%s-log.txt", game.PlaceId, os.date("%d_%m_%y"))

if options.SaveLogs then
pcall(function()
writefile(logname, string.format("Http Logs from %s\n\n",
os.date("%d/%m/%y")))
end)
end

-- Safe load serializer with error handling


local Serializer
pcall(function()
Serializer =
loadstring(game:HttpGet("https://raw.githubusercontent.com/NotDSF/leopard/main/
rbx/leopard-syn.lua"))()
Serializer.UpdateConfig({ highlighting = options.Highlighting })
end)

if not Serializer then


warn("Failed to load Serializer - some features may not work properly")
-- Create minimal serializer fallback
Serializer = {
Serialize = function(t) return tostring(t) end,
FormatArguments = function(...) return table.concat({...}, ", ") end
}
end

-- Rest of the initialization with pcall protection


local RecentCommit = "Latest changes"
pcall(function()
RecentCommit =
game.HttpService:JSONDecode(game:HttpGet("https://api.github.com/repos/NotDSF/
HttpSpy/commits?per_page=1&path=init.lua"))[1].commit.message
end)

-- Create GUI with error handling


local success, err = pcall(function()
local clonef = clonefunction
local format = clonef(string.format)
local gsub = clonef(string.gsub)
local match = clonef(string.match)
local append = clonef(appendfile)
local Type = clonef(type)
local crunning = clonef(coroutine.running)
local cwrap = clonef(coroutine.wrap)
local cresume = clonef(coroutine.resume)
local cyield = clonef(coroutine.yield)
local Pcall = clonef(pcall)
local Pairs = clonef(pairs)
local Error = clonef(error)
local getnamecallmethod = clonef(getnamecallmethod)
local blocked = options.BlockedURLs
local enabled = true
local reqfunc = (syn or http).request
local libtype = syn and "syn" or "http"
local hooked = {}
local proxied = {}
local methods = {
HttpGet = not syn,
HttpGetAsync = not syn,
GetObjects = true,
HttpPost = not syn,
HttpPostAsync = not syn
}

local OnRequest = Instance.new("BindableEvent")

-- Create GUI
local HttpSpyGui = Instance.new("ScreenGui")
HttpSpyGui.Name = "idk"
HttpSpyGui.DisplayOrder = 999
HttpSpyGui.ResetOnSpawn = false
HttpSpyGui.Parent = game:GetService("CoreGui")

-- Main Window Frame


local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0.45, 0, 0.55, 0)
MainFrame.Position = UDim2.new(0.275, 0, 0.225, 0)
MainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
MainFrame.BorderColor3 = Color3.fromRGB(60, 60, 60)
MainFrame.BorderSizePixel = 1
MainFrame.ClipsDescendants = true
MainFrame.Parent = HttpSpyGui

-- Make window draggable


local dragInput, dragStart, startPos
MainFrame.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragStart = input.Position
startPos = MainFrame.Position

local connection
connection = input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
connection:Disconnect()
dragStart = nil
end
end)
end
end)

MainFrame.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement and dragStart
then
local delta = input.Position - dragStart
MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset +
delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)

-- Title Bar with properly visible buttons


local TitleBar = Instance.new("Frame")
TitleBar.Size = UDim2.new(1, 0, 0, 30)
TitleBar.Position = UDim2.new(0, 0, 0, 0)
TitleBar.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
TitleBar.BorderSizePixel = 0
TitleBar.ZIndex = 2 -- Ensure it stays on top
TitleBar.Parent = MainFrame

local UICorner = Instance.new("UICorner")


UICorner.CornerRadius = UDim.new(0, 6)
UICorner.Parent = TitleBar

local TitleText = Instance.new("TextLabel")


TitleText.Size = UDim2.new(1, -200, 1, 0)
TitleText.Position = UDim2.new(0, 10, 0, 0)
TitleText.BackgroundTransparency = 1
TitleText.Text = "idk what to put here"
TitleText.TextColor3 = Color3.fromRGB(220, 220, 220)
TitleText.Font = Enum.Font.GothamBold
TitleText.TextSize = 14
TitleText.TextXAlignment = Enum.TextXAlignment.Left
TitleText.ZIndex = 3
TitleText.Parent = TitleBar

-- Button container to ensure proper layout


local ButtonContainer = Instance.new("Frame")
ButtonContainer.Size = UDim2.new(0, 180, 1, 0)
ButtonContainer.Position = UDim2.new(1, -185, 0, 0)
ButtonContainer.BackgroundTransparency = 1
ButtonContainer.Parent = TitleBar

-- Toggle Button (moved left)


local ToggleButton = Instance.new("TextButton")
ToggleButton.Size = UDim2.new(0, 60, 0, 22)
ToggleButton.Position = UDim2.new(0, 0, 0.5, -11)
ToggleButton.Text = "Disable"
ToggleButton.Font = Enum.Font.Gotham
ToggleButton.TextSize = 12
ToggleButton.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
ToggleButton.TextColor3 = Color3.fromRGB(220, 220, 220)
ToggleButton.BorderSizePixel = 0
ToggleButton.AutoButtonColor = false
ToggleButton.ZIndex = 3
ToggleButton.Parent = ButtonContainer

local ToggleCorner = Instance.new("UICorner")


ToggleCorner.CornerRadius = UDim.new(0, 4)
ToggleCorner.Parent = ToggleButton

-- Minimize Button (now clearly visible)


local MinimizeButton = Instance.new("TextButton")
MinimizeButton.Size = UDim2.new(0, 22, 0, 22)
MinimizeButton.Position = UDim2.new(0, 65, 0.5, -11)
MinimizeButton.Text = "_"
MinimizeButton.Font = Enum.Font.GothamBold
MinimizeButton.TextSize = 16
MinimizeButton.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
MinimizeButton.TextColor3 = Color3.fromRGB(220, 220, 220)
MinimizeButton.BorderSizePixel = 0
MinimizeButton.AutoButtonColor = false
MinimizeButton.ZIndex = 3
MinimizeButton.Parent = ButtonContainer

local MinimizeCorner = Instance.new("UICorner")


MinimizeCorner.CornerRadius = UDim.new(0, 4)
MinimizeCorner.Parent = MinimizeButton

-- Close Button
local CloseButton = Instance.new("TextButton")
CloseButton.Size = UDim2.new(0, 22, 0, 22)
CloseButton.Position = UDim2.new(0, 92, 0.5, -11)
CloseButton.Text = "X"
CloseButton.Font = Enum.Font.GothamBold
CloseButton.TextSize = 14
CloseButton.BackgroundColor3 = Color3.fromRGB(120, 40, 40)
CloseButton.TextColor3 = Color3.fromRGB(220, 220, 220)
CloseButton.BorderSizePixel = 0
CloseButton.AutoButtonColor = false
CloseButton.ZIndex = 3
CloseButton.Parent = ButtonContainer

local CloseCorner = Instance.new("UICorner")


CloseCorner.CornerRadius = UDim.new(0, 4)
CloseCorner.Parent = CloseButton

-- Minimized Icon - Now positioned at top center of screen


local MinimizedIcon = Instance.new("TextButton")
MinimizedIcon.Size = UDim2.new(0, 40, 0, 40)
MinimizedIcon.Position = UDim2.new(0.5, -20, 0, 10) -- Positioned at top
center with 10px from top
MinimizedIcon.Text = "H"
MinimizedIcon.Font = Enum.Font.GothamBold
MinimizedIcon.TextSize = 20
MinimizedIcon.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
MinimizedIcon.TextColor3 = Color3.fromRGB(220, 220, 220)
MinimizedIcon.BorderSizePixel = 1
MinimizedIcon.BorderColor3 = Color3.fromRGB(60, 60, 60)
MinimizedIcon.AutoButtonColor = false
MinimizedIcon.Visible = false
MinimizedIcon.ZIndex = 999 -- Ensure it's always on top
MinimizedIcon.Parent = HttpSpyGui

local MinimizedCorner = Instance.new("UICorner")


MinimizedCorner.CornerRadius = UDim.new(0, 6)
MinimizedCorner.Parent = MinimizedIcon

-- Make minimized icon draggable


local iconDragInput, iconDragStart, iconStartPos
MinimizedIcon.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
iconDragStart = input.Position
iconStartPos = MinimizedIcon.Position

local connection
connection = input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
connection:Disconnect()
iconDragStart = nil
end
end)
end
end)

MinimizedIcon.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement and
iconDragStart then
local delta = input.Position - iconDragStart
MinimizedIcon.Position = UDim2.new(iconStartPos.X.Scale,
iconStartPos.X.Offset + delta.X, iconStartPos.Y.Scale, iconStartPos.Y.Offset +
delta.Y)
end
end)

-- Button hover effects with pcall protection


local function safeHover(button, enterColor, leaveColor)
pcall(function()
button.MouseEnter:Connect(function()
button.BackgroundColor3 = enterColor
end)
button.MouseLeave:Connect(function()
button.BackgroundColor3 = leaveColor
end)
end)
end

safeHover(MinimizeButton, Color3.fromRGB(100, 100, 100), Color3.fromRGB(80, 80,


80))
safeHover(CloseButton, Color3.fromRGB(150, 50, 50), Color3.fromRGB(120, 40,
40))
safeHover(ToggleButton, Color3.fromRGB(100, 100, 100), enabled and
Color3.fromRGB(80, 80, 80) or Color3.fromRGB(120, 40, 40))
safeHover(MinimizedIcon, Color3.fromRGB(50, 50, 50), Color3.fromRGB(35, 35,
35))

-- Minimize functionality with error handling


local isMinimized = false
pcall(function()
MinimizeButton.MouseButton1Click:Connect(function()
isMinimized = not isMinimized
MainFrame.Visible = not isMinimized
MinimizedIcon.Visible = isMinimized

if isMinimized then
-- Save position before minimizing
local mainFramePos = MainFrame.Position
MinimizedIcon.Position = UDim2.new(mainFramePos.X.Scale,
mainFramePos.X.Offset + MainFrame.AbsoluteSize.X/2 - 20, 0, 10)
else
-- Restore position from icon
MainFrame.Position = MinimizedIcon.Position - UDim2.new(0,
MainFrame.AbsoluteSize.X/2 - 20, 0, 0)
end
end)
end)
-- Click minimized icon to restore
pcall(function()
MinimizedIcon.MouseButton1Click:Connect(function()
isMinimized = false
MainFrame.Visible = true
MinimizedIcon.Visible = false
MainFrame.Position = MinimizedIcon.Position - UDim2.new(0,
MainFrame.AbsoluteSize.X/2 - 20, 0, 0)
end)
end)

-- Close/unload functionality
pcall(function()
CloseButton.MouseButton1Click:Connect(function()
-- Clean up hooks
if __namecall then
hookmetamethod(game, "__namecall", __namecall)
end

if __request then
hookfunction(reqfunc, __request)
end

-- Remove GUI
HttpSpyGui:Destroy()

-- Completely unload the script


getgenv().HttpSpy = nil
end)
end)

pcall(function()
ToggleButton.MouseButton1Click:Connect(function()
enabled = not enabled
ToggleButton.Text = enabled and "Disable" or "Enable"
ToggleButton.BackgroundColor3 = enabled and Color3.fromRGB(80, 80, 80)
or Color3.fromRGB(120, 40, 40)
end)
end)

-- Logs Frame
local LogsFrame = Instance.new("ScrollingFrame")
LogsFrame.Size = UDim2.new(1, -10, 1, -70)
LogsFrame.Position = UDim2.new(0, 5, 0, 35)
LogsFrame.BackgroundTransparency = 1
LogsFrame.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 100)
LogsFrame.ScrollBarThickness = 6
LogsFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y
LogsFrame.ScrollingDirection = Enum.ScrollingDirection.Y
LogsFrame.Parent = MainFrame

local LogsLayout = Instance.new("UIListLayout")


LogsLayout.Padding = UDim.new(0, 8)
LogsLayout.Parent = LogsFrame

-- Control Bar
local ControlBar = Instance.new("Frame")
ControlBar.Size = UDim2.new(1, 0, 0, 30)
ControlBar.Position = UDim2.new(0, 0, 1, -30)
ControlBar.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
ControlBar.BorderSizePixel = 0
ControlBar.Parent = MainFrame

-- Clear Button
local ClearButton = Instance.new("TextButton")
ClearButton.Size = UDim2.new(0, 80, 0, 22)
ClearButton.Position = UDim2.new(0, 10, 0.5, -11)
ClearButton.Text = "Clear Logs"
ClearButton.Font = Enum.Font.Gotham
ClearButton.TextSize = 12
ClearButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
ClearButton.TextColor3 = Color3.fromRGB(220, 220, 220)
ClearButton.BorderSizePixel = 0
ClearButton.AutoButtonColor = false
ClearButton.Parent = ControlBar

local ClearCorner = Instance.new("UICorner")


ClearCorner.CornerRadius = UDim.new(0, 4)
ClearCorner.Parent = ClearButton

safeHover(ClearButton, Color3.fromRGB(80, 80, 80), Color3.fromRGB(60, 60, 60))

pcall(function()
ClearButton.MouseButton1Click:Connect(function()
local children = LogsFrame:GetChildren()
for i = #children, 1, -1 do
local child = children[i]
if child:IsA("Frame") then
child:Destroy()
end
end
requestCount = 0
RequestCount.Text = "Requests: 0"
end)
end)

-- Filter Box
local FilterBox = Instance.new("TextBox")
FilterBox.Size = UDim2.new(0.5, 0, 0.7, 0)
FilterBox.Position = UDim2.new(0.5, -100, 0.15, 0)
FilterBox.PlaceholderText = "Filter requests..."
FilterBox.Text = ""
FilterBox.Font = Enum.Font.Gotham
FilterBox.TextSize = 12
FilterBox.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
FilterBox.TextColor3 = Color3.fromRGB(220, 220, 220)
FilterBox.BorderSizePixel = 0
FilterBox.Parent = ControlBar

local UICornerFilter = Instance.new("UICorner")


UICornerFilter.CornerRadius = UDim.new(0, 4)
UICornerFilter.Parent = FilterBox

-- Request Counter
local RequestCount = Instance.new("TextLabel")
RequestCount.Size = UDim2.new(0, 100, 1, 0)
RequestCount.Position = UDim2.new(1, -110, 0, 0)
RequestCount.Text = "Requests: 0"
RequestCount.Font = Enum.Font.Gotham
RequestCount.TextSize = 12
RequestCount.BackgroundTransparency = 1
RequestCount.TextColor3 = Color3.fromRGB(180, 180, 180)
RequestCount.TextXAlignment = Enum.TextXAlignment.Right
RequestCount.Parent = ControlBar

local requestCount = 0
local function updateRequestCount()
requestCount = requestCount + 1
RequestCount.Text = "Requests: "..requestCount
end

-- Enhanced printf function for GUI with error handling


local function printf(text, isResponse)
if options.SaveLogs then
pcall(function()
append(logname, gsub(text, "%\27%[%d+m", ""))
end)
end

if not options.GuiEnabled then return end

-- Remove ANSI color codes for GUI


local cleanText = text:gsub("\27%[[%d;]+m", "")

-- Create new log entry on the main thread


task.spawn(function()
pcall(function()
local logEntry = Instance.new("Frame")
logEntry.Size = UDim2.new(1, -10, 0, 0)
logEntry.Position = UDim2.new(0, 5, 0, 0)
logEntry.BackgroundTransparency = 1
logEntry.AutomaticSize = Enum.AutomaticSize.Y
logEntry.Parent = LogsFrame

-- Entry background
local bg = Instance.new("Frame")
bg.Size = UDim2.new(1, 0, 1, 0)
bg.BackgroundColor3 = isResponse and Color3.fromRGB(30, 45, 30) or
Color3.fromRGB(45, 30, 30)
bg.BackgroundTransparency = 0.9
bg.BorderSizePixel = 0
bg.Parent = logEntry

local corner = Instance.new("UICorner")


corner.CornerRadius = UDim.new(0, 6)
corner.Parent = bg

-- Copy button
local copyButton = Instance.new("TextButton")
copyButton.Size = UDim2.new(0, 50, 0, 18)
copyButton.Position = UDim2.new(1, -55, 0, 5)
copyButton.Text = "Copy"
copyButton.Font = Enum.Font.Gotham
copyButton.TextSize = 11
copyButton.BackgroundColor3 = Color3.fromRGB(70, 70, 100)
copyButton.TextColor3 = Color3.fromRGB(220, 220, 220)
copyButton.BorderSizePixel = 0
copyButton.AutoButtonColor = false
copyButton.Parent = logEntry

local copyCorner = Instance.new("UICorner")


copyCorner.CornerRadius = UDim.new(0, 4)
copyCorner.Parent = copyButton

safeHover(copyButton, Color3.fromRGB(90, 90, 120),


Color3.fromRGB(70, 70, 100))

pcall(function()
copyButton.MouseButton1Click:Connect(function()
setclipboard(cleanText)
copyButton.Text = "Copied!"
task.wait(1)
copyButton.Text = "Copy"
end)
end)

-- Content label
local label = Instance.new("TextLabel")
label.Size = UDim2.new(1, -60, 0, 0)
label.Position = UDim2.new(0, 10, 0, 5)
label.Text = cleanText
label.TextColor3 = Color3.fromRGB(240, 240, 240)
label.BackgroundTransparency = 1
label.TextXAlignment = Enum.TextXAlignment.Left
label.TextYAlignment = Enum.TextYAlignment.Top
label.TextWrapped = true
label.Font = Enum.Font.Code
label.TextSize = 13
label.AutomaticSize = Enum.AutomaticSize.Y
label.Parent = logEntry

-- Timestamp
local timeText = Instance.new("TextLabel")
timeText.Size = UDim2.new(1, -60, 0, 15)
timeText.Position = UDim2.new(0, 10, 1, -20)
timeText.Text = os.date("%H:%M:%S")
timeText.TextColor3 = Color3.fromRGB(180, 180, 180)
timeText.BackgroundTransparency = 1
timeText.TextXAlignment = Enum.TextXAlignment.Left
timeText.Font = Enum.Font.Gotham
timeText.TextSize = 10
timeText.Parent = logEntry

-- Auto-scroll to bottom if not filtering


if FilterBox.Text == "" then
task.wait()
LogsFrame.CanvasPosition = Vector2.new(0,
LogsFrame.AbsoluteCanvasSize.Y)
end

updateRequestCount()
end)
end)
end
-- Fixed filter functionality with error handling
pcall(function()
FilterBox:GetPropertyChangedSignal("Text"):Connect(function()
local filterText = string.lower(FilterBox.Text)

for _, logEntry in ipairs(LogsFrame:GetChildren()) do


if logEntry:IsA("Frame") then
local label = logEntry:FindFirstChildOfClass("TextLabel")
if label and label.Text then
logEntry.Visible = filterText == "" or
string.find(string.lower(label.Text), filterText, 1, true) ~= nil
end
end
end
end)
end)

local function ConstantScan(constant)


for i,v in Pairs(getgc(true)) do
if type(v) == "function" and islclosure(v) and getfenv(v).script ==
getfenv(saveinstance).script and table.find(debug.getconstants(v), constant) then
return v;
end;
end;
end;

local function DeepClone(tbl, cloned)


cloned = cloned or {};

for i,v in Pairs(tbl) do


if Type(v) == "table" then
cloned[i] = DeepClone(v);
continue;
end;
cloned[i] = v;
end;

return cloned;
end;

local __namecall, __request;


__namecall = hookmetamethod(game, "__namecall", newcclosure(function(self, ...)
local method = getnamecallmethod();

if methods[method] then
printf("game:"..method.."("..Serializer.FormatArguments(...)..")\n\n");
end;

return __namecall(self, ...);


end));

__request = hookfunction(reqfunc, newcclosure(function(req)


if Type(req) ~= "table" then return __request(req); end;

local RequestData = DeepClone(req);


if not enabled then
return __request(req);
end;
if Type(RequestData.Url) ~= "string" then return __request(req) end;

if not options.ShowResponse then


printf(libtype..".request("..Serializer.Serialize(RequestData)..")\n\
n");
return __request(req);
end;

local t = crunning();
cwrap(function()
if RequestData.Url and blocked[RequestData.Url] then
printf(libtype..".request("..Serializer.Serialize(RequestData)..")
-- blocked url\n\n");
return cresume(t, {});
end;

if RequestData.Url then
local Host = string.match(RequestData.Url, "https?://(%w+.%w+)/");
if Host and proxied[Host] then
RequestData.Url = gsub(RequestData.Url, Host, proxied[Host],
1);
end;
end;

OnRequest:Fire(RequestData);

local ok, ResponseData = Pcall(__request, RequestData);


if not ok then
Error(ResponseData, 0);
end;

local BackupData = {};


for i,v in Pairs(ResponseData) do
BackupData[i] = v;
end;

if BackupData.Headers["Content-Type"] and
match(BackupData.Headers["Content-Type"], "application/json") and
options.AutoDecode then
local body = BackupData.Body;
local ok, res = Pcall(game.HttpService.JSONDecode,
game.HttpService, body);
if ok then
BackupData.Body = res;
end;
end;

printf(libtype..".request("..Serializer.Serialize(RequestData)..")\n\
n", false);
printf("Response Data: "..Serializer.Serialize(BackupData).."\n\n",
true);
cresume(t, hooked[RequestData.Url] and hooked[RequestData.Url]
(ResponseData) or ResponseData);
end)();
return cyield();
end));

if request then
replaceclosure(request, reqfunc);
end;

if syn and syn.websocket then


local WsConnect, WsBackup = debug.getupvalue(syn.websocket.connect, 1);
WsBackup = hookfunction(WsConnect, function(...)
printf("syn.websocket.connect("..Serializer.FormatArguments(...)..")\n\
n");
return WsBackup(...);
end);
end;

if syn and syn.websocket then


local HttpGet;
HttpGet =
hookfunction(getupvalue(ConstantScan("ZeZLm2hpvGJrD6OP8A3aEszPNEw8OxGb"), 2),
function(self, ...)
printf("game.HttpGet(game, "..Serializer.FormatArguments(...)..")\n\
n");
return HttpGet(self, ...);
end);

local HttpPost;
HttpPost =
hookfunction(getupvalue(ConstantScan("gpGXBVpEoOOktZWoYECgAY31o0BlhOue"), 2),
function(self, ...)
printf("game.HttpPost(game, "..Serializer.FormatArguments(...)..")\n\
n");
return HttpPost(self, ...);
end);
end

for method, enabled in Pairs(methods) do


if enabled then
local b;
b = hookfunction(game[method], newcclosure(function(self, ...)
printf("game."..method.."(game,
"..Serializer.FormatArguments(...)..")\n\n");
return b(self, ...);
end));
end;
end;

if not debug.info(2, "f") then


printf("You are running an outdated version, please use the loadstring at
https://github.com/NotDSF/HttpSpy\n");
end;

-- Initialize with welcome message


task.spawn(function()
printf("HttpSpy "..version.." (Creator: https://github.com/NotDSF)\nChange
Logs:\n\t"..RecentCommit.."\nLogs are automatically being saved to: "..
(options.SaveLogs and logname or "(You aren't saving logs, enable SaveLogs if you
want to save logs)").."\n\n")
end)

if not options.API then return end

local API = {}
API.OnRequest = OnRequest.Event
function API:HookSynRequest(url, hook)
hooked[url] = hook
end

function API:ProxyHost(host, proxy)


proxied[host] = proxy
end

function API:RemoveProxy(host)
if not proxied[host] then
error("host isn't proxied", 0)
end
proxied[host] = nil
end

function API:UnHookSynRequest(url)
if not hooked[url] then
error("url isn't hooked", 0)
end
hooked[url] = nil
end

function API:BlockUrl(url)
blocked[url] = true
end

function API:WhitelistUrl(url)
blocked[url] = false
end

-- Enhanced GUI control to API


function API:ToggleGui(visible)
HttpSpyGui.Enabled = visible
options.GuiEnabled = visible
end

function API:SetGuiPosition(position)
MainFrame.Position = position
end

function API:SetGuiSize(size)
MainFrame.Size = size
end

return API
end)

if not success and err then


warn("HttpSpy initialization failed: "..tostring(err))
if rconsoleprint then
rconsoleprint("@@RED@@")
rconsoleprint("HttpSpy initialization error: "..tostring(err).."\n")
end
return nil
end
isfunctionhooked = function() return false end
ishooked = function() return false end

You might also like