From 7eec2e5d5bde7ce6b31555b57e5d050a3ac48c18 Mon Sep 17 00:00:00 2001 From: sadan4 <117494111+sadan4@users.noreply.github.com> Date: Fri, 21 Mar 2025 08:33:37 -0400 Subject: [PATCH] CommandsAPI: Fix issue with overlapping IDS (#3271) --- src/api/Commands/index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/api/Commands/index.ts b/src/api/Commands/index.ts index 2b7a4de6..af6a6fdf 100644 --- a/src/api/Commands/index.ts +++ b/src/api/Commands/index.ts @@ -31,6 +31,7 @@ export const commands = {} as Record; // hack for plugins being evaluated before we can grab these from webpack const OptPlaceholder = Symbol("OptionalMessageOption") as any as Option; const ReqPlaceholder = Symbol("RequiredMessageOption") as any as Option; + /** * Optional message option named "message" you can use in commands. * Used in "tableflip" or "shrug" @@ -44,11 +45,16 @@ export let OptionalMessageOption: Option = OptPlaceholder; */ export let RequiredMessageOption: Option = ReqPlaceholder; +// Discord's command list has random gaps for some reason, which can cause issues while rendering the commands +// Add this offset to every added command to keep them unique +let commandIdOffset: number; + export const _init = function (cmds: Command[]) { try { BUILT_IN = cmds; OptionalMessageOption = cmds.find(c => (c.untranslatedName || c.displayName) === "shrug")!.options![0]; RequiredMessageOption = cmds.find(c => (c.untranslatedName || c.displayName) === "me")!.options![0]; + commandIdOffset = Math.abs(BUILT_IN.map(x => Number(x.id)).sort((x, y) => x - y)[0]) - BUILT_IN.length; } catch (e) { new Logger("CommandsAPI").error("Failed to load CommandsApi", e, " - cmds is", cmds); } @@ -142,7 +148,7 @@ export function registerCommand(command: C, plugin: string) { command.isVencordCommand = true; command.untranslatedName ??= command.name; command.untranslatedDescription ??= command.description; - command.id ??= `-${BUILT_IN.length + 1}`; + command.id ??= `-${BUILT_IN.length + commandIdOffset + 1}`; command.applicationId ??= "-1"; // BUILT_IN; command.type ??= ApplicationCommandType.CHAT_INPUT; command.inputType ??= ApplicationCommandInputType.BUILT_IN_TEXT;