UNPKG

discord.js

Version:

A powerful library for interacting with the Discord API

159 lines (140 loc) 3.48 kB
'use strict'; const { DiscordSnowflake } = require('@sapphire/snowflake'); const Base = require('../Base'); /** * Represents an OAuth2 Application. * @extends {Base} * @abstract */ class Application extends Base { constructor(client, data) { super(client); this._patch(data); } _patch(data) { /** * The application's id * @type {Snowflake} */ this.id = data.id; if ('name' in data) { /** * The name of the application * @type {?string} */ this.name = data.name; } else { this.name ??= null; } if ('description' in data) { /** * The application's description * @type {?string} */ this.description = data.description; } else { this.description ??= null; } if ('icon' in data) { /** * The application's icon hash * @type {?string} */ this.icon = data.icon; } else { this.icon ??= null; } if ('terms_of_service_url' in data) { /** * The URL of the application's terms of service * @type {?string} */ this.termsOfServiceURL = data.terms_of_service_url; } else { this.termsOfServiceURL ??= null; } if ('privacy_policy_url' in data) { /** * The URL of the application's privacy policy * @type {?string} */ this.privacyPolicyURL = data.privacy_policy_url; } else { this.privacyPolicyURL ??= null; } if ('rpc_origins' in data) { /** * The application's RPC origins, if enabled * @type {string[]} */ this.rpcOrigins = data.rpc_origins; } else { this.rpcOrigins ??= []; } if ('cover_image' in data) { /** * The hash of the application's cover image * @type {?string} */ this.cover = data.cover_image; } else { this.cover ??= null; } if ('verify_key' in data) { /** * The hex-encoded key for verification in interactions and the GameSDK's GetTicket * @type {?string} */ this.verifyKey = data.verify_key; } else { this.verifyKey ??= null; } } /** * The timestamp the application was created at * @type {number} * @readonly */ get createdTimestamp() { return DiscordSnowflake.timestampFrom(this.id); } /** * The time the application was created at * @type {Date} * @readonly */ get createdAt() { return new Date(this.createdTimestamp); } /** * A link to the application's icon. * @param {ImageURLOptions} [options={}] Options for the image URL * @returns {?string} */ iconURL(options = {}) { return this.icon && this.client.rest.cdn.appIcon(this.id, this.icon, options); } /** * A link to this application's cover image. * @param {ImageURLOptions} [options={}] Options for the image URL * @returns {?string} */ coverURL(options = {}) { return this.cover && this.client.rest.cdn.appIcon(this.id, this.cover, options); } /** * When concatenated with a string, this automatically returns the application's name instead of the * Application object. * @returns {?string} * @example * // Logs: Application name: My App * console.log(`Application name: ${application}`); */ toString() { return this.name; } toJSON() { return super.toJSON({ createdTimestamp: true }); } } module.exports = Application;