oceanic.js
Version:
A NodeJS library for interfacing with Discord.
155 lines • 11.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
/** @module Role */
const Base_1 = tslib_1.__importDefault(require("./Base"));
const Permission_1 = tslib_1.__importDefault(require("./Permission"));
const Errors_1 = require("../util/Errors");
/** Represents a role in a guild. */
class Role extends Base_1.default {
_cachedGuild;
/**
* The color of this role.
* @deprecated Use {@link Role#colors | Role#colors.primaryColor} instead.
*/
color;
/** The colors of this role. */
colors;
/** The {@link Constants~RoleFlags | flags } for this role. */
flags;
/** The id of the guild this role is in. */
guildID;
/** If this role is hoisted. */
hoist;
/** The icon has of this role. */
icon;
/** If this role is managed by an integration. */
managed;
/** If this role can be mentioned by anybody. */
mentionable;
/** The name of this role. */
name;
/** The permissions of this role. */
permissions;
/** The position of this role. */
position;
/** The [tags](https://discord.com/developers/docs/topics/permissions#role-object-role-tags-structure) of this role. */
tags;
/** The unicode emoji of this role. */
unicodeEmoji;
constructor(data, client, guildID) {
super(data.id, client);
this.color = data.color;
this.colors = {
primaryColor: data.colors.primary_color,
secondaryColor: data.colors.secondary_color,
tertiaryColor: data.colors.tertiary_color
};
this.flags = data.flags;
this.guildID = guildID;
this.hoist = !!data.hoist;
this.icon = null;
this.managed = !!data.managed;
this.mentionable = !!data.mentionable;
this.name = data.name;
this.permissions = new Permission_1.default(data.permissions);
this.position = data.position;
this.unicodeEmoji = null;
this.update(data);
}
update(data) {
if (data.flags !== undefined) {
this.flags = data.flags;
}
if (data.color !== undefined) {
this.color = data.color;
}
if (data.colors !== undefined) {
this.colors = {
primaryColor: data.colors.primary_color,
secondaryColor: data.colors.secondary_color,
tertiaryColor: data.colors.tertiary_color
};
}
if (data.hoist !== undefined) {
this.hoist = data.hoist;
}
if (data.icon !== undefined) {
this.icon = data.icon ?? null;
}
if (data.mentionable !== undefined) {
this.mentionable = data.mentionable;
}
if (data.name !== undefined) {
this.name = data.name;
}
if (data.permissions !== undefined) {
this.permissions = new Permission_1.default(data.permissions);
}
if (data.position !== undefined) {
this.position = data.position;
}
if (data.unicode_emoji !== undefined) {
this.unicodeEmoji = data.unicode_emoji ?? null;
}
this.tags = {
availableForPurchase: data.tags?.available_for_purchase === null,
guildConnections: data.tags?.guild_connections === null,
botID: data.tags?.bot_id,
integrationID: data.tags?.integration_id,
premiumSubscriber: data.tags?.premium_subscriber === null,
subscriptionListingID: data.tags?.subscription_listing_id
};
}
/** The guild this role is in. This will throw an error if the guild is not cached. */
get guild() {
this._cachedGuild ??= this.client.guilds.get(this.guildID);
if (!this._cachedGuild) {
if (this.client.options.restMode) {
throw new Errors_1.UncachedError(`${this.constructor.name}#guild is not present when rest mode is enabled.`);
}
if (!this.client.shards.connected) {
throw new Errors_1.UncachedError(`${this.constructor.name}#guild is not present without a gateway connection.`);
}
throw new Errors_1.UncachedError(`${this.constructor.name}#guild is not present.`);
}
return this._cachedGuild;
}
/** A string that will mention this role. */
get mention() {
return `<@&${this.id}>`;
}
/**
* Delete this role.
* @param reason The reason for deleting the role.
*/
async delete(reason) {
return this.client.rest.guilds.deleteRole(this.guildID, this.id, reason);
}
/**
* Edit this role.
* @param options The options for editing the role.
*/
async edit(options) {
return this.client.rest.guilds.editRole(this.guildID, this.id, options);
}
toJSON() {
return {
...super.toJSON(),
color: this.color,
colors: this.colors,
guildID: this.guildID,
hoist: this.hoist,
icon: this.icon,
managed: this.managed,
mentionable: this.mentionable,
name: this.name,
permissions: this.permissions.toJSON(),
position: this.position,
tags: this.tags,
unicodeEmoji: this.unicodeEmoji
};
}
}
exports.default = Role;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm9sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmVzL1JvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUJBQW1CO0FBQ25CLDBEQUEwQjtBQUMxQixzRUFBc0M7QUFLdEMsMkNBQStDO0FBRS9DLG9DQUFvQztBQUNwQyxNQUFxQixJQUFLLFNBQVEsY0FBSTtJQUMxQixZQUFZLENBQVM7SUFDN0I7OztPQUdHO0lBQ0gsS0FBSyxDQUFTO0lBQ2QsK0JBQStCO0lBQy9CLE1BQU0sQ0FBYTtJQUNuQiw4REFBOEQ7SUFDOUQsS0FBSyxDQUFTO0lBQ2QsMkNBQTJDO0lBQzNDLE9BQU8sQ0FBUztJQUNoQiwrQkFBK0I7SUFDL0IsS0FBSyxDQUFVO0lBQ2YsaUNBQWlDO0lBQ2pDLElBQUksQ0FBZ0I7SUFDcEIsaURBQWlEO0lBQ2pELE9BQU8sQ0FBVTtJQUNqQixnREFBZ0Q7SUFDaEQsV0FBVyxDQUFVO0lBQ3JCLDZCQUE2QjtJQUM3QixJQUFJLENBQVM7SUFDYixvQ0FBb0M7SUFDcEMsV0FBVyxDQUFhO0lBQ3hCLGlDQUFpQztJQUNqQyxRQUFRLENBQVM7SUFDakIsdUhBQXVIO0lBQ3ZILElBQUksQ0FBWTtJQUNoQixzQ0FBc0M7SUFDdEMsWUFBWSxDQUFnQjtJQUM1QixZQUFZLElBQWEsRUFBRSxNQUFjLEVBQUUsT0FBZTtRQUN0RCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNWLFlBQVksRUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWE7WUFDekMsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZTtZQUMzQyxhQUFhLEVBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjO1NBQzdDLENBQUM7UUFDRixJQUFJ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