'use strict'; const Team = require('./Team'); const Application = require('./interfaces/Application'); const ApplicationCommandManager = require('../managers/ApplicationCommandManager'); const ApplicationFlags = require('../util/ApplicationFlags'); /** * Represents a Client OAuth2 Application. * @extends {Application} */ class ClientApplication extends Application { constructor(client, data) { super(client, data); /** * The application command manager for this application * @type {ApplicationCommandManager} */ this.commands = new ApplicationCommandManager(this.client); } _patch(data) { super._patch(data); /** * The flags this application has * @type {ApplicationFlags} */ this.flags = 'flags' in data ? new ApplicationFlags(data.flags).freeze() : this.flags; /** * The hash of the application's cover image * @type {?string} */ this.cover = data.cover_image ?? this.cover ?? null; /** * The application's RPC origins, if enabled * @type {string[]} */ this.rpcOrigins = data.rpc_origins ?? this.rpcOrigins ?? []; /** * If this application's bot requires a code grant when using the OAuth2 flow * @type {?boolean} */ this.botRequireCodeGrant = data.bot_require_code_grant ?? this.botRequireCodeGrant ?? null; /** * If this application's bot is public * @type {?boolean} */ this.botPublic = data.bot_public ?? this.botPublic ?? null; /** * The owner of this OAuth application * @type {?(User|Team)} */ this.owner = data.team ? new Team(this.client, data.team) : data.owner ? this.client.users.add(data.owner) : this.owner ?? null; } /** * Whether this application is partial * @type {boolean} * @readonly */ get partial() { return !this.name; } /** * Obtains this application from Discord. * @returns {Promise} */ async fetch() { const app = await this.client.api.oauth2.applications('@me').get(); this._patch(app); return this; } } module.exports = ClientApplication;