Files
discordeno/helpers/interactions/commands/upsertApplicationCommands.ts
2022-02-11 09:49:53 +00:00

40 lines
1.5 KiB
TypeScript

import type { ApplicationCommand } from "../../../types/interactions/commands/applicationCommand.ts";
import type { EditGlobalApplicationCommand } from "../../../types/interactions/commands/editGlobalApplicationCommand.ts";
import type { MakeRequired } from "../../../types/util.ts";
import type { Bot } from "../../../bot.ts";
import { Collection } from "../../../util/collection.ts";
import { makeOptionsForCommand } from "./createApplicationCommand.ts";
/**
* Bulk edit existing application commands. If a command does not exist, it will create it.
*
* **NOTE:** Any application commands that are not specified in this function will be **deleted**. If you don't provide the commandId and rename your command, the command gets a new Id.
*/
export async function upsertApplicationCommands(
bot: Bot,
options: MakeRequired<EditGlobalApplicationCommand, "name">[],
guildId?: bigint,
) {
const result = await bot.rest.runMethod<ApplicationCommand[]>(
bot.rest,
"put",
guildId
? bot.constants.endpoints.COMMANDS_GUILD(bot.applicationId, guildId)
: bot.constants.endpoints.COMMANDS(bot.applicationId),
options.map((option) => ({
name: option.name,
description: option.description,
type: option.type,
options: option.options ? makeOptionsForCommand(option.options) : undefined,
default_permission: option.defaultPermission,
})),
);
return new Collection(
result.map((res) => {
const command = bot.transformers.applicationCommand(bot, res);
return [command.id, command];
}),
);
}