From a1470e562bb4ba4cdfd59aab21f4c1fb641ccc19 Mon Sep 17 00:00:00 2001
From: 9382 <omnomaidan@gmail.com>
Date: Mon, 13 Mar 2023 16:24:30 +0000
Subject: [PATCH] Fix "Last Online" status grabbing

---
 src/modules/commands/user.lua | 17 +++++++++--------
 src/modules/strafes_net.lua   | 10 +++++++---
 2 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/src/modules/commands/user.lua b/src/modules/commands/user.lua
index 01f96e6..37cf2a1 100644
--- a/src/modules/commands/user.lua
+++ b/src/modules/commands/user.lua
@@ -58,12 +58,13 @@ commands:Add('user',{},'user <username|mention|"me">', function(t)
     local name = user_info.name
     local displayName = user_info.displayName
 
-    -- local onlineStatus_info = API:GetUserOnlineStatus(id)
-    
-    -- local LastLocation = onlineStatus_info.LastLocation
-    -- table.foreach(onlineStatus_info.errors[1],print)
-    -- local LastOnline = date.fromISO(onlineStatus_info.LastOnline):toSeconds()+(3600*5)
-    
+    local onlineStatus_info = API:GetUserOnlineStatus(id)
+    table.foreach(onlineStatus_info,print)
+
+    local LastLocation = onlineStatus_info.lastLocation
+    if onlineStatus_info.userPresenceType==2 then LastLocation="Ingame" end
+    local LastOnline = date.fromISO(onlineStatus_info.lastOnline):toSeconds()+(3600*5)
+
     local badgeRequest = API:GetBadgesAwardedDates(id,Badges)
     local badgeData = badgeRequest.data
 
@@ -91,8 +92,8 @@ commands:Add('user',{},'user <username|mention|"me">', function(t)
             {name='ID',value=id,inline=true},
             {name='Account Age',value=accountAge..' days',inline=true},
             {name='Created',value='<t:'..round(created)..':R>',inline=true},
-            -- {name='Last Online',value='<t:'..round(LastOnline)..':R>',inline=true},
-            -- {name='Last Location',value=LastLocation,inline=true},
+            {name='Last Online',value='<t:'..round(LastOnline)..':R>',inline=true},
+            {name='Last Location',value=LastLocation,inline=true},
             {name='Banned',value=isBanned,inline=true},
             {name='Description',value=description,inline=false},
         }
diff --git a/src/modules/strafes_net.lua b/src/modules/strafes_net.lua
index 775c86e..9cbdbbc 100644
--- a/src/modules/strafes_net.lua
+++ b/src/modules/strafes_net.lua
@@ -7,6 +7,7 @@ local FIVEMAN_API_URL = 'https://api.fiveman1.net/v1/'
 local ROBLOX_API_URL = 'https://users.roblox.com/v1/'
 local ROBLOX_API_URL2 = 'https://api.roblox.com/'
 local ROBLOX_BADGES_API = 'https://badges.roblox.com/v1/'
+local ROBLOX_PRESENCE_URL = 'https://presence.roblox.com/v1/'
 local ROBLOX_THUMBNAIL_URL = 'https://thumbnails.roblox.com/v1/'
 local ROBLOX_GROUPS_ROLES_URL = 'https://groups.roblox.com/v2/users/%s/groups/roles'
 
@@ -91,6 +92,7 @@ function formatTime(time) -- chatgpt THIS IS FOR SECONDS! NOT MILLISECONDS
         return string.format("%02d:%02d.%03d", minutes, seconds, milliseconds)
     end
 end
+function L1Copy(t,b) b=b or {} for x,y in next,t do b[x]=y end return b end
 
 
 -- [[ STRAFESNET API ]] --
@@ -274,10 +276,12 @@ function API:GetRobloxInfoFromDiscordId(DISCORD_ID)
     return response2
 end
 
-function API:GetUserOnlineStatus(USER_ID) -- https://api.roblox.com/users/1455906620/onlinestatus
+function API:GetUserOnlineStatus(USER_ID)
     if not USER_ID then return 'empty id' end
-    local response,headers = http_request('GET', ROBLOX_API_URL2..'users/'..USER_ID..'/onlinestatus', API_HEADER)
-    return response,headers
+    local response1 = http_request('POST', ROBLOX_PRESENCE_URL..'presence/users', API_HEADER, {userIds={USER_ID}}).userPresences[1] --For LastLocation
+    local response2 = http_request('POST', ROBLOX_PRESENCE_URL..'presence/last-online', API_HEADER, {userIds={USER_ID}}).lastOnlineTimestamps[1] --For a more accurate LastOnline
+    L1Copy(response2, response1)
+    return response1
 end
 
 function API:GetBadgesAwardedDates(USER_ID,BADGE_LIST)