@sapphire/framework
Version:
Discord bot framework built for advanced and amazing bots.
1 lines • 7.65 kB
Source Map (JSON)
{"version":3,"sources":["../../../../../src/lib/utils/application-commands/computeDifferences.ts"],"names":["casted","originalLocalizedNames","expectedLocalizedNames"],"mappings":"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","file":"computeDifferences.mjs","sourcesContent":["import {\n\tApplicationCommandType,\n\ttype RESTPostAPIApplicationCommandsJSONBody,\n\ttype RESTPostAPIChatInputApplicationCommandsJSONBody,\n\ttype RESTPostAPIContextMenuApplicationCommandsJSONBody\n} from 'discord-api-types/v10';\nimport type { InternalAPICall } from './ApplicationCommandRegistry';\nimport { contextMenuTypes, type CommandDifference } from './compute-differences/_shared';\nimport { checkDefaultMemberPermissions } from './compute-differences/default_member_permissions';\nimport { checkDescription } from './compute-differences/description';\nimport { checkDMPermission } from './compute-differences/dm_permission';\nimport { checkLocalizations } from './compute-differences/localizations';\nimport { checkName } from './compute-differences/name';\nimport { checkOptions } from './compute-differences/options';\nimport { checkIntegrationTypes } from './compute-differences/integration_types';\nimport { checkInteractionContextTypes } from './compute-differences/contexts';\n\n/**\n * @returns `true` if there are differences, `false` otherwise\n */\nexport function getCommandDifferencesFast(\n\texistingCommand: RESTPostAPIApplicationCommandsJSONBody,\n\tapiData: InternalAPICall['builtData'],\n\tguildCommand: boolean\n) {\n\tfor (const _ of getCommandDifferences(existingCommand, apiData, guildCommand)) {\n\t\t// Return immediately on first difference found (also means we skip all other checks)\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function* getCommandDifferences(\n\texistingCommand: RESTPostAPIApplicationCommandsJSONBody,\n\tapiData: InternalAPICall['builtData'],\n\tguildCommand: boolean\n): Generator<CommandDifference> {\n\tif (existingCommand.type !== ApplicationCommandType.ChatInput && existingCommand.type) {\n\t\t// Check context menus\n\t\tif (contextMenuTypes.includes(existingCommand.type ?? ApplicationCommandType.ChatInput)) {\n\t\t\tconst casted = apiData as RESTPostAPIContextMenuApplicationCommandsJSONBody;\n\n\t\t\t// Check name\n\t\t\tyield* checkName({ oldName: existingCommand.name, newName: casted.name });\n\n\t\t\t// Check dmPermission only for non-guild commands\n\t\t\tif (!guildCommand) {\n\t\t\t\tyield* checkDMPermission(existingCommand.dm_permission, casted.dm_permission);\n\t\t\t}\n\n\t\t\t// Check defaultMemberPermissions\n\t\t\tyield* checkDefaultMemberPermissions(existingCommand.default_member_permissions, casted.default_member_permissions);\n\n\t\t\t// Check localized names\n\t\t\tconst originalLocalizedNames = existingCommand.name_localizations;\n\t\t\tconst expectedLocalizedNames = casted.name_localizations;\n\n\t\t\tyield* checkLocalizations({\n\t\t\t\tlocaleMapName: 'nameLocalizations',\n\t\t\t\tlocalePresentMessage: 'localized names',\n\t\t\t\tlocaleMissingMessage: 'no localized names',\n\t\t\t\toriginalLocalizedDescriptions: originalLocalizedNames,\n\t\t\t\texpectedLocalizedDescriptions: expectedLocalizedNames\n\t\t\t});\n\n\t\t\t// Check integration types\n\t\t\tyield* checkIntegrationTypes(existingCommand.integration_types, casted.integration_types);\n\n\t\t\t// Check contexts\n\t\t\tyield* checkInteractionContextTypes(existingCommand.contexts, casted.contexts);\n\t\t}\n\n\t\treturn;\n\t}\n\n\tconst casted = apiData as RESTPostAPIChatInputApplicationCommandsJSONBody;\n\n\t// Check name\n\tyield* checkName({ oldName: existingCommand.name.toLowerCase(), newName: casted.name.toLowerCase() });\n\n\t// Check localized names\n\tconst originalLocalizedNames = existingCommand.name_localizations;\n\tconst expectedLocalizedNames = casted.name_localizations;\n\n\tyield* checkLocalizations({\n\t\tlocaleMapName: 'nameLocalizations',\n\t\tlocalePresentMessage: 'localized names',\n\t\tlocaleMissingMessage: 'no localized names',\n\t\toriginalLocalizedDescriptions: originalLocalizedNames,\n\t\texpectedLocalizedDescriptions: expectedLocalizedNames\n\t});\n\n\t// Check dmPermission\n\tif (!guildCommand) {\n\t\tyield* checkDMPermission(existingCommand.dm_permission, casted.dm_permission);\n\t}\n\n\t// Check defaultMemberPermissions\n\tyield* checkDefaultMemberPermissions(existingCommand.default_member_permissions, casted.default_member_permissions);\n\n\t// Check description\n\tyield* checkDescription({ oldDescription: existingCommand.description, newDescription: casted.description });\n\n\t// Check localized descriptions\n\tconst originalLocalizedDescriptions = existingCommand.description_localizations;\n\tconst expectedLocalizedDescriptions = casted.description_localizations;\n\n\tyield* checkLocalizations({\n\t\tlocaleMapName: 'descriptionLocalizations',\n\t\tlocalePresentMessage: 'localized descriptions',\n\t\tlocaleMissingMessage: 'no localized descriptions',\n\t\toriginalLocalizedDescriptions,\n\t\texpectedLocalizedDescriptions\n\t});\n\n\t// Check integration types\n\tyield* checkIntegrationTypes(existingCommand.integration_types, casted.integration_types);\n\n\t// Check contexts\n\tyield* checkInteractionContextTypes(existingCommand.contexts, casted.contexts);\n\n\tyield* checkOptions(existingCommand.options, casted.options);\n}\n"]}