oceanic.js
Version:
A NodeJS library for interfacing with Discord.
233 lines • 19.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
/** @module ThreadOnlyChannel */
const GuildChannel_1 = tslib_1.__importDefault(require("./GuildChannel"));
const PermissionOverwrite_1 = tslib_1.__importDefault(require("./PermissionOverwrite"));
const Permission_1 = tslib_1.__importDefault(require("./Permission"));
const TypedCollection_1 = tslib_1.__importDefault(require("../util/TypedCollection"));
const Constants_1 = require("../Constants");
const Errors_1 = require("../util/Errors");
const Collection_1 = tslib_1.__importDefault(require("../util/Collection"));
/** Represents a thread only channel. */
class ThreadOnlyChannel extends GuildChannel_1.default {
/** The usable tags for threads. */
availableTags;
/** The default auto archive duration for threads. */
defaultAutoArchiveDuration;
/** The default forum layout used to display threads. */
defaultForumLayout;
/** The default reaction emoji for threads. */
defaultReactionEmoji;
/** The default sort order mode used to sort threads. */
defaultSortOrder;
/** The default amount of seconds between non-moderators sending messages in threads. */
defaultThreadRateLimitPerUser;
/** The flags for this channel, see {@link Constants.ChannelFlags | ChannelFlags}. */
flags;
/** The ID of most recently created thread. */
lastThreadID;
/** If this channel is age gated. */
nsfw;
/** The permission overwrites of this channel. */
permissionOverwrites;
/** The position of this channel on the sidebar. */
position;
/** The amount of seconds between non-moderators creating threads. */
rateLimitPerUser;
/** The `guidelines` of this forum channel. */
topic;
constructor(data, client) {
super(data, client);
this.availableTags = [];
this.defaultAutoArchiveDuration = data.default_auto_archive_duration;
this.defaultForumLayout = data.default_forum_layout;
this.defaultReactionEmoji = null;
this.defaultSortOrder = null;
this.defaultThreadRateLimitPerUser = data.default_thread_rate_limit_per_user;
this.flags = data.flags;
this.lastThreadID = data.last_message_id;
this.nsfw = data.nsfw;
this.permissionOverwrites = new TypedCollection_1.default(PermissionOverwrite_1.default, client);
this.position = data.position;
this.rateLimitPerUser = data.rate_limit_per_user;
this.topic = data.topic;
this.update(data);
}
update(data) {
super.update(data);
if (data.available_tags !== undefined) {
this.availableTags = data.available_tags.map(tag => ({
emoji: tag.emoji_id === null && tag.emoji_name === null ? null : { id: tag.emoji_id, name: tag.emoji_name },
id: tag.id,
moderated: tag.moderated,
name: tag.name
}));
}
if (data.default_auto_archive_duration !== undefined) {
this.defaultAutoArchiveDuration = data.default_auto_archive_duration;
}
if (data.default_forum_layout !== undefined) {
this.defaultForumLayout = data.default_forum_layout;
}
if (data.default_reaction_emoji !== undefined) {
this.defaultReactionEmoji = data.default_reaction_emoji === null || (data.default_reaction_emoji.emoji_id === null && data.default_reaction_emoji.emoji_name === null) ? null : { id: data.default_reaction_emoji.emoji_id, name: data.default_reaction_emoji.emoji_name };
}
if (data.default_sort_order !== undefined) {
this.defaultSortOrder = data.default_sort_order;
}
if (data.default_thread_rate_limit_per_user !== undefined) {
this.defaultThreadRateLimitPerUser = data.default_thread_rate_limit_per_user;
}
if (data.flags !== undefined) {
this.flags = data.flags;
}
if (data.last_message_id !== undefined) {
this.lastThreadID = data.last_message_id;
}
if (data.nsfw !== undefined) {
this.nsfw = data.nsfw;
}
if (data.permission_overwrites !== undefined) {
for (const id of this.permissionOverwrites.keys()) {
if (!data.permission_overwrites.some(overwrite => overwrite.id === id)) {
this.permissionOverwrites.delete(id);
}
}
for (const overwrite of data.permission_overwrites) {
this.permissionOverwrites.update(overwrite);
}
}
if (data.position !== undefined) {
this.position = data.position;
}
if (data.rate_limit_per_user !== undefined) {
this.rateLimitPerUser = data.rate_limit_per_user;
}
if (data.topic !== undefined && data.topic !== null) {
this.topic = data.topic;
}
}
/** The most recently created thread. */
get lastThread() {
return this.lastThreadID === null ? null : this.guild.threads.get(this.lastThreadID);
}
get parent() {
return super.parent;
}
/** The threads in this channel. The returned collection is disposable. */
get threads() {
return new Collection_1.default(this.guild.threads.filter(thread => thread.parentID === this.id).map(thread => [thread.id, thread]));
}
/**
* Create an invite for this channel. If the guild is not a `COMMUNITY` server, invites can only be made to last 30 days.
* @param options The options for the invite.
*/
async createInvite(options) {
return this.client.rest.channels.createInvite(this.id, options);
}
/**
* Create a webhook in this channel.
* @param options The options to create the webhook with.
*/
async createWebhook(options) {
return this.client.rest.webhooks.create(this.id, options);
}
/**
* Delete a permission overwrite on this channel.
* @param overwriteID The ID of the permission overwrite to delete.
* @param reason The reason for deleting the permission overwrite.
*/
async deletePermission(overwriteID, reason) {
return this.client.rest.channels.deletePermission(this.id, overwriteID, reason);
}
/**
* Edit a permission overwrite on this channel.
* @param overwriteID The ID of the permission overwrite to edit.
* @param options The options for editing the permission overwrite.
*/
async editPermission(overwriteID, options) {
return this.client.rest.channels.editPermission(this.id, overwriteID, options);
}
/**
* Get the invites of this channel.
*/
async getInvites() {
return this.client.rest.channels.getInvites(this.id);
}
/**
* Get the public archived threads in this channel.
* @param options The options for getting the public archived threads.
*/
async getPublicArchivedThreads(options) {
return this.client.rest.channels.getPublicArchivedThreads(this.id, options);
}
/**
* Get the webhooks in this channel.
*/
async getWebhooks() {
return this.client.rest.webhooks.getForChannel(this.id);
}
/**
* Get the permissions of a member. If providing an id, the member must be cached.
* @param member The member to get the permissions of.
*/
permissionsOf(member) {
if (typeof member === "string") {
member = this.guild.members.get(member);
}
if (!member) {
throw new Errors_1.UncachedError(`Cannot use ${this.constructor.name}#permissionsOf with an ID when the member is not cached.`);
}
let permission = this.guild.permissionsOf(member).allow;
if (permission & Constants_1.Permissions.ADMINISTRATOR) {
return new Permission_1.default(Constants_1.AllPermissions);
}
let overwrite = this.permissionOverwrites.get(this.guildID);
if (overwrite) {
permission = (permission & ~overwrite.deny) | overwrite.allow;
}
let deny = 0n;
let allow = 0n;
for (const id of member.roles) {
if ((overwrite = this.permissionOverwrites.get(id))) {
deny |= overwrite.deny;
allow |= overwrite.allow;
}
}
permission = (permission & ~deny) | allow;
overwrite = this.permissionOverwrites.get(member.id);
if (overwrite) {
permission = (permission & ~overwrite.deny) | overwrite.allow;
}
return new Permission_1.default(permission);
}
/**
* Create a thread in this forum channel.
* @param options The options for starting the thread.
*/
async startThread(options) {
return this.client.rest.channels.startThreadInThreadOnlyChannel(this.id, options);
}
toJSON() {
return {
...super.toJSON(),
availableTags: this.availableTags,
defaultAutoArchiveDuration: this.defaultAutoArchiveDuration,
defaultForumLayout: this.defaultForumLayout,
defaultReactionEmoji: this.defaultReactionEmoji,
defaultSortOrder: this.defaultSortOrder,
defaultThreadRateLimitPerUser: this.defaultThreadRateLimitPerUser,
flags: this.flags,
lastThreadID: this.lastThreadID,
permissionOverwrites: this.permissionOverwrites.map(overwrite => overwrite.toJSON()),
position: this.position,
rateLimitPerUser: this.rateLimitPerUser,
threads: this.threads.map(thread => thread.id),
topic: this.topic,
type: this.type
};
}
}
exports.default = ThreadOnlyChannel;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhyZWFkT25seUNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc3RydWN0dXJlcy9UaHJlYWRPbmx5Q2hhbm5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnQ0FBZ0M7QUFDaEMsMEVBQTBDO0FBQzFDLHdGQUF3RDtBQUl4RCxzRUFBc0M7QUFldEMsc0ZBQXNEO0FBQ3RELDRDQU1zQjtBQUV0QiwyQ0FBK0M7QUFDL0MsNEVBQTRDO0FBRTVDLHdDQUF3QztBQUN4QyxNQUFxQixpQkFBa0IsU0FBUSxzQkFBWTtJQUN2RCxtQ0FBbUM7SUFDbkMsYUFBYSxDQUFrQjtJQUMvQixxREFBcUQ7SUFDckQsMEJBQTBCLENBQTRCO0lBQ3RELHdEQUF3RDtJQUN4RCxrQkFBa0IsQ0FBbUI7SUFDckMsOENBQThDO0lBQzlDLG9CQUFvQixDQUFvQjtJQUN4Qyx3REFBd0Q7SUFDeEQsZ0JBQWdCLENBQXdCO0lBQ3hDLHdGQUF3RjtJQUN4Riw2QkFBNkIsQ0FBUztJQUN0QyxxRkFBcUY7SUFDckYsS0FBSyxDQUFTO0lBQ2QsOENBQThDO0lBQzlDLFlBQVksQ0FBZ0I7SUFDNUIsb0NBQW9DO0lBQ3BDLElBQUksQ0FBVTtJQUNkLGlEQUFpRDtJQUNqRCxvQkFBb0IsQ0FBcUQ7SUFDekUsbURBQW1EO0lBQ25ELFFBQVEsQ0FBUztJQUNqQixxRUFBcUU7SUFDckUsZ0JBQWdCLENBQVM7SUFDekIsOENBQThDO0lBQzlDLEtBQUssQ0FBZ0I7SUFFckIsWUFBWSxJQUEwQixFQUFFLE1BQWM7UUFDbEQsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDO1FBQ3JFLElBQUksQ0FBQyxrQkFBa0IsR0FBSSxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDckQsSUFB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