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
command parser.

## Setup
## Get Started

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

## 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.

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]
> **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.
>
> 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].

>[!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
class from [ModuleBase]. This class **must** be `public`.
@@ -201,17 +201,13 @@ create nested groups).

[!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
Injection service for your convenience. It is recommended that you use
DI when writing your modules.

### Setup
## Setup

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)]

### Usage in Modules
## Usage in Modules

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

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
@Discord.Commands and ensure the class inherits from
@@ -337,11 +334,11 @@ necessary.
[TypeReaderResult.FromError]: xref:Discord.Commands.TypeReaderResult.FromError*
[ReadAsync]: xref:Discord.Commands.TypeReader.ReadAsync*

#### Sample
### Sample

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

### Installing TypeReaders
## Installing TypeReaders

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


Loading…
Cancel
Save