Skip to content

Discord.Net library to automatically create slash commands from JSON files and slash comand routing.

Notifications You must be signed in to change notification settings

moeux/AutoCommand

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AutoCommand

AutoCommand is an extension library for the Discord.Net wrapper enabling to automatically add slash commands to your bot through JSON files. Additionaly it provides a basic slash command routing implementation.

Slash Command Creation

AutoCommand adds an extension method to the Discord client, which takes care of the slash command creation:

var client = ...;

await client.CreateSlashCommandsAsync("path/to/commands");

Slash Command Configuration

A slash command has following structure (not all fields are required):

{
  "name": "kick",
  "description": "Kick user",
  "isDefaultPermission": true,
  "isNsfw": false,
  -- NOTE: Only add a guild ID if you intend to create a guild slash command instead of a global one -- 
  "guildId": <guildId>,
  "defaultMemberPermissions": [
    "KickMembers"
  ],
  "integrationTypes": [
    "GuildInstall"
  ],
  "contextTypes": [
    "Guild"
  ],
  "options": [
    <COMMAND_OPTION>
  ],
  "nameLocalizations": {
    "en-US": "kick"
  },
  "descriptionLocalizations": {
    "en-US": "Kick user"
  }
}

Note

defaultMemberPermissions, integrationTypes and contextTypes values can be looked up in the Discord.Net library under GuildPermission, ApplicationIntegrationType and InteractionContextType respectively

Slash Command Option Configuration

A slash command option has following structure (not all fields are required):

{
  "name": "user",
  "description": "The user to kick",
  "type": "User",
  "isRequired": true,
  "isDefault": true,
  "isAutoComplete": false,
  -- NOTE: Not needed here, included for completeness --
  "minValue": 1,
  "maxValue": 2,
  "minLength": 1,
  "maxLength": 2,
  -- NOTE: Only useful if type == Channel -- 
  "channelTypes": [
    "Text", "DM"
  ],
  "options": [
    <COMMAND_OPTION>
  ],
  "choices": [
    <COMMAND_CHOICE>
  ],
  "nameLocalizations": {
    "en-US": "user"
  },
  "descriptionLocalizations": {
    "en-US": "The user to kick"
  }
}

Note

type and channelTypes values can be looked up in the Discord.Net library under ApplicationCommandOptionType and ChannelType respectively

Slash Command Choice Configuration

A slash command choice has following structure (localizations are not required):

{
  "name": "choice",
  "value": "value",
  "nameLocalizations": {
    "en-US": "choice"
  }
}

Slash Command Routing

You can use the DefaultCommandRouter to register command handlers:

var client = ...;
var commandRouter = new DefaultCommandRouter();

commandRouter.Register(new MyCommandHandler());

client.SlashCommandExecuted += command => commandRouter.HandleAsync(command);

Creating Command Handler

In order to create a custom command handler, you have to implement the ICommandHandler interface and register it on the command router as shown above:

public class MyCommandHandler : ICommandHandler
{
    public string CommandName => "mycommand";

    public async Task HandleAsync(ILogger logger, SocketSlashCommand command)
    {
        // Handle command ...

        logger.Information("Handling command!");
        await command.RespondAsync("beep!");
    }
}

About

Discord.Net library to automatically create slash commands from JSON files and slash comand routing.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages