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.
228 lines
5.4 KiB
Lua
228 lines
5.4 KiB
Lua
3 years ago
|
--[=[
|
||
|
@c AuditLogEntry x Snowflake
|
||
|
@d Represents an entry made into a guild's audit log.
|
||
|
]=]
|
||
|
|
||
|
local Snowflake = require('containers/abstract/Snowflake')
|
||
|
|
||
|
local enums = require('enums')
|
||
|
local actionType = enums.actionType
|
||
|
|
||
|
local AuditLogEntry, get = require('class')('AuditLogEntry', Snowflake)
|
||
|
|
||
|
function AuditLogEntry:__init(data, parent)
|
||
|
Snowflake.__init(self, data, parent)
|
||
|
if data.changes then
|
||
|
for i, change in ipairs(data.changes) do
|
||
|
data.changes[change.key] = change
|
||
|
data.changes[i] = nil
|
||
|
change.key = nil
|
||
|
change.old = change.old_value
|
||
|
change.new = change.new_value
|
||
|
change.old_value = nil
|
||
|
change.new_value = nil
|
||
|
end
|
||
|
self._changes = data.changes
|
||
|
end
|
||
|
self._options = data.options
|
||
|
end
|
||
|
|
||
|
--[=[
|
||
|
@m getBeforeAfter
|
||
|
@t mem
|
||
|
@r table
|
||
|
@r table
|
||
|
@d Returns two tables of the target's properties before the change, and after the change.
|
||
|
]=]
|
||
|
function AuditLogEntry:getBeforeAfter()
|
||
|
local before, after = {}, {}
|
||
|
for k, change in pairs(self._changes) do
|
||
|
before[k], after[k] = change.old, change.new
|
||
|
end
|
||
|
return before, after
|
||
|
end
|
||
|
|
||
|
local function unknown(self)
|
||
|
return nil, 'unknown audit log action type: ' .. self._action_type
|
||
|
end
|
||
|
|
||
|
local targets = setmetatable({
|
||
|
|
||
|
[actionType.guildUpdate] = function(self)
|
||
|
return self._parent
|
||
|
end,
|
||
|
|
||
|
[actionType.channelCreate] = function(self)
|
||
|
return self._parent:getChannel(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.channelUpdate] = function(self)
|
||
|
return self._parent:getChannel(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.channelDelete] = function(self)
|
||
|
return self._parent:getChannel(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.channelOverwriteCreate] = function(self)
|
||
|
return self._parent:getChannel(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.channelOverwriteUpdate] = function(self)
|
||
|
return self._parent:getChannel(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.channelOverwriteDelete] = function(self)
|
||
|
return self._parent:getChannel(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.memberKick] = function(self)
|
||
|
return self._parent._parent:getUser(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.memberPrune] = function()
|
||
|
return nil
|
||
|
end,
|
||
|
|
||
|
[actionType.memberBanAdd] = function(self)
|
||
|
return self._parent._parent:getUser(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.memberBanRemove] = function(self)
|
||
|
return self._parent._parent:getUser(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.memberUpdate] = function(self)
|
||
|
return self._parent:getMember(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.memberRoleUpdate] = function(self)
|
||
|
return self._parent:getMember(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.roleCreate] = function(self)
|
||
|
return self._parent:getRole(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.roleUpdate] = function(self)
|
||
|
return self._parent:getRole(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.roleDelete] = function(self)
|
||
|
return self._parent:getRole(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.inviteCreate] = function()
|
||
|
return nil
|
||
|
end,
|
||
|
|
||
|
[actionType.inviteUpdate] = function()
|
||
|
return nil
|
||
|
end,
|
||
|
|
||
|
[actionType.inviteDelete] = function()
|
||
|
return nil
|
||
|
end,
|
||
|
|
||
|
[actionType.webhookCreate] = function(self)
|
||
|
return self._parent._parent._webhooks:get(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.webhookUpdate] = function(self)
|
||
|
return self._parent._parent._webhooks:get(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.webhookDelete] = function(self)
|
||
|
return self._parent._parent._webhooks:get(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.emojiCreate] = function(self)
|
||
|
return self._parent:getEmoji(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.emojiUpdate] = function(self)
|
||
|
return self._parent:getEmoji(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.emojiDelete] = function(self)
|
||
|
return self._parent:getEmoji(self._target_id)
|
||
|
end,
|
||
|
|
||
|
[actionType.messageDelete] = function(self)
|
||
|
return self._parent._parent:getUser(self._target_id)
|
||
|
end,
|
||
|
|
||
|
}, {__index = function() return unknown end})
|
||
|
|
||
|
--[=[
|
||
|
@m getTarget
|
||
|
@t http?
|
||
|
@r *
|
||
|
@d Gets the target object of the affected entity. The returned object can be: [[Guild]],
|
||
|
[[GuildChannel]], [[User]], [[Member]], [[Role]], [[Webhook]], [[Emoji]], nil
|
||
|
]=]
|
||
|
function AuditLogEntry:getTarget()
|
||
|
return targets[self._action_type](self)
|
||
|
end
|
||
|
|
||
|
--[=[
|
||
|
@m getUser
|
||
|
@t http?
|
||
|
@r User
|
||
|
@d Gets the user who performed the changes.
|
||
|
]=]
|
||
|
function AuditLogEntry:getUser()
|
||
|
return self._parent._parent:getUser(self._user_id)
|
||
|
end
|
||
|
|
||
|
--[=[
|
||
|
@m getMember
|
||
|
@t http?
|
||
|
@r Member/nil
|
||
|
@d Gets the member object of the user who performed the changes.
|
||
|
]=]
|
||
|
function AuditLogEntry:getMember()
|
||
|
return self._parent:getMember(self._user_id)
|
||
|
end
|
||
|
|
||
|
--[=[@p changes table/nil A table of audit log change objects. The key represents
|
||
|
the property of the changed target and the value contains a table of `new` and
|
||
|
possibly `old`, representing the property's new and old value.]=]
|
||
|
function get.changes(self)
|
||
|
return self._changes
|
||
|
end
|
||
|
|
||
|
--[=[@p options table/nil A table of optional audit log information.]=]
|
||
|
function get.options(self)
|
||
|
return self._options
|
||
|
end
|
||
|
|
||
|
--[=[@p actionType number The action type. Use the `actionType `enumeration
|
||
|
for a human-readable representation.]=]
|
||
|
function get.actionType(self)
|
||
|
return self._action_type
|
||
|
end
|
||
|
|
||
|
--[=[@p targetId string/nil The Snowflake ID of the affected entity. Will
|
||
|
be `nil` for certain targets.]=]
|
||
|
function get.targetId(self)
|
||
|
return self._target_id
|
||
|
end
|
||
|
|
||
|
--[=[@p userId string The Snowflake ID of the user who commited the action.]=]
|
||
|
function get.userId(self)
|
||
|
return self._user_id
|
||
|
end
|
||
|
|
||
|
--[=[@p reason string/nil The reason provided by the user for the change.]=]
|
||
|
function get.reason(self)
|
||
|
return self._reason
|
||
|
end
|
||
|
|
||
|
--[=[@p guild Guild The guild in which this audit log entry was found.]=]
|
||
|
function get.guild(self)
|
||
|
return self._parent
|
||
|
end
|
||
|
|
||
|
return AuditLogEntry
|