Seemingly Random Command Registration Failures
Hello there, I created a basic command, however whenever the bot refreshes, the command registration almost always fails. And this most recent time, the command registered, and then after a refresh, it failed to register again.
Error:
Code:
2023-12-07 22:42:52 - ERROR - ApplicationCommandRegistries(BulkOverwrite) Failed to overwrite global application commands DiscordAPIError[50035]: Invalid Form Body
2023-12-07 22:42:52 - ERROR - 0.name[STRING_TYPE_REGEX]: String value did not match validation regex.
2023-12-07 22:42:52 - ERROR - at handleErrors (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@discordjs/rest/dist/index.js:722:13)
2023-12-07 22:42:52 - ERROR - at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
2023-12-07 22:42:52 - ERROR - at async SequentialHandler.runRequest (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@discordjs/rest/dist/index.js:1120:23)
2023-12-07 22:42:52 - ERROR - at async SequentialHandler.queueRequest (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@discordjs/rest/dist/index.js:953:14)
2023-12-07 22:42:52 - ERROR - at async _REST.request (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@discordjs/rest/dist/index.js:1266:22)
2023-12-07 22:42:52 - ERROR - at async ApplicationCommandManager.set (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/[email protected]/node_modules/discord.js/src/managers/ApplicationCommandManager.js:171:18)
2023-12-07 22:42:52 - ERROR - at async handleBulkOverwrite (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@sapphire/framework/dist/lib/utils/application-commands/ApplicationCommandRegistries.js:82:20)
2023-12-07 22:42:52 - ERROR - at async Object.handleRegistryAPICalls (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@sapphire/framework/dist/lib/utils/application-commands/ApplicationCommandRegistries.js:56:5)
2023-12-07 22:42:52 - ERROR - at async _CoreListener.run (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@sapphire/framework/dist/listeners/CoreReady.js:17:5)
2023-12-07 22:42:52 - ERROR - at async Object.fromAsync (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@sapphire/result/dist/index.js:613:22) {
2023-12-07 22:42:52 - ERROR - requestBody: [Object],
2023-12-07 22:42:52 - ERROR - rawError: [Object],
2023-12-07 22:42:52 - ERROR - code: 50035,
2023-12-07 22:42:52 - ERROR - status: 400,
2023-12-07 22:42:52 - ERROR - method: 'PUT',
2023-12-07 22:42:52 - ERROR - url: 'https://discord.com/api/v10/applications/1021449455628718120/commands'
2023-12-07 22:42:52 - ERROR - }
2023-12-07 22:42:52 - ERROR - ApplicationCommandRegistries(BulkOverwrite) Failed to overwrite global application commands DiscordAPIError[50035]: Invalid Form Body
2023-12-07 22:42:52 - ERROR - 0.name[STRING_TYPE_REGEX]: String value did not match validation regex.
2023-12-07 22:42:52 - ERROR - at handleErrors (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@discordjs/rest/dist/index.js:722:13)
2023-12-07 22:42:52 - ERROR - at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
2023-12-07 22:42:52 - ERROR - at async SequentialHandler.runRequest (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@discordjs/rest/dist/index.js:1120:23)
2023-12-07 22:42:52 - ERROR - at async SequentialHandler.queueRequest (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@discordjs/rest/dist/index.js:953:14)
2023-12-07 22:42:52 - ERROR - at async _REST.request (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@discordjs/rest/dist/index.js:1266:22)
2023-12-07 22:42:52 - ERROR - at async ApplicationCommandManager.set (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/[email protected]/node_modules/discord.js/src/managers/ApplicationCommandManager.js:171:18)
2023-12-07 22:42:52 - ERROR - at async handleBulkOverwrite (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@sapphire/framework/dist/lib/utils/application-commands/ApplicationCommandRegistries.js:82:20)
2023-12-07 22:42:52 - ERROR - at async Object.handleRegistryAPICalls (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@sapphire/framework/dist/lib/utils/application-commands/ApplicationCommandRegistries.js:56:5)
2023-12-07 22:42:52 - ERROR - at async _CoreListener.run (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@sapphire/framework/dist/listeners/CoreReady.js:17:5)
2023-12-07 22:42:52 - ERROR - at async Object.fromAsync (/home/ubuntu/bots/ef-bot/node_modules/.pnpm/@[email protected]/node_modules/@sapphire/result/dist/index.js:613:22) {
2023-12-07 22:42:52 - ERROR - requestBody: [Object],
2023-12-07 22:42:52 - ERROR - rawError: [Object],
2023-12-07 22:42:52 - ERROR - code: 50035,
2023-12-07 22:42:52 - ERROR - status: 400,
2023-12-07 22:42:52 - ERROR - method: 'PUT',
2023-12-07 22:42:52 - ERROR - url: 'https://discord.com/api/v10/applications/1021449455628718120/commands'
2023-12-07 22:42:52 - ERROR - }
import { ApplyOptions } from '@sapphire/decorators';
import { Command } from '@sapphire/framework';
import { ApplicationCommandType } from 'discord.js';
@ApplyOptions<Command.Options>({
description: 'Send the bug report template message to the user.'
})
export class UserCommand extends Command {
public constructor(context: Command.LoaderContext, options: Command.Options) {
super(context, { ...options });
}
public override registerApplicationCommands(registry: Command.Registry) {
registry.registerContextMenuCommand((builder) =>
builder //
.setName('bugtemplate')
.setType(ApplicationCommandType.Message)
);
}
// context menu command
public async contextMenuRun(interaction: Command.ContextMenuCommandInteraction) {
return await interaction.reply({ content: 'Hello', fetchReply: true });
}
}
import { ApplyOptions } from '@sapphire/decorators';
import { Command } from '@sapphire/framework';
import { ApplicationCommandType } from 'discord.js';
@ApplyOptions<Command.Options>({
description: 'Send the bug report template message to the user.'
})
export class UserCommand extends Command {
public constructor(context: Command.LoaderContext, options: Command.Options) {
super(context, { ...options });
}
public override registerApplicationCommands(registry: Command.Registry) {
registry.registerContextMenuCommand((builder) =>
builder //
.setName('bugtemplate')
.setType(ApplicationCommandType.Message)
);
}
// context menu command
public async contextMenuRun(interaction: Command.ContextMenuCommandInteraction) {
return await interaction.reply({ content: 'Hello', fetchReply: true });
}
}
Solution:Jump to solution
Ah issue was from an old issue in an old file that was still in the built files, so was still running
3 Replies
I see the "String value did not match validation regex." error, but the command name seems to be fine here, and it worked once before with that name.
Remove the constructor. You cannot have both a constructor and @ApplyOptions.
Other than that the validations that a context menu command name has to match are https://github.com/discordjs/discord.js/blob/main/packages/builders/src/interactions/contextMenuCommands/Assertions.ts#L6-L11
Solution
Ah issue was from an old issue in an old file that was still in the built files, so was still running