Manually Handling Interactions
This section talks about the manual building and responding to interactions. If you are using the interaction framework (highly recommended) this section does not apply to you.
Bad form Exception when I try to create my commands, why do I get this?
Bad form exceptions are thrown if the slash, user or message command builder has invalid values. The following options could resolve your error.
Is your command name lowercase?
If your command name is not lowercase, it is not seen as a valid command entry.
Avatar
is invalid; avatar
is valid.
Are your values below or above the required amount? (This also applies to message components)
Discord expects all values to be below maximum allowed. Going over this maximum amount of characters causes an exception.
Note
All maximum and minimum value requirements can be found in the Discord Developer Docs. For components, structure documentation is found here.
Is your subcommand branching correct?
Branching structure is covered properly here: xref:Guides.SlashCommands.SubCommand
There are many options for creating commands, which do I use?
private async Task ReadyAsync()
{
// pull your commands from some array, everyone has a different approach for this.
var commands = _builders.ToArray();
// write your list of commands globally in one go.
await _client.Rest.BulkOverwriteGlobalCommands(commands);
// write your array of commands to one guild in one go.
// You can do a foreach (... in _client.Guilds) approach to write to all guilds.
await _client.Rest.BulkOverwriteGuildCommands(commands, /* some guild ID */);
foreach (var c in commands)
{
// Create a global command, repeating usage for multiple commands.
await _client.Rest.CreateGlobalCommand(c);
// Create a guild command, repeating usage for multiple commands.
await _client.Rest.CreateGuildCommand(c, guildId);
}
}
Note
You can use bulkoverwrite even if there are no commands in guild, nor globally. The bulkoverwrite method disposes the old set of commands and replaces it with the new.