From 3b88e5517a7a40733e664c404afffcacbd3846a3 Mon Sep 17 00:00:00 2001 From: Hsu Still <341464@gmail.com> Date: Sat, 7 Apr 2018 00:26:33 +0800 Subject: [PATCH] Fix headers in command guide & add mention of nullable types --- docs/guides/commands/commands.md | 61 +++++++++++++++----------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/docs/guides/commands/commands.md b/docs/guides/commands/commands.md index 6ee262289..bbec81788 100644 --- a/docs/guides/commands/commands.md +++ b/docs/guides/commands/commands.md @@ -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` 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.