@@ -15,14 +15,12 @@ title: Basic Questions about Client | |||
> termination! | |||
There are few possible reasons why this may occur. | |||
1. You are not using the appropriate [TokenType]. | |||
If you are using a bot account created from the Discord Developer | |||
portal, you should be using `TokenType.Bot`. | |||
2. You are not using the correct login credentials. | |||
Please keep in mind that tokens start with `Mj*`. | |||
If it starts with any other characters, chances are, you might be | |||
using the *client secret*, which has nothing to do with the login | |||
token. | |||
1. You are not using the appropriate [TokenType]. If you are using a | |||
bot account created from the Discord Developer portal, you should | |||
be using `TokenType.Bot`. | |||
2. You are not using the correct login credentials. Please keep in | |||
mind that tokens is different from a *client secret*. | |||
[TokenType]: xref:Discord.TokenType | |||
@@ -51,9 +49,9 @@ use the cached message entity. Read more about it [here](xref:Guides.Concepts.Ev | |||
1. Message Cache must be enabled. | |||
2. Hook the MessageUpdated event. This event provides a *before* and | |||
*after* object. | |||
*after* object. | |||
3. Only messages received *after* the bot comes online will be | |||
available in the cache. | |||
available in the cache. | |||
[MessageCacheSize]: xref:Discord.WebSocket.DiscordSocketConfig.MessageCacheSize | |||
[DiscordSocketConfig]: xref:Discord.WebSocket.DiscordSocketConfig |
@@ -79,8 +79,9 @@ persists for **more than 3 seconds**. | |||
To resolve this, the library has designed a flag called [RunMode]. | |||
There are 2 main `RunMode`s. | |||
1. `RunMode.Sync` (default) | |||
2. `RunMode.Async` | |||
1. `RunMode.Sync` (default) | |||
2. `RunMode.Async` | |||
You can set the `RunMode` either by specifying it individually via | |||
the `CommandAttribute`, or by setting the global default with | |||
@@ -120,12 +121,13 @@ different thread. This means that [ExecuteAsync] will be forced to | |||
return a successful [ExecuteResult] regardless of the execution. | |||
The following are the known caveats with `RunMode.Async`, | |||
1. You can potentially introduce race condition. | |||
2. Unnecessary overhead caused by [async state machine]. | |||
3. [ExecuteAsync] will immediately return [ExecuteResult] instead of | |||
other result types (this is particularly important for those who wish | |||
to utilize [RuntimeResult] in 2.0). | |||
4. Exceptions are swallowed. | |||
1. You can potentially introduce race condition. | |||
2. Unnecessary overhead caused by [async state machine]. | |||
3. [ExecuteAsync] will immediately return [ExecuteResult] instead of | |||
other result types (this is particularly important for those who wish | |||
to utilize [RuntimeResult] in 2.0). | |||
4. Exceptions are swallowed. | |||
However, there are ways to remedy some of these. | |||
@@ -42,7 +42,7 @@ through the OAuth2 flow. | |||
 | |||
3. Create an OAuth2 authorization URL | |||
`https://discordapp.com/oauth2/authorize?client_id=<CLIENT ID>&scope=bot` | |||
`https://discordapp.com/oauth2/authorize?client_id=<CLIENT ID>&scope=bot` | |||
4. Open the authorization URL in your browser. | |||
5. Select a server. | |||
6. Click on authorize. | |||
@@ -230,6 +230,4 @@ For reference, view an [annotated example] of this structure. | |||
It is important to know that the recommended design pattern of bots | |||
should be to separate the program (initialization and command handler), | |||
the modules (handle commands), and the services (persistent storage, | |||
pure functions, data manipulation). | |||
**todo:** diagram of bot structure | |||
pure functions, data manipulation). |
@@ -51,12 +51,12 @@ Not sure how to add a direct feed? See how [with Visual Studio] or | |||
1. Create a solution for your bot. | |||
2. In Solution Explorer, find the "Dependencies" element under your | |||
bot's project. | |||
bot's project. | |||
3. Right click on "Dependencies", and select "Manage NuGet packages." | |||
 | |||
 | |||
