Discord.Net/docs/guides/text_commands/preconditions.md
2024-06-13 17:43:59 +12:00

2.8 KiB

uid title
Guides.TextCommands.Preconditions Preconditions

Preconditions

Preconditions serve as a permissions system for your Commands. Keep in mind, however, that they are not limited to just permissions and can be as complex as you want them to be.

There are two types of Preconditions you can use:

You may visit their respective API documentation to find out more.

Bundled Preconditions

@Discord.Commands ships with several bundled Preconditions for you to use.

  • @Discord.Commands.RequireContextAttribute
  • @Discord.Commands.RequireOwnerAttribute
  • @Discord.Commands.RequireBotPermissionAttribute
  • @Discord.Commands.RequireUserPermissionAttribute
  • @Discord.Commands.RequireNsfwAttribute

Using Preconditions

To use a precondition, simply apply any valid precondition candidate to a command method signature as an attribute.

Example - Using a Precondition

[!code-csharpPrecondition usage]

ORing Preconditions

When writing commands, you may want to allow some of them to be executed when only some of the precondition checks are passed.

This is where the Group property of a precondition attribute comes in handy. By assigning two or more preconditions to a group, the command system will allow the command to be executed when one of the precondition passes.

Example - ORing Preconditions

[!code-csharpOR Precondition]

Custom Preconditions

To write your own Precondition, create a new class that inherits from either PreconditionAttribute or ParameterPreconditionAttribute depending on your use.

In order for your Precondition to function, you will need to override the CheckPermissionsAsync method.

If the context meets the required parameters, return PreconditionResult.FromSuccess, otherwise return PreconditionResult.FromError and include an error message if necessary.

Note

Visual Studio can help you implement missing members from the abstract class by using the "Implement Abstract Class" IntelliSense hint.

Example - Creating a Custom Precondition

[!code-csharpCustom Precondition]