UNPKG

oceanic.js

Version:

A NodeJS library for interfacing with Discord.

584 lines 49.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); /** @module REST/ApplicationCommands */ const Routes = tslib_1.__importStar(require("../util/Routes")); const ApplicationCommand_1 = tslib_1.__importDefault(require("../structures/ApplicationCommand")); const SKU_1 = tslib_1.__importDefault(require("../structures/SKU")); const Entitlement_1 = tslib_1.__importDefault(require("../structures/Entitlement")); const TestEntitlement_1 = tslib_1.__importDefault(require("../structures/TestEntitlement")); const ClientApplication_1 = tslib_1.__importDefault(require("../structures/ClientApplication")); const Application_1 = tslib_1.__importDefault(require("../structures/Application")); const Subscription_1 = tslib_1.__importDefault(require("../structures/Subscription")); const QueryBuilder_1 = tslib_1.__importDefault(require("../util/QueryBuilder")); /** Various methods for interacting with application commands. Located at {@link Client#rest | Client#rest}{@link RESTManager#applications | .applications}. */ class Applications { _manager; constructor(manager) { this._manager = manager; } /** * Overwrite all existing global application commands. * @param applicationID The ID of the application. * @param options The commands. * @caching This method **does not** cache its result. */ async bulkEditGlobalCommands(applicationID, options) { const opts = options; return this._manager.authRequest({ method: "PUT", path: Routes.APPLICATION_COMMANDS(applicationID), json: opts.map(opt => ({ contexts: opt.contexts, description: opt.description, default_member_permissions: opt.defaultMemberPermissions, description_localizations: opt.descriptionLocalizations, dm_permission: opt.dmPermission, handler: opt.handler, integration_types: opt.integrationTypes, name: opt.name, name_localizations: opt.nameLocalizations, nsfw: opt.nsfw, options: opt.options?.map(o => this._manager.client.util.optionToRaw(o)), type: opt.type })) }).then(data => data.map(d => new ApplicationCommand_1.default(d, this._manager.client))); } /** * Overwrite all existing application commands in a guild. * @param applicationID The ID of the application. * @param guildID The ID of the guild. * @param options The commands. * @caching This method **does not** cache its result. */ async bulkEditGuildCommands(applicationID, guildID, options) { const opts = this._manager.client.util._freeze(options); return this._manager.authRequest({ method: "PUT", path: Routes.GUILD_APPLICATION_COMMANDS(applicationID, guildID), json: opts.map(opt => ({ id: opt.id, default_member_permissions: opt.defaultMemberPermissions, description: opt.description, description_localizations: opt.descriptionLocalizations, dm_permission: opt.dmPermission, name: opt.name, name_localizations: opt.nameLocalizations, nsfw: opt.nsfw, options: opt.options?.map(o => this._manager.client.util.optionToRaw(o)), type: opt.type })) }).then(data => data.map(d => new ApplicationCommand_1.default(d, this._manager.client))); } /** * Mark an entitlement as consumed. * @param applicationID The ID of the application to the entitlement is for. * @param entitlementID The ID of the entitlement to consume. */ async consumeEntitlement(applicationID, entitlementID) { await this._manager.authRequest({ method: "POST", path: Routes.CONSUME_ENTITLEMENT(applicationID, entitlementID) }); } /** * Create an emoji for an application. * @param applicationID The ID of the application. * @param options The options for creating the emoji. * @caching This method **does not** cache its result. */ async createEmoji(applicationID, options) { options = this._manager.client.util._freeze(options); let image; if (options.image) { image = this._manager.client.util._convertImage(options.image, "image"); } return this._manager.authRequest({ method: "POST", path: Routes.APPLICATION_EMOJIS(applicationID), json: { name: options.name, image } }).then(emoji => this._manager.client.util.convertApplicationEmoji(emoji)); } /** * Create a global application command. * @param applicationID The ID of the application. * @param options The options for the command. * @caching This method **does not** cache its result. */ async createGlobalCommand(applicationID, options) { const opt = this._manager.client.util._freeze(options); return this._manager.authRequest({ method: "POST", path: Routes.APPLICATION_COMMANDS(applicationID), json: { contexts: opt.contexts, default_member_permissions: opt.defaultMemberPermissions, description_localizations: opt.descriptionLocalizations, description: opt.description, dm_permission: opt.dmPermission, handler: opt.handler, integration_types: opt.integrationTypes, name_localizations: opt.nameLocalizations, name: opt.name, nsfw: opt.nsfw, options: opt.options?.map(o => this._manager.client.util.optionToRaw(o)), type: opt.type } }).then(data => new ApplicationCommand_1.default(data, this._manager.client)); } /** * Create a guild application command. * @param applicationID The ID of the application. * @param guildID The ID of the guild. * @param options The options for the command. * @caching This method **does not** cache its result. */ async createGuildCommand(applicationID, guildID, options) { const opt = this._manager.client.util._freeze(options); return this._manager.authRequest({ method: "POST", path: Routes.GUILD_APPLICATION_COMMANDS(applicationID, guildID), json: { default_member_permissions: opt.defaultMemberPermissions, description: opt.description, description_localizations: opt.descriptionLocalizations, dm_permission: opt.dmPermission, name: opt.name, name_localizations: opt.nameLocalizations, nsfw: opt.nsfw, options: opt.options?.map(o => this._manager.client.util.optionToRaw(o)), type: opt.type } }).then(data => new ApplicationCommand_1.default(data, this._manager.client)); } /** * Create a test entitlement. * @param applicationID The ID of the application to create the entitlement for. * @param options The options for creating the test entitlement. */ async createTestEntitlement(applicationID, options) { options = this._manager.client.util._freeze(options); return this._manager.authRequest({ method: "POST", path: Routes.ENTITLEMENTS(applicationID), json: { owner_id: options.ownerID, owner_type: options.ownerType, sku_id: options.skuID } }).then(data => new TestEntitlement_1.default(data, this._manager.client)); } /** * Delete an emoji for an application. * @param applicationID The ID of the application. * @param emojiID The ID of the emoji to be deleted. * @caching This method **does not** cache its result. */ async deleteEmoji(applicationID, emojiID) { await this._manager.authRequest({ method: "DELETE", path: Routes.APPLICATION_EMOJI(applicationID, emojiID) }); } /** * Delete a global application command. * @param applicationID The ID of the application. * @param commandID The ID the command to delete. * @caching This method **does not** cache its result. */ async deleteGlobalCommand(applicationID, commandID) { await this._manager.authRequest({ method: "DELETE", path: Routes.APPLICATION_COMMAND(applicationID, commandID) }); } /** * Delete a guild application command. * @param applicationID The ID of the application. * @param guildID The ID of the guild. * @param commandID The ID of the command to delete. * @caching This method **does not** cache its result. */ async deleteGuildCommand(applicationID, guildID, commandID) { await this._manager.authRequest({ method: "DELETE", path: Routes.GUILD_APPLICATION_COMMAND(applicationID, guildID, commandID) }); } /** * Delete an entitlement. * @param applicationID The ID of the application to delete the entitlement from. * @param entitlementID The ID of the entitlement to delete. */ async deleteTestEntitlement(applicationID, entitlementID) { await this._manager.authRequest({ method: "DELETE", path: Routes.ENTITLEMENT(applicationID, entitlementID) }); } /** * Edit the currently authenticated bot's application info. * @param options The options for editing the application. * @caching This method **does not** cache its result. */ async editCurrent(options) { options = this._manager.client.util._freeze(options); let coverImage, icon; if (options.coverImage) { coverImage = this._manager.client.util._convertImage(options.coverImage, "cover image"); } if (options.icon) { icon = this._manager.client.util._convertImage(options.icon, "icon"); } return this._manager.authRequest({ method: "PATCH", path: Routes.APPLICATION, json: { cover_image: coverImage, custom_install_url: options.customInstallURL, description: options.description, event_webhooks_status: options.eventWebhooksStatus, event_webhooks_types: options.eventWebhooksTypes, event_webhooks_url: options.eventWebhooksURL, flags: options.flags, icon, install_params: options.installParams, integration_types_config: options.integrationTypesConfig, interactions_endpoint_url: options.interactionsEndpointURL, role_connections_verification_url: options.roleConnectionsVerificationURL, tags: options.tags } }).then(data => new Application_1.default(data, this._manager.client)); } /** * Edit an existing emoji for an application. * @param applicationID The ID of the application. * @param emojiID The ID of the emoji to be edited. * @param options The options for editing the emoji. * @caching This method **does not** cache its result. */ async editEmoji(applicationID, emojiID, options) { options = this._manager.client.util._freeze(options); return this._manager.authRequest({ method: "PATCH", path: Routes.APPLICATION_EMOJI(applicationID, emojiID), json: { name: options.name } }).then(emoji => this._manager.client.util.convertApplicationEmoji(emoji)); } /** * Edit a global application command. * @param applicationID The ID of the application. * @param commandID The ID of the command to edit. * @param options The options for editing the command. * @caching This method **does not** cache its result. */ async editGlobalCommand(applicationID, commandID, options) { const opt = this._manager.client.util._freeze(options); return this._manager.authRequest({ method: "PATCH", path: Routes.APPLICATION_COMMAND(applicationID, commandID), json: { contexts: opt.contexts, default_member_permissions: opt.defaultMemberPermissions, description: opt.description, description_localizations: opt.descriptionLocalizations, dm_permission: opt.dmPermission, integration_types: opt.integrationTypes, name: opt.name, name_localizations: opt.nameLocalizations, nsfw: opt.nsfw, options: opt.options?.map(o => this._manager.client.util.optionToRaw(o)) } }).then(data => new ApplicationCommand_1.default(data, this._manager.client)); } /** * Edit a guild application command. * @param applicationID The ID of the application. * @param guildID The ID of the guild. * @param commandID The ID of the command to edit. * @param options The options for editing the command. * @caching This method **does not** cache its result. */ async editGuildCommand(applicationID, guildID, commandID, options) { const opt = this._manager.client.util._freeze(options); return this._manager.authRequest({ method: "PATCH", path: Routes.GUILD_APPLICATION_COMMAND(applicationID, guildID, commandID), json: { default_member_permissions: opt.defaultMemberPermissions, description: opt.description, description_localizations: opt.descriptionLocalizations, dm_permission: opt.dmPermission, name: opt.name, name_localizations: opt.nameLocalizations, nsfw: opt.nsfw, options: opt.options?.map(o => this._manager.client.util.optionToRaw(o)) } }).then(data => new ApplicationCommand_1.default(data, this._manager.client)); } /** * Edit a guild application command's permissions. This requires a bearer token with the `applications.commands.permissions.update` scope. * @param applicationID The ID of the application. * @param guildID The ID of the guild. * @param commandID The ID of the command. * @param options The options for editing the permissions. * @caching This method **does not** cache its result. */ async editGuildCommandPermissions(applicationID, guildID, commandID, options) { options = this._manager.client.util._freeze(options); return (options.accessToken ? this._manager.request.bind(this._manager) : this._manager.authRequest.bind(this._manager))({ method: "PATCH", path: Routes.GUILD_APPLICATION_COMMAND_PERMISSION(applicationID, guildID, commandID), json: { permissions: options.permissions }, auth: options.accessToken }).then(data => { const d = data; return { applicationID: d.application_id, guildID: d.guild_id, id: d.id, permissions: d.permissions }; }); } /** * Get an activity instance. * @param applicationID The ID of the application. * @param instanceID The ID of the instance. */ async getActivityInstance(applicationID, instanceID) { return this._manager.authRequest({ method: "GET", path: Routes.APPLICATION_ACTIVITY_INSTANCE(applicationID, instanceID) }).then(data => ({ applicationID: data.application_id, instanceID: data.instance_id, launchID: data.launch_id, location: { channelID: data.location.channel_id, guildID: data.location.guild_id, id: data.location.id, kind: data.location.kind }, users: data.users })); } /** * Get the currently authenticated bot's application info as a bare {@link ClientApplication | ClientApplication}. * @caching This method **does not** cache its result. */ async getClient() { return this._manager.authRequest({ method: "GET", path: Routes.APPLICATION }).then(data => new ClientApplication_1.default(data, this._manager.client)); } /** * Get the currently authenticated bot's application info. * @caching This method **does not** cache its result. */ async getCurrent() { return this._manager.authRequest({ method: "GET", path: Routes.APPLICATION }).then(data => new Application_1.default(data, this._manager.client)); } /** * Get an emoji for an application. * @param applicationID The ID of the application to get the emojis of. * @param emojiID The ID of the emoji to get. * @caching This method **does not** cache its result. */ async getEmoji(applicationID, emojiID) { return this._manager.authRequest({ method: "GET", path: Routes.APPLICATION_EMOJI(applicationID, emojiID) }).then(emoji => this._manager.client.util.convertApplicationEmoji(emoji)); } /** * Get the emojis for an application. * @param applicationID The ID of the application to get the emojis of. * @caching This method **does not** cache its result. */ async getEmojis(applicationID) { return this._manager.authRequest({ method: "GET", path: Routes.APPLICATION_EMOJIS(applicationID) }).then(({ items }) => ({ items: items.map(item => this._manager.client.util.convertApplicationEmoji(item)) })); } /** * Get the entitlements for an application. * @param applicationID The ID of the application to get the entitlements of. * @param options The options for getting the entitlements. */ async getEntitlements(applicationID, options = {}) { options = this._manager.client.util._freeze(options); const query = new QueryBuilder_1.default(); query.setIfPresent("after", options.after); query.setIfPresent("before", options.before); query.setIfPresent("exclude_deleted", options.excludeDeleted); query.setIfPresent("exclude_ended", options.excludeEnded); query.setIfPresent("guild_id", options.guildID); query.setIfPresent("limit", options.limit); query.setIfPresent("sku_ids", options.skuIDs?.join(",")); query.setIfPresent("user_id", options.userID); return this._manager.authRequest({ method: "GET", path: Routes.ENTITLEMENTS(applicationID), query }).then(data => data.map(d => "subscription_id" in d && d.subscription_id ? new Entitlement_1.default(d, this._manager.client) : new TestEntitlement_1.default(d, this._manager.client))); } /** * Get a global application command. * @param applicationID The ID of the application. * @param commandID The ID of the command. * @param options The options for getting the command. * @caching This method **does not** cache its result. */ async getGlobalCommand(applicationID, commandID, options) { options = this._manager.client.util._freeze(options); const query = new QueryBuilder_1.default(); query.setIfPresent("with_localizations", options?.withLocalizations); return this._manager.authRequest({ method: "GET", path: Routes.APPLICATION_COMMAND(applicationID, commandID), query, headers: options?.locale === undefined ? undefined : { "X-Discord-Locale": options.locale } }).then(data => new ApplicationCommand_1.default(data, this._manager.client)); } /** * Get an application's global commands. * @param applicationID The ID of the application. * @param options The options for getting the command. * @caching This method **does not** cache its result. */ async getGlobalCommands(applicationID, options) { options = this._manager.client.util._freeze(options); const query = new QueryBuilder_1.default(); query.setIfPresent("with_localizations", options?.withLocalizations); return this._manager.authRequest({ method: "GET", path: Routes.APPLICATION_COMMANDS(applicationID), query, headers: options?.locale === undefined ? undefined : { "X-Discord-Locale": options.locale } }).then(data => data.map(d => new ApplicationCommand_1.default(d, this._manager.client))); } /** * Get a global application command. * @param applicationID The ID of the application. * @param guildID The ID of the guild. * @param commandID The ID of the command. * @param options The options for getting the command. * @caching This method **does not** cache its result. */ async getGuildCommand(applicationID, guildID, commandID, options) { options = this._manager.client.util._freeze(options); const query = new QueryBuilder_1.default(); query.setIfPresent("with_localizations", options?.withLocalizations); return this._manager.authRequest({ method: "GET", path: Routes.GUILD_APPLICATION_COMMAND(applicationID, commandID, guildID), query, headers: options?.locale === undefined ? undefined : { "X-Discord-Locale": options.locale } }).then(data => new ApplicationCommand_1.default(data, this._manager.client)); } /** * Get an application's application commands in a specific guild. * @param applicationID The ID of the application. * @param guildID The ID of the guild. * @param options The options for getting the command. * @caching This method **does not** cache its result. */ async getGuildCommands(applicationID, guildID, options) { options = this._manager.client.util._freeze(options); const query = new QueryBuilder_1.default(); query.setIfPresent("with_localizations", options?.withLocalizations); return this._manager.authRequest({ method: "GET", path: Routes.GUILD_APPLICATION_COMMANDS(applicationID, guildID), query, headers: options?.locale === undefined ? undefined : { "X-Discord-Locale": options.locale } }).then(data => data.map(d => new ApplicationCommand_1.default(d, this._manager.client))); } /** * Get an application command's permissions in a guild. * @param applicationID The ID of the application. * @param guildID The ID of the guild. * @param commandID The ID of the command. * @caching This method **does not** cache its result. */ async getGuildPermission(applicationID, guildID, commandID) { return this._manager.authRequest({ method: "GET", path: Routes.GUILD_APPLICATION_COMMAND_PERMISSION(applicationID, guildID, commandID) }).then(data => ({ applicationID: data.application_id, guildID: data.guild_id, id: data.id, permissions: data.permissions })); } /** * Get the permissions for all application commands in a guild. * @param applicationID The ID of the application. * @param guildID The ID of the guild. * @caching This method **does not** cache its result. */ async getGuildPermissions(applicationID, guildID) { return this._manager.authRequest({ method: "GET", path: Routes.GUILD_APPLICATION_COMMAND_PERMISSIONS(applicationID, guildID) }).then(data => data.map(d => ({ applicationID: d.application_id, guildID: d.guild_id, id: d.id, permissions: d.permissions }))); } /** * Get the subscription for an SKU. * @param skuID The ID of the SKU to get the subscription of. * @param subscriptionID The ID of the subscription to get. */ async getSKUSubscription(skuID, subscriptionID) { return this._manager.authRequest({ method: "GET", path: Routes.SKU_SUBSCRIPTION(skuID, subscriptionID) }).then(data => new Subscription_1.default(data, this._manager.client)); } /** * Get the subscriptions for an SKU. * @param skuID The ID of the SKU to get the subscriptions of. * @param options The options for getting the subscriptions. */ async getSKUSubscriptions(skuID, options) { options = this._manager.client.util._freeze(options); const query = new QueryBuilder_1.default(); query.setIfPresent("after", options.after); query.setIfPresent("before", options.before); query.setIfPresent("limit", options.limit); query.setIfPresent("user_id", options.userID); return this._manager.authRequest({ method: "GET", path: Routes.SKU_SUBSCRIPTIONS(skuID), query }).then(data => data.map(d => new Subscription_1.default(d, this._manager.client))); } /** * Get the SKUs for an application. * @param applicationID The ID of the application to get the SKUs of. */ async getSKUs(applicationID) { return this._manager.authRequest({ method: "GET", path: Routes.SKUS(applicationID) }).then(data => data.map(d => new SKU_1.default(d, this._manager.client))); } } exports.default = Applications; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwbGljYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3JvdXRlcy9BcHBsaWNhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQXVDO0FBQ3ZDLCtEQUF5QztBQXFCekMsa0dBQWtFO0FBR2xFLG9FQUFvQztBQUNwQyxvRkFBb0Q7QUFDcEQsNEZBQTREO0FBQzVELGdHQUFnRTtBQWlCaEUsb0ZBQW9EO0FBQ3BELHNGQUFzRDtBQUN0RCxnRkFBZ0Q7QUFFaEQsK0pBQStKO0FBQy9KLE1BQXFCLFlBQVk7SUFDckIsUUFBUSxDQUFjO0lBQzlCLFlBQVksT0FBb0I7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQixDQUFDLGFBQXFCLEVBQUUsT0FBK0M7UUFDL0YsTUFBTSxJQUFJLEdBQUcsT0FBMEQsQ0FBQztRQUN4RSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUErQjtZQUMzRCxNQUFNLEVBQUUsS0FBSztZQUNiLElBQUksRUFBSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDO1lBQ2xELElBQUksRUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckIsUUFBUSxFQUFvQixHQUFHLENBQUMsUUFBUTtnQkFDeEMsV0FBVyxFQUFpQixHQUFHLENBQUMsV0FBVztnQkFDM0MsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLHdCQUF3QjtnQkFDeEQseUJBQXlCLEVBQUcsR0FBRyxDQUFDLHdCQUF3QjtnQkFDeEQsYUFBYSxFQUFlLEdBQUcsQ0FBQyxZQUFZO2dCQUM1QyxPQUFPLEVBQXNCLEdBQW1FLENBQUMsT0FBTztnQkFDeEcsaUJBQWlCLEVBQVcsR0FBRyxDQUFDLGdCQUFnQjtnQkFDaEQsSUFBSSxFQUF3QixHQUFHLENBQUMs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