| @@ -114,7 +114,7 @@ different thread. This means that [ExecuteAsync] will be forced to | |||||
| return a successful [ExecuteResult] regardless of the execution. | return a successful [ExecuteResult] regardless of the execution. | ||||
| The following are the known caveats with `RunMode.Async`, | The following are the known caveats with `RunMode.Async`, | ||||
| 1. You introduce race condition. | |||||
| 1. You can potentially introduce race condition. | |||||
| 2. Unnecessary overhead caused by [async state machine]. | 2. Unnecessary overhead caused by [async state machine]. | ||||
| 3. [ExecuteAsync] will immediately return [ExecuteResult] instead of | 3. [ExecuteAsync] will immediately return [ExecuteResult] instead of | ||||
| other result types (this is particularly important for those who wish | other result types (this is particularly important for those who wish | ||||
| @@ -24,10 +24,13 @@ Group. | |||||
| * A **Message channel** ([IMessageChannel]) can be any of the above. | * A **Message channel** ([IMessageChannel]) can be any of the above. | ||||
| ### Misc Channels | ### Misc Channels | ||||
| * A **Guild channel** ([IGuildChannel]) is a guild channel in a guild. | |||||
| - This can be any channels that may exist in a guild. | |||||
| * A **Voice channel** ([IVoiceChannel]) is a voice channel in a guild. | * A **Voice channel** ([IVoiceChannel]) is a voice channel in a guild. | ||||
| * A **Category channel** ([ICategoryChannel]) (2.0+) is a category that | * A **Category channel** ([ICategoryChannel]) (2.0+) is a category that | ||||
| holds one or more sub-channels. | holds one or more sub-channels. | ||||
| [IGuildChannel]: xref:Discord.IGuildChannel | |||||
| [IMessageChannel]: xref:Discord.IMessageChannel | [IMessageChannel]: xref:Discord.IMessageChannel | ||||
| [ITextChannel]: xref:Discord.ITextChannel | [ITextChannel]: xref:Discord.ITextChannel | ||||
| [IGroupChannel]: xref:Discord.IGroupChannel | [IGroupChannel]: xref:Discord.IGroupChannel | ||||
| @@ -20,6 +20,12 @@ A good and safe casting example: | |||||
| ## How do I send a message? | ## How do I send a message? | ||||
| > [!TIP] | |||||
| > The [GetChannel] method by default returns an [IChannel]. | |||||
| > This means channels such as [IVoiceChannel], [ICategoryChannel] | |||||
| > can be returned. This is why that you cannot send message | |||||
| > to channels like those. | |||||
| Any implementation of [IMessageChannel] has a [SendMessageAsync] | Any implementation of [IMessageChannel] has a [SendMessageAsync] | ||||
| method. You can get the channel via [GetChannel] under the client. | method. You can get the channel via [GetChannel] under the client. | ||||
| Remember, when using Discord.NET, polymorphism is a common recurring | Remember, when using Discord.NET, polymorphism is a common recurring | ||||
| @@ -42,7 +48,7 @@ various types of channels. | |||||
| There are 2 ways to do this. You can do either of the following, | There are 2 ways to do this. You can do either of the following, | ||||
| 1. Cast the user as an [IGuildUser] and use its [IGuild] property. | 1. Cast the user as an [IGuildUser] and use its [IGuild] property. | ||||
| 2. Cast the channel as an [ITextChannel]/[IVoiceChannel] and use | |||||
| 2. Cast the channel as an [IGuildChannel] and use | |||||
| its [IGuild] property. | its [IGuild] property. | ||||
| ## How do I add hyperlink text to an embed? | ## How do I add hyperlink text to an embed? | ||||
| @@ -67,7 +73,7 @@ implement [IEmote] and are valid options. | |||||
| ## Why am I getting so many preemptive rate limits when I try to add more than one reactions? | ## Why am I getting so many preemptive rate limits when I try to add more than one reactions? | ||||
| This is due to how .NET parses the HTML header, mistreating | |||||
| This is due to how HTML header works, mistreating | |||||
| 0.25sec/action to 1sec. This casues the lib to throw preemptive rate | 0.25sec/action to 1sec. This casues the lib to throw preemptive rate | ||||
| limit more frequently than it should for methods such as adding | limit more frequently than it should for methods such as adding | ||||
| reactions. | reactions. | ||||
| @@ -77,6 +83,7 @@ reactions. | |||||
| Unfortunately, not at the moment. See [#401](https://github.com/RogueException/Discord.Net/issues/401). | Unfortunately, not at the moment. See [#401](https://github.com/RogueException/Discord.Net/issues/401). | ||||
| [IGuildChannel]: xref:Discord.IGuildChannel | |||||
| [ITextChannel]: xref:Discord.ITextChannel | [ITextChannel]: xref:Discord.ITextChannel | ||||
| [IGuild]: xref:Discord.IGuild | [IGuild]: xref:Discord.IGuild | ||||
| [IVoiceChannel]: xref:Discord.IVoiceChannel | [IVoiceChannel]: xref:Discord.IVoiceChannel | ||||
| @@ -5,8 +5,8 @@ First of all, welcome! You may visit us on our Discord should you | |||||
| have any questions. Before you delve into using the library, | have any questions. Before you delve into using the library, | ||||
| however, you should have some decent understanding of the language | however, you should have some decent understanding of the language | ||||
| you are about to use. This library touches on | you are about to use. This library touches on | ||||
| [Task-based Asynchronous Pattern], [polymorphism], [interface] and | |||||
| many more advanced topics extensively. Please make sure that you | |||||
| [Task-based Asynchronous Pattern] (TAP), [polymorphism], [interface] | |||||
| and many more advanced topics extensively. Please make sure that you | |||||
| understand these topics to some extent before proceeding. | understand these topics to some extent before proceeding. | ||||
| Here are some examples: | Here are some examples: | ||||
| @@ -47,7 +47,8 @@ library require an ID to retrieve the said object. | |||||
| There are 2 ways to obtain the said ID. | There are 2 ways to obtain the said ID. | ||||
| 1. Enable Discord's developer mode. With developer mode enabled, | 1. Enable Discord's developer mode. With developer mode enabled, | ||||
| you can - as an example - right click on a guild and copy the guild | you can - as an example - right click on a guild and copy the guild | ||||
| id (please note that this does not apply to Role IDs, see below). | |||||
| id (please note that this does not apply to all objects, such as | |||||
| Role IDs \[see below], or DM channel IDs). | |||||
|  |  | ||||
| 2. Escape the object using `\` in front the object. For example, | 2. Escape the object using `\` in front the object. For example, | ||||
| when you do `\@Example#1234` in chat, it will return the user ID of | when you do `\@Example#1234` in chat, it will return the user ID of | ||||
| @@ -11,8 +11,9 @@ public Task EchoRemainderAsync([Remainder]string text) => ReplyAsync(text); | |||||
| [Command("echo-hassle")] | [Command("echo-hassle")] | ||||
| public Task EchoAsync(string text) => ReplyAsync(text); | public Task EchoAsync(string text) => ReplyAsync(text); | ||||
| // The message would be seen as having 5 parameters, while the method | |||||
| // only accepts one. Wrapping the message in quotes solves this. | |||||
| // The message would be seen as having multiple parameters, | |||||
| // while the method only accepts one. | |||||
| // Wrapping the message in quotes solves this. | |||||
| // This way, the system knows the entire message is to be parsed as a | // This way, the system knows the entire message is to be parsed as a | ||||
| // single String. | // single String. | ||||
| // e.g. | // e.g. | ||||
| @@ -159,7 +159,7 @@ install them. | |||||
| To manually load a module, invoke [CommandService.AddModuleAsync] by | To manually load a module, invoke [CommandService.AddModuleAsync] by | ||||
| passing in the generic type of your module and optionally, a | passing in the generic type of your module and optionally, a | ||||
| dependency map. | |||||
| service provider. | |||||
| [CommandService.AddModuleAsync]: xref:Discord.Commands.CommandService#Discord_Commands_CommandService_AddModuleAsync__1_System_IServiceProvider_ | [CommandService.AddModuleAsync]: xref:Discord.Commands.CommandService#Discord_Commands_CommandService_AddModuleAsync__1_System_IServiceProvider_ | ||||
| @@ -167,8 +167,12 @@ dependency map. | |||||
| Modules are constructed using Dependency Injection. Any parameters | Modules are constructed using Dependency Injection. Any parameters | ||||
| that are placed in the Module's constructor must be injected into an | that are placed in the Module's constructor must be injected into an | ||||
| @System.IServiceProvider first. Alternatively, you may accept an | |||||
| `IServiceProvider` as an argument and extract services yourself. | |||||
| @System.IServiceProvider first. | |||||
| > [!TIP] | |||||
| > Alternatively, you may accept an | |||||
| > `IServiceProvider` as an argument and extract services yourself, | |||||
| > although this is discouraged. | |||||
| ### Module Properties | ### Module Properties | ||||
| @@ -14,7 +14,7 @@ namespace Discord.Commands | |||||
| /// </summary> | /// </summary> | ||||
| ParseFailed, | ParseFailed, | ||||
| /// <summary> | /// <summary> | ||||
| /// Thrown when the input text has too few parameters. | |||||
| /// Thrown when the input text has too few or too many arguments. | |||||
| /// </summary> | /// </summary> | ||||
| BadArgCount, | BadArgCount, | ||||