You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

intro.md 7.3 KiB

Documentation Overhaul (#1161) * Add XML docs * Clean up style switcher * Squash commits on branch docs/faq-n-patches * Fix broken theme selector * Add local image embed instruction * Add a bunch of XML docs * Add a bunch of XML docs * Fix broken search + DocFX by default ships with an older version of jQuery, switching to a newer version confuses parts of the DocFX Javascript. * Minor fixes for CONTRIBUTING.md and README.md * Clean up filterConfig.yml + New config exposes Discord.Net namespace since it has several common public exceptions that may be helpful to users * Add XML docs * Read token from Environment Variable instead of hardcode * Add XMLDocs * Compress some assets & add OAuth2 URL generator * Fix sample link & add missing pictures * Add tag examples * Fix embed docs consistency * Add details regarding userbot support * Add XML Docs * Add XML Docs * Add XML Docs * Minor fixes in documentations + Fix unescaped '<' + Fix typo * Fix seealso for preconditions and add missing descriptions * Add missing exceptions * Document exposed TypeReaders * Fix letter-casing for files * Add 'last modified' plugin Source: https://github.com/Still34/DocFx.Plugin.LastModified Licensed under MIT License * XML Docs * Fix minor consistencies & redundant impl * Add properties examples to overwrite * Fix missing Username prop * Add warning for bulk-delete endpoint * Replace note block * Add BaseSocketClient docs * Add XML docs * Replace langword null to code block null instead - Because DocFX sucks at rendering langword * Replace all langword placements with code block * Add more IGuild docs * Add details to SpotifyGame * Initial proofread of the articles * Add explanation for RunMode * Add event docs - MessageReceived - ChannelUpdated/Destroyed/Created * Fix light theme link color * Fix xml docs error * Add partial documentation for audit log impl * Add documentation for some REST-based objects * Add partial documentation for audit log objects * Add more XML comments to quotation mark alias map stuff, including an example * Add reference to CommandServiceConfig from the util docs' * Add explanation that if " is removed then it wont work * Fix missing service provider in example * Add documentation for new INestedChannel * Add documentation * Add documentation for new API version & few events * Revise guide paragraphs/samples + Fix various formatting. + Provide a more detailed walkthrough for dependency injection. + Add C# note at intro. * Fix typos & formatting * Improve group module example * Small amount to see if I'm doing it right * Remove/cleanup redundant variables * Fix EnterTypingState impl for doc inheritance * Fix Test to resolve changes made in 15b58e * Improve precondition documentation + Add precondition usage sample + Add precondition group usage sample + Move precondition samples to its own sample folder * Move samples to individual folders * Clarify token source * Cleanup styling of README.md for docs * Replace InvalidPathChars for NS1.3 * InvalidPathChars does not exist in NS1.3; replaced with GetInvalidPathChars instead. * Add a missing change for 2c7cc738 * Update LastModified to v1.1.0 & add license * Rewrite installation page for Core 2.1 * Fix anchor link * Bump post-processor to v1.1.1 * Add fixes to partial file & add license * Moved theme-switcher code to scripts partial file + Add author's MIT license to featherlight javascript * Remove unused bootstrap plugin * Bump LastModified plugin * Changed the path from 'lastmodified' to 'last-modified' for consistency * Cleanup README & Contribution guide * Changes to last pr * Fix GetCategoryAsync docs * Proofread and cleanup articles * Change passive voice in "Get Started" to active * Fix improper preposition in Commands Introduction page * Fix minor grammar mistakes in "Your First Bot" (future tense -> present tense/subjunctive mood -> indicative mood/proper noun casing/incorrect noun/add missing article) * Fix minor grammar mistakes in "Installation" (missing article) * no hablo ingles * Try try try again * I'm sure you're having as much fun as I am * Cleanup TOC & fix titles * Improve styling + Change title font to Noto Sans + Add materialized design for commit message box * Add DescriptionGenerator plugin * Add nightly section for clarification * Fix typos in Nightlies & Post-execution * Bump DescriptionGenerator to v1.1.0 + This build adds the functionality of generating managed references' summary into the description tag. * Initial emoji article draft * Add 'additional information' section for emoji article * Add cosmetic changes to the master css * Alter info box color + Add transition to article content * Add clarification in the emoji article * Emphasize that normal emoji string will not translate to its Unicode representation. * Clean up or add some of the samples featured in the article. + Add emoji/emote declaration section for clarification. + Add WebSocket emote sample. - Remove inconsistent styling ('wacky memes' proves to be too out of place). * Improve readability for nightlies article * Move 'Bundled Preconditions' section * Bump LastModified to fix UTC DateTime parsing * Add langwordMapping.yml * Add XML docs * Add VSC workspace rule * The root workspace limits the ruler to 120 characters for member documentations and excludes folders such as 'samples' and 'docs'. * The docs workspace limits the ruler to 70 characters for standard conceptual article to comply with documentation's CONTRIBUTING.md rule, and excludes temprorary folders created by DocFX. * Update CONTRIBUTING.md * Add documentation style rule * Fix styling of several member documentation * Fix ' />' caused by Agent Smith oddities * Fix styling to be more specific about the mention of IDs * Fix exception summary to comply with official Microsoft Docs style * References https://docs.microsoft.com/en-us/dotnet/api/system.argumentnullexception?view=netframework-4.7.2 https://docs.microsoft.com/en-us/dotnet/api/system.platformnotsupportedexception?view=netframework-4.7.2 https://docs.microsoft.com/en-us/dotnet/api/system.badimageformatexception?view=netframework-4.7.2 * Add XML documentations * Shift color return docs * Fix minor docs * Added documentation for SocketDMChannel, SocketGuildChannel, and SocketTextChannel * Add XML docs * Corrections to SocketGuildChannel * Corrections to SocketTextChannel * Corrections to SocketDMChannel * Swapped out 'id' for 'snowflake identifier * Swapped out 'id' for 'snowflake identifier' * SocketDMChannel amendments * SocketGuildChannel amendments * SocketTextChannel amendments * Add XML docs & patch return types + Starting from this commit, all return types for tasks will use style similar to most documentations featured on docs.microsoft.com References: https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.dbcontext.-ctor?view=efcore-2.1 https://docs.microsoft.com/en-us/dotnet/api/system.io.filestream.readasync?view=netcore-2.1 https://docs.microsoft.com/en-us/dotnet/api/system.io.textwriter.writelineasync?view=netcore-2.1#System_IO_TextWriter_WriteLineAsync_System_Char___ And many more other asynchronous method documentations featured in the latest BCL. * Added documentation for many audit log data types, fixed vowel indefinite articles * Change audit log data types to start with 'Contains' (verb) instead of an article * Fix some documentation issues and document some more audit log data types * Fix English posession * Add XML doc * Documented two more types * Documented RoleCreateAuditLogData * Document remaining audit log data types * Added RestDMChannel documentation * Added RestGuildChannel documentation * Added RestTextChannel documentation * Added RestVoiceChannel documentation * Added RestUser documentation * Added RestRole documentation * Added RestMessage documentation * Slightly better wording * Contains -> Contains a piece of (describe article) * [EN] Present perf. -> past perf. * Add XML docs * Fix arrow alignment * Clarify supported nullable type * Fixed a typo in ISnowflakeEntity * Added RestUser Documentation * Added RestInvite documentation * Add XML docs & minor optimizations * Minor optimization for doc rendering * Rollback font optimization changes * Amendments to RestUser * Added SocketDMChannel documentation * Added RestDMChannel documentation * Added RestGuild documentation * Adjustment to SocketDMChannel * Added minimal descriptions from the API documentation for Integration types * Added obsolete mention to the ReadMessages flag. * Added remarks about 2FA requirement for guild permissions * Added xmldoc for GuildPermission methods * Added xml doc for ToAllowList and ToDenyList * Added specification of how the bits of the color raw value are packed * Added discord API documentation to IConnection interface * I can spell :^) * Fix whitespace in ChannelPermission * fix spacing of values in guildpermission * Made changes to get field descriptions from feedback, added returns tag to IConnection * Added property get standard for IntegrationAccount * Added property get pattern to xml docs and identical returns tag. * Change all color class references to struct ...because it isn't a class. * Add XML docs * Rewrote the returns tags in IGuildIntegration, removed the ones I was unsure about. * Rewrote the rest of the returns tags * Amendments * Cleanup doc for c1d78189 * Added types to <returns> tags where missing * Added second sample for adding reactions * Added some class summaries * Missed a period * Amendments * restored the removed line break * Removed unnecessary see tag * Use consistent quotation marks around subscribers, the name for these users are dependant on the source of where they are integrated from (youtube or twitch), so we should not use a name that is specific to one platform * Add <remarks> tag to the IGuildIntegration xmldocs * Fix grammar issue * Update DescriptionGenerator * Cleanup of https://github.com/Still34/Discord.Net/pull/8 * Cleanup previous PR * Fix for misleading behaviour in the emoji guide + Original lines stated that sending a emoji wrapped in colon will not be parsed, but that was incorrect; replaced with reactions instead of sending messages as the example * Add strings for dictionary in DotSettings * Add XML docs * Fix lots of typos in comments + Geez, I didn't know there were so many. * Add XML docs & rewrite GetMessagesAsync docs This commit rewrites the remarks section of GetMessagesAsync, as well as adding examples to several methods. * Update 'Your First Bot' + This commit reflects the new changes made to the Discord Application Developer Portal after its major update * Initial optimization for DocFX render & add missing files * Add examples in message methods * Cleanup https://github.com/RogueException/Discord.Net/pull/1128 * Fix first bot note * Cleanup FAQ structure * Add XML docs * Update docfx plugins * Fix navbar collapsing issue * Fix broken xref * Cleanup FAQ section + Add introductory paragraphs to each FAQ section. + Add 'missing dependency' entry to commands FAQ. * Split commands FAQ to 'General' and 'DI' sections. * Cleanup https://github.com/RogueException/Discord.Net/pull/1139 * Fix missing namespace * Add missing highlighting css for the light theme * Add additional clarification for installing packages * Add indentation to example for clarity * Cleanup several articles to be more human-friendly and easier to read * Remove RPC-related notes * Cleanup slow-mode-related documentation strings * Add an additional note about cross-guild emote usage * Add CreateTextChannel sample * Add XMLDocs
6 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. ---
  2. uid: Guides.Commands.Intro
  3. title: Introduction to Command Service
  4. ---
  5. # The Command Service
  6. [Discord.Commands](xref:Discord.Commands) provides an attribute-based
  7. command parser.
  8. ## Get Started
  9. To use commands, you must create a [Command Service] and a command
  10. handler.
  11. Included below is a barebone command handler. You can extend your
  12. command handler as much as you like; however, the below is the bare
  13. minimum.
  14. > [!NOTE]
  15. > The `CommandService` will optionally accept a [CommandServiceConfig],
  16. > which *does* set a few default values for you. It is recommended to
  17. > look over the properties in [CommandServiceConfig] and their default
  18. > values.
  19. [!code-csharp[Command Handler](samples/intro/command_handler.cs)]
  20. [Command Service]: xref:Discord.Commands.CommandService
  21. [CommandServiceConfig]: xref:Discord.Commands.CommandServiceConfig
  22. ## With Attributes
  23. Starting from 1.0, commands can be defined ahead of time with
  24. attributes, or at runtime with builders.
  25. For most bots, ahead-of-time commands should be all you need, and this
  26. is the recommended method of defining commands.
  27. ### Modules
  28. The first step to creating commands is to create a _module_.
  29. A module is an organizational pattern that allows you to write your
  30. commands in different classes and have them automatically loaded.
  31. Discord.Net's implementation of "modules" is influenced heavily by the
  32. ASP.NET Core's Controller pattern. This means that the lifetime of a
  33. module instance is only as long as the command is being invoked.
  34. Before we create a module, it is **crucial** for you to remember that
  35. in order to create a module and have it automatically discovered,
  36. your module must:
  37. * Be public
  38. * Inherit [ModuleBase]
  39. By now, your module should look like this:
  40. [!code-csharp[Empty Module](samples/intro/empty-module.cs)]
  41. > [!NOTE]
  42. > [ModuleBase] is an `abstract` class, meaning that you may extend it
  43. > or override it as you see fit. Your module may inherit from any
  44. > extension of ModuleBase.
  45. [IoC]: https://msdn.microsoft.com/en-us/library/ff921087.aspx
  46. [Dependency Injection]: https://msdn.microsoft.com/en-us/library/ff921152.aspx
  47. [ModuleBase]: xref:Discord.Commands.ModuleBase`1
  48. ### Adding/Creating Commands
  49. > [!WARNING]
  50. > **Avoid using long-running code** in your modules wherever possible.
  51. > You should **not** be implementing very much logic into your
  52. > modules, instead, outsource to a service for that.
  53. >
  54. > If you are unfamiliar with Inversion of Control, it is recommended
  55. > to read the MSDN article on [IoC] and [Dependency Injection].
  56. The next step to creating commands is actually creating the commands.
  57. For a command to be valid, it **must** have a return type of `Task`
  58. or `Task<RuntimeResult>`. Typically, you might want to mark this
  59. method as `async`, although it is not required.
  60. Then, flag your command with the [CommandAttribute]. Note that you must
  61. specify a name for this command, except for when it is part of a
  62. [Module Group](#module-groups).
  63. ### Command Parameters
  64. Adding parameters to a command is done by adding parameters to the
  65. parent `Task`.
  66. For example:
  67. * To take an integer as an argument from the user, add `int num`.
  68. * To take a user as an argument from the user, add `IUser user`.
  69. * ...etc.
  70. Starting from 1.0, a command can accept nearly any type of argument;
  71. a full list of types that are parsed by default can
  72. be found in @Guides.Commands.TypeReaders.
  73. [CommandAttribute]: xref:Discord.Commands.CommandAttribute
  74. #### Optional Parameters
  75. Parameters, by default, are always required. To make a parameter
  76. optional, give it a default value (i.e., `int num = 0`).
  77. #### Parameters with Spaces
  78. To accept a comma-separated list, set the parameter to `params Type[]`.
  79. Should a parameter include spaces, the parameter **must** be
  80. wrapped in quotes. For example, for a command with a parameter
  81. `string food`, you would execute it with
  82. `!favoritefood "Key Lime Pie"`.
  83. If you would like a parameter to parse until the end of a command,
  84. flag the parameter with the [RemainderAttribute]. This will
  85. allow a user to invoke a command without wrapping a
  86. parameter in quotes.
  87. [RemainderAttribute]: xref:Discord.Commands.RemainderAttribute
  88. ### Command Overloads
  89. You may add overloads to your commands, and the command parser will
  90. automatically pick up on it.
  91. If, for whatever reason, you have two commands which are ambiguous to
  92. each other, you may use the @Discord.Commands.PriorityAttribute to
  93. specify which should be tested before the other.
  94. The `Priority` attributes are sorted in ascending order; the higher
  95. priority will be called first.
  96. ### Command Context
  97. Every command can access the execution context through the [Context]
  98. property on [ModuleBase]. `ICommandContext` allows you to access the
  99. message, channel, guild, user, and the underlying Discord client
  100. that the command was invoked from.
  101. Different types of `Context` may be specified using the generic variant
  102. of [ModuleBase]. When using a [SocketCommandContext], for example, the
  103. properties on this context will already be Socket entities, so you
  104. will not need to cast them.
  105. To reply to messages, you may also invoke [ReplyAsync], instead of
  106. accessing the channel through the [Context] and sending a message.
  107. > [!WARNING]
  108. > Contexts should **NOT** be mixed! You cannot have one module that
  109. > uses `CommandContext` and another that uses `SocketCommandContext`.
  110. [Context]: xref:Discord.Commands.ModuleBase`1.Context
  111. [SocketCommandContext]: xref:Discord.Commands.SocketCommandContext
  112. [ReplyAsync]: xref:Discord.Commands.ModuleBase`1.ReplyAsync*
  113. > [!TIP]
  114. > At this point, your module should look comparable to this example:
  115. > [!code-csharp[Example Module](samples/intro/module.cs)]
  116. #### Loading Modules Automatically
  117. The Command Service can automatically discover all classes in an
  118. `Assembly` that inherit [ModuleBase] and load them. Invoke
  119. [CommandService.AddModulesAsync] to discover modules and
  120. install them.
  121. To opt a module out of auto-loading, flag it with
  122. [DontAutoLoadAttribute].
  123. [DontAutoLoadAttribute]: xref:Discord.Commands.DontAutoLoadAttribute
  124. [CommandService.AddModulesAsync]: xref:Discord.Commands.CommandService.AddModulesAsync*
  125. #### Loading Modules Manually
  126. To manually load a module, invoke [CommandService.AddModuleAsync] by
  127. passing in the generic type of your module and optionally, a
  128. service provider.
  129. [CommandService.AddModuleAsync]: xref:Discord.Commands.CommandService.AddModuleAsync*
  130. ### Module Constructors
  131. Modules are constructed using @Guides.Commands.DI. Any parameters
  132. that are placed in the Module's constructor must be injected into an
  133. @System.IServiceProvider first.
  134. > [!TIP]
  135. > Alternatively, you may accept an
  136. > `IServiceProvider` as an argument and extract services yourself,
  137. > although this is discouraged.
  138. ### Module Properties
  139. Modules with `public` settable properties will have the dependencies
  140. injected after the construction of the module. See @Guides.Commands.DI
  141. to learn more.
  142. ### Module Groups
  143. Module Groups allow you to create a module where commands are
  144. prefixed. To create a group, flag a module with the
  145. @Discord.Commands.GroupAttribute.
  146. Module Groups also allow you to create **nameless Commands**, where
  147. the [CommandAttribute] is configured with no name. In this case, the
  148. command will inherit the name of the group it belongs to.
  149. ### Submodules
  150. Submodules are "modules" that reside within another one. Typically,
  151. submodules are used to create nested groups (although not required to
  152. create nested groups).
  153. [!code-csharp[Groups and Submodules](samples/intro/groups.cs)]