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.
166 lines
4.3 KiB
Lua
166 lines
4.3 KiB
Lua
--[=[
|
|
@c GuildTextChannel x GuildChannel x TextChannel
|
|
@d Represents a text channel in a Discord guild, where guild members and webhooks
|
|
can send and receive messages.
|
|
]=]
|
|
|
|
local json = require('json')
|
|
|
|
local GuildChannel = require('containers/abstract/GuildChannel')
|
|
local TextChannel = require('containers/abstract/TextChannel')
|
|
local FilteredIterable = require('iterables/FilteredIterable')
|
|
local Webhook = require('containers/Webhook')
|
|
local Cache = require('iterables/Cache')
|
|
local Resolver = require('client/Resolver')
|
|
|
|
local GuildTextChannel, get = require('class')('GuildTextChannel', GuildChannel, TextChannel)
|
|
|
|
function GuildTextChannel:__init(data, parent)
|
|
GuildChannel.__init(self, data, parent)
|
|
TextChannel.__init(self, data, parent)
|
|
end
|
|
|
|
function GuildTextChannel:_load(data)
|
|
GuildChannel._load(self, data)
|
|
TextChannel._load(self, data)
|
|
end
|
|
|
|
--[=[
|
|
@m createWebhook
|
|
@t http
|
|
@p name string
|
|
@r Webhook
|
|
@d Creates a webhook for this channel. The name must be between 2 and 32 characters
|
|
in length.
|
|
]=]
|
|
function GuildTextChannel:createWebhook(name)
|
|
local data, err = self.client._api:createWebhook(self._id, {name = name})
|
|
if data then
|
|
return Webhook(data, self.client)
|
|
else
|
|
return nil, err
|
|
end
|
|
end
|
|
|
|
--[=[
|
|
@m getWebhooks
|
|
@t http
|
|
@r Cache
|
|
@d Returns a newly constructed cache of all webhook objects for the channel. The
|
|
cache and its objects are not automatically updated via gateway events. You must
|
|
call this method again to get the updated objects.
|
|
]=]
|
|
function GuildTextChannel:getWebhooks()
|
|
local data, err = self.client._api:getChannelWebhooks(self._id)
|
|
if data then
|
|
return Cache(data, Webhook, self.client)
|
|
else
|
|
return nil, err
|
|
end
|
|
end
|
|
|
|
--[=[
|
|
@m bulkDelete
|
|
@t http
|
|
@p messages Message-ID-Resolvables
|
|
@r boolean
|
|
@d Bulk deletes multiple messages, from 2 to 100, from the channel. Messages over
|
|
2 weeks old cannot be deleted and will return an error.
|
|
]=]
|
|
function GuildTextChannel:bulkDelete(messages)
|
|
messages = Resolver.messageIds(messages)
|
|
local data, err
|
|
if #messages == 1 then
|
|
data, err = self.client._api:deleteMessage(self._id, messages[1])
|
|
else
|
|
data, err = self.client._api:bulkDeleteMessages(self._id, {messages = messages})
|
|
end
|
|
if data then
|
|
return true
|
|
else
|
|
return false, err
|
|
end
|
|
end
|
|
|
|
--[=[
|
|
@m setTopic
|
|
@t http
|
|
@p topic string
|
|
@r boolean
|
|
@d Sets the channel's topic. This must be between 1 and 1024 characters. Pass `nil`
|
|
to remove the topic.
|
|
]=]
|
|
function GuildTextChannel:setTopic(topic)
|
|
return self:_modify({topic = topic or json.null})
|
|
end
|
|
|
|
--[=[
|
|
@m setRateLimit
|
|
@t http
|
|
@p limit number
|
|
@r boolean
|
|
@d Sets the channel's slowmode rate limit in seconds. This must be between 0 and 120.
|
|
Passing 0 or `nil` will clear the limit.
|
|
]=]
|
|
function GuildTextChannel:setRateLimit(limit)
|
|
return self:_modify({rate_limit_per_user = limit or json.null})
|
|
end
|
|
|
|
--[=[
|
|
@m enableNSFW
|
|
@t http
|
|
@r boolean
|
|
@d Enables the NSFW setting for the channel. NSFW channels are hidden from users
|
|
until the user explicitly requests to view them.
|
|
]=]
|
|
function GuildTextChannel:enableNSFW()
|
|
return self:_modify({nsfw = true})
|
|
end
|
|
|
|
--[=[
|
|
@m disableNSFW
|
|
@t http
|
|
@r boolean
|
|
@d Disables the NSFW setting for the channel. NSFW channels are hidden from users
|
|
until the user explicitly requests to view them.
|
|
]=]
|
|
function GuildTextChannel:disableNSFW()
|
|
return self:_modify({nsfw = false})
|
|
end
|
|
|
|
--[=[@p topic string/nil The channel's topic. This should be between 1 and 1024 characters.]=]
|
|
function get.topic(self)
|
|
return self._topic
|
|
end
|
|
|
|
--[=[@p nsfw boolean Whether this channel is marked as NSFW (not safe for work).]=]
|
|
function get.nsfw(self)
|
|
return self._nsfw or false
|
|
end
|
|
|
|
--[=[@p rateLimit number Slowmode rate limit per guild member.]=]
|
|
function get.rateLimit(self)
|
|
return self._rate_limit_per_user or 0
|
|
end
|
|
|
|
--[=[@p isNews boolean Whether this channel is a news channel of type 5.]=]
|
|
function get.isNews(self)
|
|
return self._type == 5
|
|
end
|
|
|
|
--[=[@p members FilteredIterable A filtered iterable of guild members that have
|
|
permission to read this channel. If you want to check whether a specific member
|
|
has permission to read this channel, it would be better to get the member object
|
|
elsewhere and use `Member:hasPermission` rather than check whether the member
|
|
exists here.]=]
|
|
function get.members(self)
|
|
if not self._members then
|
|
self._members = FilteredIterable(self._parent._members, function(m)
|
|
return m:hasPermission(self, 'readMessages')
|
|
end)
|
|
end
|
|
return self._members
|
|
end
|
|
|
|
return GuildTextChannel
|