UNPKG

oceanic.js

Version:

A NodeJS library for interfacing with Discord.

179 lines 14.1 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 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.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.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, discriminator: this.discriminator, globalName: this.globalName, publicFlags: this.publicFlags, system: this.system, username: this.username }; } } exports.default = User; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmVzL1VzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUJBQW1CO0FBQ25CLDBEQUEwQjtBQUkxQiwwREFBMEI7QUFDMUIsNENBQXVFO0FBQ3ZFLCtEQUF5QztBQUt6QywyQ0FBK0M7QUFFL0MseUJBQXlCO0FBQ3pCLE1BQXFCLElBQUssU0FBUSxjQUFJO0lBQ2xDLHdHQUF3RztJQUN4RyxXQUFXLENBQWlCO0lBQzVCLDhCQUE4QjtJQUM5QixNQUFNLENBQWdCO0lBQ3RCLGtEQUFrRDtJQUNsRCxvQkFBb0IsQ0FBOEI7SUFDbEQsdUdBQXVHO0lBQ3ZHLE1BQU0sQ0FBaUI7SUFDdkIsNkJBQTZCO0lBQzdCLEdBQUcsQ0FBVTtJQUNiLHdDQUF3QztJQUN4QyxJQUFJLENBQWM7SUFDbEIsdUhBQXVIO0lBQ3ZILGFBQWEsQ0FBUztJQUN0Qix1Q0FBdUM7SUFDdkMsVUFBVSxDQUFnQjtJQUMxQiw0R0FBNEc7SUFDNUcsV0FBVyxDQUFTO0lBQ3BCLHVEQUF1RDtJQUN2RCxNQUFNLENBQVU7SUFDaEIsMkJBQTJCO0lBQzNCLFFBQVEsQ0FBUztJQUNqQixZQUFZLElBQWEsRUFBRSxNQUFjO1FBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25D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