mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-13 10:03:31 +01:00
fix(applicationcommandmanager): explicitly allow passing builders to methods (v13) (#8229)
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
const { isJSONEncodable } = require('@discordjs/builders');
|
||||||
const { Collection } = require('@discordjs/collection');
|
const { Collection } = require('@discordjs/collection');
|
||||||
const ApplicationCommandPermissionsManager = require('./ApplicationCommandPermissionsManager');
|
const ApplicationCommandPermissionsManager = require('./ApplicationCommandPermissionsManager');
|
||||||
const CachedManager = require('./CachedManager');
|
const CachedManager = require('./CachedManager');
|
||||||
@@ -54,6 +55,13 @@ class ApplicationCommandManager extends CachedManager {
|
|||||||
* @typedef {ApplicationCommand|Snowflake} ApplicationCommandResolvable
|
* @typedef {ApplicationCommand|Snowflake} ApplicationCommandResolvable
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* eslint-disable max-len */
|
||||||
|
/**
|
||||||
|
* Data that resolves to the data of an ApplicationCommand
|
||||||
|
* @typedef {ApplicationCommandData|APIApplicationCommand|SlashCommandBuilder|ContextMenuCommandBuilder} ApplicationCommandDataResolvable
|
||||||
|
*/
|
||||||
|
/* eslint-enable max-len */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Options used to fetch data from Discord
|
* Options used to fetch data from Discord
|
||||||
* @typedef {Object} BaseFetchOptions
|
* @typedef {Object} BaseFetchOptions
|
||||||
@@ -108,7 +116,7 @@ class ApplicationCommandManager extends CachedManager {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an application command.
|
* Creates an application command.
|
||||||
* @param {ApplicationCommandData|APIApplicationCommand} command The command
|
* @param {ApplicationCommandDataResolvable} command The command
|
||||||
* @param {Snowflake} [guildId] The guild's id to create this command in,
|
* @param {Snowflake} [guildId] The guild's id to create this command in,
|
||||||
* ignored when using a {@link GuildApplicationCommandManager}
|
* ignored when using a {@link GuildApplicationCommandManager}
|
||||||
* @returns {Promise<ApplicationCommand>}
|
* @returns {Promise<ApplicationCommand>}
|
||||||
@@ -130,7 +138,7 @@ class ApplicationCommandManager extends CachedManager {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets all the commands for this application or guild.
|
* Sets all the commands for this application or guild.
|
||||||
* @param {ApplicationCommandData[]|APIApplicationCommand[]} commands The commands
|
* @param {ApplicationCommandDataResolvable[]} commands The commands
|
||||||
* @param {Snowflake} [guildId] The guild's id to create the commands in,
|
* @param {Snowflake} [guildId] The guild's id to create the commands in,
|
||||||
* ignored when using a {@link GuildApplicationCommandManager}
|
* ignored when using a {@link GuildApplicationCommandManager}
|
||||||
* @returns {Promise<Collection<Snowflake, ApplicationCommand>>}
|
* @returns {Promise<Collection<Snowflake, ApplicationCommand>>}
|
||||||
@@ -160,7 +168,7 @@ class ApplicationCommandManager extends CachedManager {
|
|||||||
/**
|
/**
|
||||||
* Edits an application command.
|
* Edits an application command.
|
||||||
* @param {ApplicationCommandResolvable} command The command to edit
|
* @param {ApplicationCommandResolvable} command The command to edit
|
||||||
* @param {Partial<ApplicationCommandData|APIApplicationCommand>} data The data to update the command with
|
* @param {Partial<ApplicationCommandDataResolvable>} data The data to update the command with
|
||||||
* @param {Snowflake} [guildId] The guild's id where the command registered,
|
* @param {Snowflake} [guildId] The guild's id where the command registered,
|
||||||
* ignored when using a {@link GuildApplicationCommandManager}
|
* ignored when using a {@link GuildApplicationCommandManager}
|
||||||
* @returns {Promise<ApplicationCommand>}
|
* @returns {Promise<ApplicationCommand>}
|
||||||
@@ -207,11 +215,13 @@ class ApplicationCommandManager extends CachedManager {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Transforms an {@link ApplicationCommandData} object into something that can be used with the API.
|
* Transforms an {@link ApplicationCommandData} object into something that can be used with the API.
|
||||||
* @param {ApplicationCommandData|APIApplicationCommand} command The command to transform
|
* @param {ApplicationCommandDataResolvable} command The command to transform
|
||||||
* @returns {APIApplicationCommand}
|
* @returns {APIApplicationCommand}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
static transformCommand(command) {
|
static transformCommand(command) {
|
||||||
|
if (isJSONEncodable(command)) return command.toJSON();
|
||||||
|
|
||||||
let default_member_permissions;
|
let default_member_permissions;
|
||||||
|
|
||||||
if ('default_member_permissions' in command) {
|
if ('default_member_permissions' in command) {
|
||||||
@@ -241,3 +251,13 @@ class ApplicationCommandManager extends CachedManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = ApplicationCommandManager;
|
module.exports = ApplicationCommandManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @external SlashCommandBuilder
|
||||||
|
* @see {@link https://discord.js.org/#/docs/builders/main/class/SlashCommandBuilder}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @external ContextMenuCommandBuilder
|
||||||
|
* @see {@link https://discord.js.org/#/docs/builders/main/class/ContextMenuCommandBuilder}
|
||||||
|
*/
|
||||||
|
|||||||
15
typings/index.d.ts
vendored
15
typings/index.d.ts
vendored
@@ -3,13 +3,16 @@ import {
|
|||||||
bold,
|
bold,
|
||||||
channelMention,
|
channelMention,
|
||||||
codeBlock,
|
codeBlock,
|
||||||
|
ContextMenuCommandBuilder,
|
||||||
formatEmoji,
|
formatEmoji,
|
||||||
hideLinkEmbed,
|
hideLinkEmbed,
|
||||||
hyperlink,
|
hyperlink,
|
||||||
inlineCode,
|
inlineCode,
|
||||||
italic,
|
italic,
|
||||||
|
JSONEncodable,
|
||||||
quote,
|
quote,
|
||||||
roleMention,
|
roleMention,
|
||||||
|
SlashCommandBuilder,
|
||||||
spoiler,
|
spoiler,
|
||||||
strikethrough,
|
strikethrough,
|
||||||
time,
|
time,
|
||||||
@@ -3065,7 +3068,11 @@ export abstract class CachedManager<K, Holds, R> extends DataManager<K, Holds, R
|
|||||||
private _add(data: unknown, cache?: boolean, { id, extras }?: { id: K; extras: unknown[] }): Holds;
|
private _add(data: unknown, cache?: boolean, { id, extras }?: { id: K; extras: unknown[] }): Holds;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type ApplicationCommandDataResolvable = ApplicationCommandData | RESTPostAPIApplicationCommandsJSONBody;
|
export type ApplicationCommandDataResolvable =
|
||||||
|
| ApplicationCommandData
|
||||||
|
| RESTPostAPIApplicationCommandsJSONBody
|
||||||
|
| SlashCommandBuilder
|
||||||
|
| ContextMenuCommandBuilder;
|
||||||
|
|
||||||
export class ApplicationCommandManager<
|
export class ApplicationCommandManager<
|
||||||
ApplicationCommandScope = ApplicationCommand<{ guild: GuildResolvable }>,
|
ApplicationCommandScope = ApplicationCommand<{ guild: GuildResolvable }>,
|
||||||
@@ -3107,9 +3114,7 @@ export class ApplicationCommandManager<
|
|||||||
commands: ApplicationCommandDataResolvable[],
|
commands: ApplicationCommandDataResolvable[],
|
||||||
guildId: Snowflake,
|
guildId: Snowflake,
|
||||||
): Promise<Collection<Snowflake, ApplicationCommand>>;
|
): Promise<Collection<Snowflake, ApplicationCommand>>;
|
||||||
private static transformCommand(
|
private static transformCommand(command: ApplicationCommandDataResolvable): RESTPostAPIApplicationCommandsJSONBody;
|
||||||
command: ApplicationCommandData,
|
|
||||||
): Omit<APIApplicationCommand, 'id' | 'application_id' | 'guild_id'>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ApplicationCommandPermissionsManager<
|
export class ApplicationCommandPermissionsManager<
|
||||||
@@ -3178,7 +3183,7 @@ export class GuildApplicationCommandManager extends ApplicationCommandManager<Ap
|
|||||||
public delete(command: ApplicationCommandResolvable): Promise<ApplicationCommand | null>;
|
public delete(command: ApplicationCommandResolvable): Promise<ApplicationCommand | null>;
|
||||||
public edit(
|
public edit(
|
||||||
command: ApplicationCommandResolvable,
|
command: ApplicationCommandResolvable,
|
||||||
data: ApplicationCommandDataResolvable,
|
data: Partial<ApplicationCommandDataResolvable>,
|
||||||
): Promise<ApplicationCommand>;
|
): Promise<ApplicationCommand>;
|
||||||
public fetch(id: Snowflake, options?: FetchGuildApplicationCommandFetchOptions): Promise<ApplicationCommand>;
|
public fetch(id: Snowflake, options?: FetchGuildApplicationCommandFetchOptions): Promise<ApplicationCommand>;
|
||||||
public fetch(options: FetchGuildApplicationCommandFetchOptions): Promise<Collection<Snowflake, ApplicationCommand>>;
|
public fetch(options: FetchGuildApplicationCommandFetchOptions): Promise<Collection<Snowflake, ApplicationCommand>>;
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ import {
|
|||||||
} from '.';
|
} from '.';
|
||||||
import type { ApplicationCommandOptionTypes } from './enums';
|
import type { ApplicationCommandOptionTypes } from './enums';
|
||||||
import { expectAssignable, expectDeprecated, expectNotAssignable, expectNotType, expectType } from 'tsd';
|
import { expectAssignable, expectDeprecated, expectNotAssignable, expectNotType, expectType } from 'tsd';
|
||||||
|
import type { ContextMenuCommandBuilder, SlashCommandBuilder } from '@discordjs/builders';
|
||||||
|
|
||||||
// Test type transformation:
|
// Test type transformation:
|
||||||
declare const serialize: <T>(value: T) => Serialized<T>;
|
declare const serialize: <T>(value: T) => Serialized<T>;
|
||||||
@@ -128,6 +129,9 @@ const testUserId = '987654321098765432'; // example id
|
|||||||
const globalCommandId = '123456789012345678'; // example id
|
const globalCommandId = '123456789012345678'; // example id
|
||||||
const guildCommandId = '234567890123456789'; // example id
|
const guildCommandId = '234567890123456789'; // example id
|
||||||
|
|
||||||
|
declare const slashCommandBuilder: SlashCommandBuilder;
|
||||||
|
declare const contextMenuCommandBuilder: ContextMenuCommandBuilder;
|
||||||
|
|
||||||
client.on('ready', async () => {
|
client.on('ready', async () => {
|
||||||
console.log(`Client is logged in as ${client.user!.tag} and ready!`);
|
console.log(`Client is logged in as ${client.user!.tag} and ready!`);
|
||||||
|
|
||||||
@@ -144,6 +148,16 @@ client.on('ready', async () => {
|
|||||||
const guildCommandFromGlobal = await client.application?.commands.fetch(guildCommandId, { guildId: testGuildId });
|
const guildCommandFromGlobal = await client.application?.commands.fetch(guildCommandId, { guildId: testGuildId });
|
||||||
const guildCommandFromGuild = await client.guilds.cache.get(testGuildId)?.commands.fetch(guildCommandId);
|
const guildCommandFromGuild = await client.guilds.cache.get(testGuildId)?.commands.fetch(guildCommandId);
|
||||||
|
|
||||||
|
await client.application?.commands.create(slashCommandBuilder);
|
||||||
|
await client.application?.commands.create(contextMenuCommandBuilder);
|
||||||
|
await guild.commands.create(slashCommandBuilder);
|
||||||
|
await guild.commands.create(contextMenuCommandBuilder);
|
||||||
|
|
||||||
|
await client.application?.commands.edit(globalCommandId, slashCommandBuilder);
|
||||||
|
await client.application?.commands.edit(globalCommandId, contextMenuCommandBuilder);
|
||||||
|
await guild.commands.edit(guildCommandId, slashCommandBuilder);
|
||||||
|
await guild.commands.edit(guildCommandId, contextMenuCommandBuilder);
|
||||||
|
|
||||||
await client.application?.commands.edit(globalCommandId, { defaultMemberPermissions: null });
|
await client.application?.commands.edit(globalCommandId, { defaultMemberPermissions: null });
|
||||||
await globalCommand?.edit({ defaultMemberPermissions: null });
|
await globalCommand?.edit({ defaultMemberPermissions: null });
|
||||||
await globalCommand?.setDefaultMemberPermissions(null);
|
await globalCommand?.setDefaultMemberPermissions(null);
|
||||||
|
|||||||
Reference in New Issue
Block a user