4. In the "Browse" tab, search for `Discord.Net`. | |||
5. Install the `Discord.Net` package. | |||
 | |||
 | |||
## [Using JetBrains Rider](#tab/rider-install) | |||
@@ -8,33 +8,33 @@ title: Terminology | |||
## Preface | |||
Most terms for objects remain the same between 0.9 and 1.0 and above. | |||
The major difference is that the ``Server`` is now called ``Guild`` | |||
The major difference is that the ``Server`` is now called ``Guild`` | |||
to stay in line with Discord internally. | |||
## Implementation Specific Entities | |||
Discord.Net is split into a core library and three different | |||
implementations - `Discord.Net.Core`, `Discord.Net.Rest`, | |||
Discord.Net is split into a core library and three different | |||
implementations - `Discord.Net.Core`, `Discord.Net.Rest`, | |||
`Discord.Net.Rpc`, and `Discord.Net.WebSockets`. | |||
As a bot developer, you will only need to use `Discord.Net.WebSockets`, | |||
As a bot developer, you will only need to use `Discord.Net.WebSockets`, | |||
but you should be aware of the differences between them. | |||
`Discord.Net.Core` provides a set of interfaces that models Discord's | |||
API. These interfaces are consistent throughout all implementations of | |||
Discord.Net, and if you are writing an implementation-agnostic library | |||
or addon, you can rely on the core interfaces to ensure that your | |||
`Discord.Net.Core` provides a set of interfaces that models Discord's | |||
API. These interfaces are consistent throughout all implementations of | |||
Discord.Net, and if you are writing an implementation-agnostic library | |||
or addon, you can rely on the core interfaces to ensure that your | |||
addon will run on all platforms. | |||
`Discord.Net.Rest` provides a set of concrete classes to be used | |||
**strictly** with the REST portion of Discord's API. Entities in this | |||
`Discord.Net.Rest` provides a set of concrete classes to be used | |||
**strictly** with the REST portion of Discord's API. Entities in this | |||
implementation are prefixed with `Rest` (e.g. `RestChannel`). | |||
`Discord.Net.Rpc` provides a set of concrete classes that are used | |||
with Discord's RPC API. Entities in this implementation are prefixed | |||
`Discord.Net.Rpc` provides a set of concrete classes that are used | |||
with Discord's RPC API. Entities in this implementation are prefixed | |||
with `Rpc` (e.g. `RpcChannel`). | |||
`Discord.Net.WebSocket` provides a set of concrete classes that are | |||
`Discord.Net.WebSocket` provides a set of concrete classes that are | |||
used primarily with Discord's WebSocket API or entities that are kept | |||
in cache. When developing bots, you will be using this implementation. | |||
in cache. When developing bots, you will be using this implementation. | |||
All entities are prefixed with `Socket` (e.g. `SocketChannel`). |
@@ -17,14 +17,16 @@ understand these topics to some extent before proceeding. | |||
Here are some examples: | |||
1. [Official quick start guide](https://github.com/RogueException/Discord.Net/blob/dev/docs/guides/getting_started/samples/intro/structure.cs) | |||
2. [Official template](https://github.com/foxbot/DiscordBotBase/tree/csharp/src/DiscordBot) | |||
1. [Official quick start guide] | |||
2. [Official template] | |||
> [!TIP] | |||
> [!NOTE] | |||
> Please note that you should *not* try to blindly copy paste | |||
> the code. The examples are meant to be a template or a guide. | |||
> It is not meant to be something that will work out of the box. | |||
[Official template]: https://github.com/foxbot/DiscordBotBase/tree/csharp/src/DiscordBot | |||
[Official quick start guide]: https://github.com/RogueException/Discord.Net/blob/dev/docs/guides/getting_started/samples/intro/structure.cs | |||
[Task-based Asynchronous Pattern]: https://docs.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/task-based-asynchronous-pattern-tap | |||
[polymorphism]: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/polymorphism | |||
[interface]: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/interfaces/ | |||