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.

84 lines
2.2 KiB
Lua

--[=[
@c GuildCategoryChannel x GuildChannel
@d Represents a channel category in a Discord guild, used to organize individual
text or voice channels in that guild.
]=]
local GuildChannel = require('containers/abstract/GuildChannel')
local FilteredIterable = require('iterables/FilteredIterable')
local enums = require('enums')
local channelType = enums.channelType
local GuildCategoryChannel, get = require('class')('GuildCategoryChannel', GuildChannel)
function GuildCategoryChannel:__init(data, parent)
GuildChannel.__init(self, data, parent)
end
--[=[
@m createTextChannel
@t http
@p name string
@r GuildTextChannel
@d Creates a new GuildTextChannel with this category as it's parent. Similar to `Guild:createTextChannel(name)`
]=]
function GuildCategoryChannel:createTextChannel(name)
local guild = self._parent
local data, err = guild.client._api:createGuildChannel(guild._id, {
name = name,
type = channelType.text,
parent_id = self._id
})
if data then
return guild._text_channels:_insert(data)
else
return nil, err
end
end
--[=[
@m createVoiceChannel
@t http
@p name string
@r GuildVoiceChannel
@d Creates a new GuildVoiceChannel with this category as it's parent. Similar to `Guild:createVoiceChannel(name)`
]=]
function GuildCategoryChannel:createVoiceChannel(name)
local guild = self._parent
local data, err = guild.client._api:createGuildChannel(guild._id, {
name = name,
type = channelType.voice,
parent_id = self._id
})
if data then
return guild._voice_channels:_insert(data)
else
return nil, err
end
end
--[=[@p textChannels FilteredIterable Iterable of all textChannels in the Category.]=]
function get.textChannels(self)
if not self._text_channels then
local id = self._id
self._text_channels = FilteredIterable(self._parent._text_channels, function(c)
return c._parent_id == id
end)
end
return self._text_channels
end
--[=[@p voiceChannels FilteredIterable Iterable of all voiceChannels in the Category.]=]
function get.voiceChannels(self)
if not self._voice_channels then
local id = self._id
self._voice_channels = FilteredIterable(self._parent._voice_channels, function(c)
return c._parent_id == id
end)
end
return self._voice_channels
end
return GuildCategoryChannel