oceanic.js
Version:
A NodeJS library for interfacing with Discord.
193 lines • 15.4 kB
JavaScript
"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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