UNPKG

oceanic.js

Version:

A NodeJS library for interfacing with Discord.

193 lines 15.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); /** @module User */ const Base_1 = tslib_1.__importDefault(require("./Base")); const Clan_1 = tslib_1.__importDefault(require("./Clan")); const Constants_1 = require("../Constants"); const Routes = tslib_1.__importStar(require("../util/Routes")); const Errors_1 = require("../util/Errors"); /** Represents a user. */ class User extends Base_1.default { /** The user's banner color. If this member was received via the gateway, this will never be present. */ accentColor; /** The user's avatar hash. */ avatar; /** The data for this user's avatar decoration. */ avatarDecorationData; /** The user's banner hash. If this member was received via the gateway, this will never be present. */ banner; /** If this user is a bot. */ bot; /** The primary clan this user is in. */ clan; /** The user's collectibles. */ collectibles; /** The 4 digits after this user's username, if they have not been migrated. If migrated, this will be a single "0". */ discriminator; /** The user's display name, if set. */ globalName; /** The user's public [flags](https://discord.com/developers/docs/resources/user#user-object-user-flags). */ publicFlags; /** If this user is an official discord system user. */ system; /** The user's username. */ username; constructor(data, client) { super(data.id, client); this.avatar = null; this.avatarDecorationData = null; this.bot = !!data.bot; this.clan = null; this.collectibles = null; this.discriminator = data.discriminator; this.globalName = data.global_name; this.publicFlags = 0; this.system = !!data.system; this.username = data.username; this.update(data); } update(data) { if (data.accent_color !== undefined) { this.accentColor = data.accent_color; } if (data.avatar !== undefined) { this.avatar = data.avatar; } if (data.avatar_decoration_data !== undefined) { this.avatarDecorationData = data.avatar_decoration_data ? { asset: data.avatar_decoration_data.asset, skuID: data.avatar_decoration_data.sku_id } : null; } if (data.banner !== undefined) { this.banner = data.banner; } if (data.collectibles !== undefined) { this.collectibles = data.collectibles ? { nameplate: data.collectibles.nameplate ? { asset: data.collectibles.nameplate.asset, label: data.collectibles.nameplate.label, palette: data.collectibles.nameplate.palette, skuID: data.collectibles.nameplate.sku_id } : undefined } : null; } if (data.discriminator !== undefined) { this.discriminator = data.discriminator; } if (data.global_name !== undefined) { this.globalName = data.global_name; } if (data.public_flags !== undefined) { this.publicFlags = data.public_flags; } if (data.username !== undefined) { this.username = data.username; } if (data.clan !== undefined) { this.clan = data.clan ? new Clan_1.default(data.clan, this.client) : null; } } /** The default avatar value of this user. */ get defaultAvatar() { if (this.isMigrated) { return Number(BigInt(this.id) >> 22n) % 6; } return Number(this.discriminator) % 5; } /** If this user has migrated to the new username system. */ get isMigrated() { return (this.discriminator === undefined || this.discriminator === "0"); } /** A string that will mention this user. */ get mention() { return `<@${this.id}>`; } /** This user's unique username, if migrated, else a combination of the user's username and discriminator. */ get tag() { if (this.isMigrated) { return this.username; } return `${this.username}#${this.discriminator}`; } /** * The url of this user's avatar decoration. This will always be a png. * Discord does not combine the decoration and their current avatar for you. This is ONLY the decoration. * @param size The dimensions of the image. */ avatarDecorationURL(size) { return this.avatarDecorationData ? this.client.util.formatImage(Routes.AVATAR_DECORATION(this.avatarDecorationData.asset), "png", size) : null; } /** * The url of this user's avatar (or default avatar, if they have not set an avatar). * @param format The format the url should be. * @param size The dimensions of the image. */ avatarURL(format, size) { return this.avatar === null ? this.defaultAvatarURL() : this.client.util.formatImage(Routes.USER_AVATAR(this.id, this.avatar), format, size); } /** * The url of this user's banner. * @param format The format the url should be. * @param size The dimensions of the image. */ bannerURL(format, size) { return this.banner ? this.client.util.formatImage(Routes.BANNER(this.id, this.banner), format, size) : null; } /** * Create a direct message with this user. */ async createDM() { return this.client.rest.channels.createDM(this.id); } /** * Create a test entitlement for this user. * @param skuID The ID of the SKU to create an entitlement for. * @param applicationID The ID of the application to create the entitlement for. If present, defaults to the logged in client's application id. */ async createTestEntitlement(skuID, applicationID) { if (applicationID === undefined && this.client["_application"] === undefined) { throw new Errors_1.UncachedError("Client#application is not present, you must provide an applicationID as a second argument. To not need to provide an ID, only call this after at least one shard is READY, or restMode is enabled."); } return this.client.rest.applications.createTestEntitlement(applicationID ?? this.client.application.id, { ownerID: this.id, ownerType: Constants_1.EntitlementOwnerTypes.USER, skuID }); } /** * The url of this user's default avatar. */ defaultAvatarURL() { return this.client.util.formatImage(Routes.EMBED_AVATAR(this.defaultAvatar), "png"); } /** * Get the entitlements for this guild. * @param options The options for getting the entitlements. */ async getEntitlements(options, applicationID) { if (applicationID === undefined && this.client["_application"] === undefined) { throw new Errors_1.UncachedError("Client#application is not present, you must provide an applicationID as a second argument. To not need to provide an ID, only call this after at least one shard is READY, or restMode is enabled."); } return this.client.rest.applications.getEntitlements(applicationID ?? this.client.application.id, { userID: this.id, ...options }); } toJSON() { return { ...super.toJSON(), accentColor: this.accentColor, avatar: this.avatar, avatarDecorationData: this.avatarDecorationData, banner: this.banner, bot: this.bot, collectibles: this.collectibles, discriminator: this.discriminator, globalName: this.globalName, publicFlags: this.publicFlags, system: this.system, username: this.username }; } } exports.default = User; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmVzL1VzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUJBQW1CO0FBQ25CLDBEQUEwQjtBQUkxQiwwREFBMEI7QUFDMUIsNENBQXVFO0FBQ3ZFLCtEQUF5QztBQUt6QywyQ0FBK0M7QUFFL0MseUJBQXlCO0FBQ3pCLE1BQXFCLElBQUssU0FBUSxjQUFJO0lBQ2xDLHdHQUF3RztJQUN4RyxXQUFXLENBQWlCO0lBQzVCLDhCQUE4QjtJQUM5QixNQUFNLENBQWdCO0lBQ3RCLGtEQUFrRDtJQUNsRCxvQkFBb0IsQ0FBOEI7SUFDbEQsdUdBQXVHO0lBQ3ZHLE1BQU0sQ0FBaUI7SUFDdkIsNkJBQTZCO0lBQzdCLEdBQUcsQ0FBVTtJQUNiLHdDQUF3QztJQUN4QyxJQUFJLENBQWM7SUFDbEIsK0JBQStCO0lBQy9CLFlBQVksQ0FBc0I7SUFDbEMsdUhBQXVIO0lBQ3ZILGFBQWEsQ0FBUztJQUN0Qix1Q0FBdUM7SUFDdkMsVUFBVSxDQUFnQjtJQUMxQiw0R0FBNEc7SUFDNUcsV0FBVyxDQUFTO0lBQ3BCLHVEQUF1RDtJQUN2RCxNQUFNLENBQVU7SUFDaEIsMkJBQTJCO0lBQzNCLFFBQVEsQ0FBUztJQUNqQixZQUFZLElBQWEsRUFBRSxNQUFjO1FBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUks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