You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.1 KiB
Lua
128 lines
3.1 KiB
Lua
--[=[
|
|
@c UserPresence x Container
|
|
@t abc
|
|
@d Defines the base methods and/or properties for classes that represent a
|
|
user's current presence information. Note that any method or property that
|
|
exists for the User class is also available in the UserPresence class and its
|
|
subclasses.
|
|
]=]
|
|
|
|
local null = require('json').null
|
|
local User = require('containers/User')
|
|
local Activity = require('containers/Activity')
|
|
local Container = require('containers/abstract/Container')
|
|
|
|
local UserPresence, get = require('class')('UserPresence', Container)
|
|
|
|
function UserPresence:__init(data, parent)
|
|
Container.__init(self, data, parent)
|
|
self._user = self.client._users:_insert(data.user)
|
|
end
|
|
|
|
--[=[
|
|
@m __hash
|
|
@r string
|
|
@d Returns `UserPresence.user.id`
|
|
]=]
|
|
function UserPresence:__hash()
|
|
return self._user._id
|
|
end
|
|
|
|
local activities = setmetatable({}, {__mode = 'v'})
|
|
|
|
function UserPresence:_loadPresence(presence)
|
|
self._status = presence.status
|
|
local status = presence.client_status
|
|
if status then
|
|
self._web_status = status.web
|
|
self._mobile_status = status.mobile
|
|
self._desktop_status = status.desktop
|
|
end
|
|
local game = presence.game
|
|
if game == null then
|
|
self._activity = nil
|
|
elseif game then
|
|
local arr = presence.activities
|
|
if arr and arr[2] then
|
|
for i = 2, #arr do
|
|
for k, v in pairs(arr[i]) do
|
|
game[k] = v
|
|
end
|
|
end
|
|
end
|
|
if self._activity then
|
|
self._activity:_load(game)
|
|
else
|
|
local activity = activities[self:__hash()]
|
|
if activity then
|
|
activity:_load(game)
|
|
else
|
|
activity = Activity(game, self)
|
|
activities[self:__hash()] = activity
|
|
end
|
|
self._activity = activity
|
|
end
|
|
end
|
|
end
|
|
|
|
function get.gameName(self)
|
|
self.client:_deprecated(self.__name, 'gameName', 'activity.name')
|
|
return self._activity and self._activity._name
|
|
end
|
|
|
|
function get.gameType(self)
|
|
self.client:_deprecated(self.__name, 'gameType', 'activity.type')
|
|
return self._activity and self._activity._type
|
|
end
|
|
|
|
function get.gameURL(self)
|
|
self.client:_deprecated(self.__name, 'gameURL', 'activity.url')
|
|
return self._activity and self._activity._url
|
|
end
|
|
|
|
--[=[@p status string The user's overall status (online, dnd, idle, offline).]=]
|
|
function get.status(self)
|
|
return self._status or 'offline'
|
|
end
|
|
|
|
--[=[@p webStatus string The user's web status (online, dnd, idle, offline).]=]
|
|
function get.webStatus(self)
|
|
return self._web_status or 'offline'
|
|
end
|
|
|
|
--[=[@p mobileStatus string The user's mobile status (online, dnd, idle, offline).]=]
|
|
function get.mobileStatus(self)
|
|
return self._mobile_status or 'offline'
|
|
end
|
|
|
|
--[=[@p desktopStatus string The user's desktop status (online, dnd, idle, offline).]=]
|
|
function get.desktopStatus(self)
|
|
return self._desktop_status or 'offline'
|
|
end
|
|
|
|
--[=[@p user User The user that this presence represents.]=]
|
|
function get.user(self)
|
|
return self._user
|
|
end
|
|
|
|
--[=[@p activity Activity/nil The Activity that this presence represents.]=]
|
|
function get.activity(self)
|
|
return self._activity
|
|
end
|
|
|
|
-- user shortcuts
|
|
|
|
for k, v in pairs(User) do
|
|
UserPresence[k] = UserPresence[k] or function(self, ...)
|
|
return v(self._user, ...)
|
|
end
|
|
end
|
|
|
|
for k, v in pairs(User.__getters) do
|
|
get[k] = get[k] or function(self)
|
|
return v(self._user)
|
|
end
|
|
end
|
|
|
|
return UserPresence
|