![[KEYLESS] Moondiety Script | 17+ supported Games](https://scriptblox.com/images/sb/0-1753093706828.png)
Keyless VerifiedUniversal

--[[
(BEFORE YOU READ THE REST, I WANTED TO TELL YOU THAT JESUS LOVES YOU)
EasyLua is a script made to help new roblox exploiters, providing them with functions like DownloadImage, comments that guide them through the script.
How to use this script?
local API = loadstring(game:HttpGet(ScriptUrl))()
And then you can use the API's functions like you see them.
Made by ballsman3761 on discord.
]]
--* Services
local HttpService = game:GetService("HttpService")
--^ Variables (Localization for performance, because using string.find multiple times is slower than doing local v1 = string.find and using v1):
local string, table, task, Instance, game, debug = string, table, task, Instance, workspace.Parent, debug
local find, gsub, sub, rep, format, match, gmatch, split, byte, char, lower, upper = string.find, string.gsub, string.sub, string.rep, string.format, string.match, string.gmatch, string.split, string.byte, string.char, string.lower, string.upper
local tfind, tinsert, tconcat, tunpack, tclear = table.find, table.insert, table.concat, table.unpack, table.clear
local Instance_new = Instance.new
local UDim2_fromOffset = UDim2.fromOffset
local deg, sqrt, atan2, random, clamp, min, max = math.deg, math.sqrt, math.atan2, math.random, math.clamp, math.min, math.max
--& Lua(u) Globals
local pcall, next, tostring, tonumber, assert, typeof, tick, setfenv, getfenv, getmetatable, setmetatable, error, newproxy = pcall, next, tostring, tonumber, assert, typeof, tick, setfenv, getfenv, getmetatable, setmetatable, error, newproxy
local wait, spawn, delay = task.wait, task.spawn, task.delay
local API = {
Version = "1.0.1"
}
local Request = (syn and syn.request or fluxus and fluxus.request or http and http.request or request or function(Args) -- HTTP Request function for low level executors.
-- Args: {Url: string, Method: string, Headers: table | nil, Body: string | nil}
Args = Args or {};
local Url, Method, Headers, Body = Args.Url, Args.Method, Args.Headers, Args.Body
--! Assertions
assert(Url, "Missing request url.")
assert(Method, "Missing request method.")
--* Main Function
local Content = {}
HttpService:RequestInternal({
Url = Url,
Method = Method,
Headers = Headers,
Body = Body
}):Start(function(Success, Returned)
Content = Returned
Content.Success = Success
end)
repeat
wait()
until
Content.Success ~= nil
return Content;
end)
function API:DownloadImage(Url, SaveAs) -- Url is the image you want to download, for example, https://cdn.discordapp.com/avatars/..., SaveAs is the file you want to save it as.
assert(typeof(Url) == "string", "Invalid argument #1 to DownloadImage, string expected got \"" .. tostring(Url) .. "\"")
assert(typeof(SaveAs) == "string", "Invalid argument #2 to DownloadImage, string expected got \"" .. tostring(SaveAs) .. "\"")
writefile(SaveAs, Request({
Url = Url,
Method = "GET"
}).Body) -- Basically, this makes a file with the name being SaveAs's value, And the content being the content of the url given.
return SaveAs -- Returns the path of the image. (SaveAs)
end
function API:GetImage(Type, Data)
--[[
When Type is Url, it will send a GET request to the second parameter and use the content of it,
When Type is File, it will read the file and use it's content.
Extra Note:
I believe the only supported image types as of 18th of february 2025 are .png, .jpg, .ico is unsupported, i don't know about the rest.
]]
assert(typeof(Type) == "string", "Invalid argument #1 to GetImage, string expected got " .. tostring(Type))
assert(typeof(Data) == "string", "Invalid argument #2 to GetImage, string expected got " .. tostring(Data))
local File;
local temp_file_name = HttpService:GenerateGUID(false)
local use_files = lower(Type) ~= "url"
File = not use_files and API:DownloadImage(Data, temp_file_name) or Data
assert(isfile(File), "No file with the path \"" .. File .. "\" found.")
if not use_files then
delay(3, function()
delfile(temp_file_name) -- Delete the file we just created because it's still cached and we can use the image, deleting it gives the user less storage usage & less flooding of their workspace folder.
end)
end
return getcustomasset(File)
end
function API:CreateBridge(Handler)
--[[
Okay, this is a little complex for new scripters so i'll try my best to explain it:
This function creates a bridge, basically something you can GET and POST data from & to, How it works is:
local Bridge = API:CreateBridge(function(Path, ...) print("Bridge received request, path:",Path,"extra arguments:",...) end)
This, whenever the Bridge object you created gets a sent a request, Will print what path the request was sent to, and the arguments it had.
This can be useful for creating memory efficent scripts, like:
local Bridge = API:CreateBridge(...)
game.Players.PlayerAdded:Connect(function(plr)
Bridge:Post("/main", {
Event = "PlayerAdded",
Player = plr
})
end)
This can be used for fancy transferring of data across your script, and pretty cool to use.
To stop the bridge, You're given a key to protect other functions from disabling the bridge, You're given a 128 character long key, and only that key can be used to stop the bridge,
Syntax:
local Bridge, Key = ...
Bridge:Stop(Key)
If you do:
Bridge:Stop("hi")
It will not work, because hi isnt equal to the Key.
]]
local Generated = ""
local addr = match(tostring(function()end), "0x.+")
for _ = 1, 4 do Generated = Generated .. HttpService:GenerateGUID(random(1,2) == 2) end
local Object = newproxy(true)
local Event = Instance_new("BindableEvent")
local Connections = {}
local Connection;
Connection = Event.Event:Connect(Handler)
local mt = {
__index = {
Post = function(_, ...)
return Event:Fire(...)
end,
Stop = function(_, ValidationKey)
if ValidationKey == Generated then
Connection:Disconnect()
for _, C in next, Connections do
C:Disconnect()
end
tclear(Connections)
end
end
},
__tostring = function()
return "Bridge: " .. addr
end,
__metatable = "This metatable is protected."
}
getmetatable(Object).__index = mt.__index
getmetatable(Object).__newindex = mt.__newindex
getmetatable(Object).__tostring = mt.__tostring
return Object, Generated
end
function API:GetPageContent(Url: string)
--[[
Sends a GET request to the given Url
]]
assert(typeof(Url) == "string", "Invalid argument #1 to 'GetPageContent', string expected got " .. typeof(Url))
return Request({
Url = Url,
Method = "GET"
})
end
function API:GetJSON(Url: string)
--[[
Sends a GET request to the given Url, attempts to parse the response as json and returns:
a, b
where a is the parsed content (nil if failed), and b is if the script was able to parse the json.
]]
assert(typeof(Url) == "string", "Invalid argument #1 to 'GetPageContent', string expected got " .. typeof(Url))
local b, a = pcall(HttpService.JSONDecode, HttpService, Request({
Url = Url,
Method = "GET"
}).Body)
return b and a or nil, b
end
--* File System:
function API:MoveFile(Source: string, To: string, Rename: string | nil, OnlyCopy: boolean | nil)
--[[
* Moves a file from the path `Source` to the path `To`, renames the file to `Rename` if given, For example:
* We have a file in folder1, called passwords.json, we wanna move it to folder2.
* You do: API:MoveFile("folder1/passwords.json", "folder2")
* If you wanna rename it aswell, for example: passwords.json -> passwords.txt, just do:
* API:MoveFile("folder1/passwords.json", "folder2", "passwords.txt")
* OnlyCopy: If true, then it does not delete the source file, Used for copying files without deleting them.
]]
assert(typeof(Source) == "string", "Invalid argument #1 to 'MoveFile', string expected got " .. typeof(Source))
assert(typeof(To) == "string", "Invalid argument #2 to 'MoveFile', string expected got " .. typeof(To))
assert(isfile(Source), "Invalid source! File " .. tostring(Source) .. " does not exist!")
local FileName = split(gsub(Source, "/", "\\"), "\\")
FileName = Rename or FileName[#FileName]
writefile(To .. "/" .. FileName, readfile(Source))
if not OnlyCopy then delfile(Source) end
end
return API![[KEYLESS] Moondiety Script | 17+ supported Games](https://scriptblox.com/images/sb/0-1753093706828.png)



you put it in auto execute ?
@NegaBoy read the description
@debug_colonel It's not even for a game I don't know what vro is saying 💔
@vxsty also nice script i think it will really help ppl who just started learning LuaU
@debug_colonel Thank you very much, I don't know what to add more to it though.
It doesn’t work :(
@annabelmartinver What doesnt
@annabelmartinver It's a guide, not a script to play with
Wow, you'll literally make half the scripts from the entire library, like a toolbox on the hands of a beginner!
where do yall learn to make exploit scripts bro im using ai for it and cant even make * work 💔
cool
are you supposed to read this script ? 😭
@vxsty i am trying to make a tool like yours named LuaTools, but the way to add global methods is to store them in a table? for example: table:method(parameter)
Nice guide!
vxsty add a do*entation or examples or uses of this
@Malrous I don't get what you mean, If you mean like namecalls, Like game:HttpGet, You can do table:method(...), If you mean globals like writefile, getgenv().global_name = value
@Haol920 Thank you!
@UnnesscaryInventions Its in the script
@vxsty Thanks! I knew about making this after my comment but before your reply but that can still help me with later projects!
Can't really find a use for this