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.
148 lines
3.7 KiB
Lua
148 lines
3.7 KiB
Lua
3 years ago
|
--[=[
|
||
|
@c Webhook x Snowflake
|
||
|
@d Represents a handle used to send webhook messages to a guild text channel in a
|
||
|
one-way fashion. This class defines methods and properties for managing the
|
||
|
webhook, not for sending messages.
|
||
|
]=]
|
||
|
|
||
|
local json = require('json')
|
||
|
local enums = require('enums')
|
||
|
local Snowflake = require('containers/abstract/Snowflake')
|
||
|
local User = require('containers/User')
|
||
|
local Resolver = require('client/Resolver')
|
||
|
|
||
|
local defaultAvatar = enums.defaultAvatar
|
||
|
|
||
|
local Webhook, get = require('class')('Webhook', Snowflake)
|
||
|
|
||
|
function Webhook:__init(data, parent)
|
||
|
Snowflake.__init(self, data, parent)
|
||
|
self._user = data.user and self.client._users:_insert(data.user) -- DNE if getting by token
|
||
|
end
|
||
|
|
||
|
function Webhook:_modify(payload)
|
||
|
local data, err = self.client._api:modifyWebhook(self._id, payload)
|
||
|
if data then
|
||
|
self:_load(data)
|
||
|
return true
|
||
|
else
|
||
|
return false, err
|
||
|
end
|
||
|
end
|
||
|
|
||
|
--[=[
|
||
|
@m getAvatarURL
|
||
|
@t mem
|
||
|
@op size number
|
||
|
@op ext string
|
||
|
@r string
|
||
|
@d Returns a URL that can be used to view the webhooks's full avatar. If provided,
|
||
|
the size must be a power of 2 while the extension must be a valid image format.
|
||
|
If the webhook does not have a custom avatar, the default URL is returned.
|
||
|
]=]
|
||
|
function Webhook:getAvatarURL(size, ext)
|
||
|
return User.getAvatarURL(self, size, ext)
|
||
|
end
|
||
|
|
||
|
--[=[
|
||
|
@m getDefaultAvatarURL
|
||
|
@t mem
|
||
|
@op size number
|
||
|
@r string
|
||
|
@d Returns a URL that can be used to view the webhooks's default avatar.
|
||
|
]=]
|
||
|
function Webhook:getDefaultAvatarURL(size)
|
||
|
return User.getDefaultAvatarURL(self, size)
|
||
|
end
|
||
|
|
||
|
--[=[
|
||
|
@m setName
|
||
|
@t http
|
||
|
@p name string
|
||
|
@r boolean
|
||
|
@d Sets the webhook's name. This must be between 2 and 32 characters in length.
|
||
|
]=]
|
||
|
function Webhook:setName(name)
|
||
|
return self:_modify({name = name or json.null})
|
||
|
end
|
||
|
|
||
|
--[=[
|
||
|
@m setAvatar
|
||
|
@t http
|
||
|
@p avatar Base64-Resolvable
|
||
|
@r boolean
|
||
|
@d Sets the webhook's avatar. If `nil` is passed, the avatar is removed.
|
||
|
]=]
|
||
|
function Webhook:setAvatar(avatar)
|
||
|
avatar = avatar and Resolver.base64(avatar)
|
||
|
return self:_modify({avatar = avatar or json.null})
|
||
|
end
|
||
|
|
||
|
--[=[
|
||
|
@m delete
|
||
|
@t http
|
||
|
@r boolean
|
||
|
@d Permanently deletes the webhook. This cannot be undone!
|
||
|
]=]
|
||
|
function Webhook:delete()
|
||
|
local data, err = self.client._api:deleteWebhook(self._id)
|
||
|
if data then
|
||
|
return true
|
||
|
else
|
||
|
return false, err
|
||
|
end
|
||
|
end
|
||
|
|
||
|
--[=[@p guildId string The ID of the guild in which this webhook exists.]=]
|
||
|
function get.guildId(self)
|
||
|
return self._guild_id
|
||
|
end
|
||
|
|
||
|
--[=[@p channelId string The ID of the channel in which this webhook exists.]=]
|
||
|
function get.channelId(self)
|
||
|
return self._channel_id
|
||
|
end
|
||
|
|
||
|
--[=[@p user User/nil The user that created this webhook.]=]
|
||
|
function get.user(self)
|
||
|
return self._user
|
||
|
end
|
||
|
|
||
|
--[=[@p token string The token that can be used to access this webhook.]=]
|
||
|
function get.token(self)
|
||
|
return self._token
|
||
|
end
|
||
|
|
||
|
--[=[@p name string The name of the webhook. This should be between 2 and 32 characters in length.]=]
|
||
|
function get.name(self)
|
||
|
return self._name
|
||
|
end
|
||
|
|
||
|
--[=[@p type number The type of the webhook. See the `webhookType` enum for a human-readable representation.]=]
|
||
|
function get.type(self)
|
||
|
return self._type
|
||
|
end
|
||
|
|
||
|
--[=[@p avatar string/nil The hash for the webhook's custom avatar, if one is set.]=]
|
||
|
function get.avatar(self)
|
||
|
return self._avatar
|
||
|
end
|
||
|
|
||
|
--[=[@p avatarURL string Equivalent to the result of calling `Webhook:getAvatarURL()`.]=]
|
||
|
function get.avatarURL(self)
|
||
|
return self:getAvatarURL()
|
||
|
end
|
||
|
|
||
|
--[=[@p defaultAvatar number The default avatar for the webhook. See the `defaultAvatar` enumeration for
|
||
|
a human-readable representation. This should always be `defaultAvatar.blurple`.]=]
|
||
|
function get.defaultAvatar()
|
||
|
return defaultAvatar.blurple
|
||
|
end
|
||
|
|
||
|
--[=[@p defaultAvatarURL string Equivalent to the result of calling `Webhook:getDefaultAvatarURL()`.]=]
|
||
|
function get.defaultAvatarURL(self)
|
||
|
return self:getDefaultAvatarURL()
|
||
|
end
|
||
|
|
||
|
return Webhook
|