* Improve the Command Service documentation
The following changes have been added to this PR:
• Fix minor grammatical errors.
• Capitalize terms such as Commands, Modules and such, as the context is specific to the lib.
• Wrap methods and properties in code blocks.
The docs page currently has several issues that remains to be fixed.
1.
```md
>[!WARNING]
>This article is out of date and has not been rewritten yet.
Information is not guaranteed to be accurate.
```
The docs doesn't necessarily seem "out of date" as the warning claims. The basics seem pretty relevant to the latest version of the lib.
2.
>“To manually load a module, invoke [CommandService.AddModuleAsync], by passing in the generic type of your module and optionally, a dependency map.”
The latter part of the sentence seems off. Where should the user pass the dependency map to? It seems to suggest that `AddModuleAsync` has an argument to pass the dependency to. If it is referring to `AddModuleAsync(Type type)`, then I feel like it should be clarified here - or perhaps change the wording of the sentence.
3.
>“First, you need to create an @System.IServiceProvider You may create your own IServiceProvider if you wish.”
Any mention of @System.IServiceProvider is currently broken on the docs.
4.
>“Submodules are Modules that reside within another one. Typically, submodules are used to create nested groups (although not required to create nested groups).”
Clarification on the part after "although?"
5.
>“Finally, pass the map into the LoadAssembly method. Your modules will automatically be loaded with this dependency map.”
Where is this `LoadAssembly` method?
6.
```md
>[!NOTE]
>Preconditions can be applied to Modules, Groups, or Commands.
```
The docs should mention `ParameterPreconditionAttribute`'s existence.
* Update line breaks to comply with docs standard
* Change "you should..." to "instead, ..."
* Trim trailing spaces
* Change "inherits" to "inherit"
* Fix Context warning note and add ReplyAsync xref
* Fix broken xrefs
* Fix [Command Service] xref
* Fix consistency between TypeReaders and Preconditions returns
* Add missing semi-colons in ServiceProvider sample
* Change CommandContext to SocketCommandContext & change variable naming
* Cleanup TypeReader section
* Wrap [DontInject] in code block
* Fix commands docs linking in intro
* Improve Getting Started - Installation
- Fix character misalignment to comply with docs standard.
- Fix image numbering issues by moving the tooltips above some of the steps.
- Add codeblocks to search terms like `Discord.Net`.
- Remove broken `addons` reference.
- Specify `.NET 4.6.1` as `.NET Framework 4.6.1`.
- Minor cross-reference cleanup.
* Fix Getting Started - Intro
- Minor grammartical fixes.
- Wrap mentions of the methods, properties, and events in code block.
- Replace `Discord.Net` to `Discord.NET`.
- Fix steps numbering under `Creating a Discord Bot` and `Adding your bot to a server`.
- Change `Task-based Asynchronous Pattern ([TAP])` linking to mark the entire term instead.
- Change code block of `Pong!` to quotation mark instead.
* Fix cross references in Sending Voice
* Mention parameter precondition attribute
* Change `Discord.NET` to `Discord.Net` for consistency
* Wrap project names in code blocks & minor fixes in Terminology
* Change `add-ons` to `addons` for consistency
* Fix cross references in Logging
* Fix minor grammatical issues in "Working with Events"
* Missed a tilda
* Remove out-of-date warning in Commands
* Minor grammatical fixes for Entities
* Fix broken xref in Logging
* Adjust service collection sample
...according to f89aecb7bf (r141530227)
* Update Command Handler sample
- Update Main for C# 7.1.
- Inject CommandService and DiscordSocketClient into the service collection.
- Add Async suffix to asynchronous methods.
* Minor grammatical fixes in Events
* Revert 2 incorrect grammar corrections
* Revert async Main sample
* Add hardcode token notice in sample
* Fix missing method for Command Handler
* Modify module samples to use SocketCommandContext instead
* Emphasize CommandContext and SocketCommandContext
* Fix formatting for module sample
* Add SocketCommandContext for Groups sample
* Remove comma
* Fix DepMap sample formatting
* Replace [DontInject] with DontInjectAttribute with cross reference
* Remove connection logic note
There is no reason that this note should still be here since Ready event exists.
* Add a new warning message informing the users the existence of CommandService
* Make command handler private
excellent change
71 lines
2.5 KiB
Markdown
71 lines
2.5 KiB
Markdown
---
|
|
title: Entities
|
|
---
|
|
|
|
>[!NOTE]
|
|
This article is written with the Socket variants of entities in mind,
|
|
not the general interfaces or Rest/Rpc entities.
|
|
|
|
Discord.Net provides a versatile entity system for navigating the
|
|
Discord API.
|
|
|
|
### Inheritance
|
|
|
|
Due to the nature of the Discord API, some entities are designed with
|
|
multiple variants; for example, `SocketUser` and `SocketGuildUser`.
|
|
|
|
All models will contain the most detailed version of an entity
|
|
possible, even if the type is less detailed.
|
|
|
|
For example, in the case of the `MessageReceived` event, a
|
|
`SocketMessage` is passed in with a channel property of type
|
|
`SocketMessageChannel`. All messages come from channels capable of
|
|
messaging, so this is the only variant of a channel that can cover
|
|
every single case.
|
|
|
|
But that doesn't mean a message _can't_ come from a
|
|
`SocketTextChannel`, which is a message channel in a guild. To
|
|
retrieve information about a guild from a message entity, you will
|
|
need to cast its channel object to a `SocketTextChannel`.
|
|
|
|
### Navigation
|
|
|
|
All socket entities have navigation properties on them, which allow
|
|
you to easily navigate to an entity's parent or children. As explained
|
|
above, you will sometimes need to cast to a more detailed version of
|
|
an entity to navigate to its parent.
|
|
|
|
### Accessing Entities
|
|
|
|
The most basic forms of entities, `SocketGuild`, `SocketUser`, and
|
|
`SocketChannel` can be pulled from the DiscordSocketClient's global
|
|
cache, and can be retrieved using the respective `GetXXX` method on
|
|
DiscordSocketClient.
|
|
|
|
>[!TIP]
|
|
It is **vital** that you use the proper IDs for an entity when using
|
|
a GetXXX method. It is recommended that you enable Discord's
|
|
_developer mode_ to allow easy access to entity IDs, found in
|
|
Settings > Appearance > Advanced
|
|
|
|
More detailed versions of entities can be pulled from the basic
|
|
entities, e.g. `SocketGuild.GetUser`, which returns a
|
|
`SocketGuildUser`, or `SocketGuild.GetChannel`, which returns a
|
|
`SocketGuildChannel`. Again, you may need to cast these objects to get
|
|
a variant of the type that you need.
|
|
|
|
### Samples
|
|
|
|
[!code-csharp[Entity Sample](samples/entities.cs)]
|
|
|
|
### Tips
|
|
|
|
Avoid using boxing-casts to coerce entities into a variant, use the
|
|
[`as`] keyword, and a null-conditional operator instead.
|
|
|
|
This allows you to write safer code and avoid [InvalidCastExceptions].
|
|
|
|
For example, `(message.Author as SocketGuildUser)?.Nickname`.
|
|
|
|
[`as`]: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/as
|
|
[InvalidCastExceptions]: https://msdn.microsoft.com/en-us/library/system.invalidcastexception(v=vs.110).aspx |