Browse Source

Fix headers in command guide & add mention of nullable types

pull/988/head
Hsu Still 7 years ago
parent
commit
3b88e5517a
No known key found for this signature in database GPG Key ID: 8601A145FDA95209
1 changed files with 29 additions and 32 deletions
  1. +29
    -32
      docs/guides/commands/commands.md

+ 29
- 32
docs/guides/commands/commands.md View File

@@ -8,7 +8,7 @@ title: Introduction to the Command Service
[Discord.Commands](xref:Discord.Commands) provides an attribute-based [Discord.Commands](xref:Discord.Commands) provides an attribute-based
command parser. command parser.


## Setup
## Get Started


To use Commands, you must create a [Command Service] and a command To use Commands, you must create a [Command Service] and a command
Handler. Handler.
@@ -29,7 +29,7 @@ values.


## With Attributes ## With Attributes


Starting from 1.0, Commands can be defined ahead of time with
Starting from 1.0, Commands can be defined ahead of time with
attributes, or at runtime with builders. attributes, or at runtime with builders.


For most bots, ahead-of-time Commands should be all you need, and this For most bots, ahead-of-time Commands should be all you need, and this
@@ -48,16 +48,16 @@ module instance is only as long as the command is being invoked.


> [!WARNING] > [!WARNING]
> **Avoid using long-running code** in your modules wherever possible. > **Avoid using long-running code** in your modules wherever possible.
> You should **not** be implementing very much logic into your
> You should **not** be implementing very much logic into your
> modules, instead, outsource to a service for that. > modules, instead, outsource to a service for that.
> >
> If you are unfamiliar with Inversion of Control, it is recommended
> If you are unfamiliar with Inversion of Control, it is recommended
> to read the MSDN article on [IoC] and [Dependency Injection]. > to read the MSDN article on [IoC] and [Dependency Injection].


>[!NOTE]
>[ModuleBase] is an _abstract_ class, meaning that you may extend it
>or override it as you see fit. Your module may inherit from any
>extension of ModuleBase.
> [!NOTE]
> [ModuleBase] is an _abstract_ class, meaning that you may extend it
> or override it as you see fit. Your module may inherit from any
> extension of ModuleBase.


To begin, create a new class somewhere in your project and inherit the To begin, create a new class somewhere in your project and inherit the
class from [ModuleBase]. This class **must** be `public`. class from [ModuleBase]. This class **must** be `public`.
@@ -201,17 +201,13 @@ create nested groups).


[!code-csharp[Groups and Submodules](samples/groups.cs)] [!code-csharp[Groups and Submodules](samples/groups.cs)]


## With Builders

**TODO**

## Dependency Injection
# Dependency Injection


The Command Service is bundled with a very barebone Dependency The Command Service is bundled with a very barebone Dependency
Injection service for your convenience. It is recommended that you use Injection service for your convenience. It is recommended that you use
DI when writing your modules. DI when writing your modules.


### Setup
## Setup


First, you need to create an @System.IServiceProvider. First, you need to create an @System.IServiceProvider.


@@ -222,7 +218,7 @@ Finally, pass the service collection into `AddModulesAsync`.


[!code-csharp[IServiceProvider Setup](samples/dependency_map_setup.cs)] [!code-csharp[IServiceProvider Setup](samples/dependency_map_setup.cs)]


### Usage in Modules
## Usage in Modules


In the constructor of your Module, any parameters will be filled in by In the constructor of your Module, any parameters will be filled in by
the @System.IServiceProvider that you've passed. the @System.IServiceProvider that you've passed.
@@ -298,21 +294,22 @@ your commands.


By default, the following Types are supported arguments: By default, the following Types are supported arguments:


- bool
- char
- sbyte/byte
- ushort/short
- uint/int
- ulong/long
- float, double, decimal
- string
- DateTime/DateTimeOffset/TimeSpan
- IMessage/IUserMessage
- IChannel/IGuildChannel/ITextChannel/IVoiceChannel/IGroupChannel
- IUser/IGuildUser/IGroupUser
- IRole

### Creating a Type Readers
- `bool`
- `char`
- `sbyte`/`byte`
- `ushort`/`short`
- `uint`/`int`
- `ulong`/`long`
- `float`, `double`, `decimal`
- `string`
- `DateTime`/`DateTimeOffset`/`TimeSpan`
- `IMessage`/`IUserMessage`
- `IChannel`/`IGuildChannel`/`ITextChannel`/`IVoiceChannel`/`ICategoryChannel`/`IMessageChannel`/`IGroupChannel`
- `IUser`/`IGuildUser`/`IGroupUser`
- `IRole`
- `Nullable<T>` where applicible

## Creating a Type Readers


To create a `TypeReader`, create a new class that imports @Discord and To create a `TypeReader`, create a new class that imports @Discord and
@Discord.Commands and ensure the class inherits from @Discord.Commands and ensure the class inherits from
@@ -337,11 +334,11 @@ necessary.
[TypeReaderResult.FromError]: xref:Discord.Commands.TypeReaderResult.FromError* [TypeReaderResult.FromError]: xref:Discord.Commands.TypeReaderResult.FromError*
[ReadAsync]: xref:Discord.Commands.TypeReader.ReadAsync* [ReadAsync]: xref:Discord.Commands.TypeReader.ReadAsync*


#### Sample
### Sample


[!code-csharp[TypeReaders](samples/typereader.cs)] [!code-csharp[TypeReaders](samples/typereader.cs)]


### Installing TypeReaders
## Installing TypeReaders


TypeReaders are not automatically discovered by the Command Service TypeReaders are not automatically discovered by the Command Service
and must be explicitly added. and must be explicitly added.


Loading…
Cancel
Save