| @@ -1,15 +1,45 @@ | |||||
| # Contributing to Docs | # Contributing to Docs | ||||
| I don't really have any strict conditions for writing documentation, but just keep these few guidelines in mind: | |||||
| I don't really have any strict conditions for writing documentation, | |||||
| but just keep these few guidelines in mind: | |||||
| * Keep code samples in the `guides/samples` folder | * Keep code samples in the `guides/samples` folder | ||||
| * When referencing an object in the API, link to it's page in the API documentation. | |||||
| * When referencing an object in the API, link to it's page in the | |||||
| API documentation. | |||||
| * Documentation should be written in clear and proper English* | * Documentation should be written in clear and proper English* | ||||
| \* If anyone is interested in translating documentation into other languages, please open an issue or contact me on Discord (`foxbot#0282`). | |||||
| \* If anyone is interested in translating documentation into other | |||||
| languages, please open an issue or contact me on | |||||
| Discord (`foxbot#0282`). | |||||
| ### Layout | |||||
| Documentation should be written in a FAQ/Wiki style format. | |||||
| Recommended reads: | |||||
| * http://docs.microsoft.com | |||||
| * http://flask.pocoo.org/docs/0.12/ | |||||
| Style consistencies: | |||||
| * Use a ruler set at 70 characters | |||||
| * Links should use long syntax | |||||
| Example of long link syntax: | |||||
| ``` | |||||
| Please consult the [API Documentation] for more information. | |||||
| [API Documentation]: xref:System.String | |||||
| ``` | |||||
| ### Compiling | ### Compiling | ||||
| Documentation is compiled into a static site using [DocFx](https://dotnet.github.io/docfx/). We currently use version 2.8 | |||||
| Documentation is compiled into a static site using [DocFx]. | |||||
| We currently use the most recent build off the dev branch. | |||||
| After making changes, compile your changes into the static site with | |||||
| `docfx`. You can also view your changes live with `docfx --serve`. | |||||
| After making changes, compile your changes into the static site with `docfx`. You can also view your changes live with `docfx --serve`. | |||||
| [DocFx]: https://dotnet.github.io/docfx/ | |||||
| @@ -42,7 +42,8 @@ | |||||
| "resource": [ | "resource": [ | ||||
| { | { | ||||
| "files": [ | "files": [ | ||||
| "images/**" | |||||
| "**/images/**", | |||||
| "**/samples/**" | |||||
| ], | ], | ||||
| "exclude": [ | "exclude": [ | ||||
| "obj/**", | "obj/**", | ||||
| @@ -11,7 +11,7 @@ Optionally, you may compile from source and install yourself. | |||||
| Currently, Discord.Net targets [.NET Standard] 1.3, and offers support for | Currently, Discord.Net targets [.NET Standard] 1.3, and offers support for | ||||
| .NET Standard 1.1. If your application will be targeting .NET Standard 1.1, | .NET Standard 1.1. If your application will be targeting .NET Standard 1.1, | ||||
| please see the [additional steps](#installing-on-.net-standard-11). | |||||
| please see the [additional steps](#installing-on-net-standard-11). | |||||
| Since Discord.Net is built on the .NET Standard, it is also recommended to | Since Discord.Net is built on the .NET Standard, it is also recommended to | ||||
| create applications using [.NET Core], though you are not required to. When | create applications using [.NET Core], though you are not required to. When | ||||
| @@ -34,7 +34,9 @@ through the OAuth2 flow. | |||||
| 1. Open your bot's application on the [Discord Applications Portal] | 1. Open your bot's application on the [Discord Applications Portal] | ||||
| 2. Retrieve the app's **Client ID**. | 2. Retrieve the app's **Client ID**. | ||||
|  |  | ||||
| 3. Create an OAuth2 authorization URL | 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 | 4. Open the authorization URL in your browser | ||||
| @@ -45,6 +47,7 @@ Only servers where you have the `MANAGE_SERVER` permission will be | |||||
| present in this list. | present in this list. | ||||
| 6. Click authorize | 6. Click authorize | ||||
|  |  | ||||
| ## Connecting to Discord | ## Connecting to Discord | ||||
| @@ -120,7 +123,7 @@ on your bot's application page on the [Discord Applications Portal]). | |||||
| >[!IMPORTANT] | >[!IMPORTANT] | ||||
| Your bot's token can be used to gain total access to your bot, so | Your bot's token can be used to gain total access to your bot, so | ||||
| **do __NOT__ share this token with anyone!**. It may behoove you to | |||||
| **do __NOT__ share this token with anyone!** It may behoove you to | |||||
| store this token in an external file if you plan on distributing the | store this token in an external file if you plan on distributing the | ||||
| source code for your bot. | source code for your bot. | ||||
| @@ -157,7 +160,7 @@ for how to fix this. | |||||
| [TAP]: https://docs.microsoft.com/en-us/dotnet/articles/csharp/async | [TAP]: https://docs.microsoft.com/en-us/dotnet/articles/csharp/async | ||||
| [API Documentation]: xref:Discord.Rest.BaseDiscordClient#Discord_Rest_BaseDiscordClient_Log | [API Documentation]: xref:Discord.Rest.BaseDiscordClient#Discord_Rest_BaseDiscordClient_Log | ||||
| [DiscordSocketClient]: xref:Discord.WebSocket.DiscordSocketClient | [DiscordSocketClient]: xref:Discord.WebSocket.DiscordSocketClient | ||||
| [installing guide]: installing.md#installing-on-.net-standard-11 | |||||
| [installing guide]: installing.md#installing-on-net-standard-11 | |||||
| ### Handling a 'ping' | ### Handling a 'ping' | ||||
| @@ -1,11 +1,42 @@ | |||||
| # Using the Logger | |||||
| --- | |||||
| title: Logging | |||||
| --- | |||||
| Discord.Net will automatically output log messages through the [Log](xref:Discord.DiscordClient#Discord_DiscordClient_Log) event. | |||||
| Discord.Net's clients provide a [Log] event that all messages will be | |||||
| disbatched over. | |||||
| ## Usage | |||||
| For more information about events in Discord.Net, see the [Events] | |||||
| section. | |||||
| To handle Log Messages through Discord.Net's Logger, hook into the [Log](xref:Discord.DiscordClient#Discord_DiscordClient_Log) event. | |||||
| [Log]: xref:Discord.Rest.BaseDiscordClient#Discord_Rest_BaseDiscordClient_Log | |||||
| [Events]: events.md | |||||
| The @Discord.LogMessage object has a custom `ToString` method attached to it, when outputting log messages, it is reccomended you use this, instead of building your own output message. | |||||
| ### Usage | |||||
| [!code-csharp[](samples/logging.cs)] | |||||
| To receive log events, simply hook the discord client's log method | |||||
| to a Task with a single parameter of type [LogMessage] | |||||
| It is recommended that you use an established function instead of a | |||||
| lambda for handling logs, because most [addons] accept a reference | |||||
| to a logging function to write their own messages. | |||||
| ### Usage in Commands | |||||
| Discord.Net's [CommandService] also provides a log event, identical | |||||
| in signature to other log events. | |||||
| Data logged through this event is typically coupled with a | |||||
| [CommandException], where information about the command's context | |||||
| and error can be found and handled. | |||||
| #### Samples | |||||
| [!code-csharp[Logging Sample](samples/logging.cs)] | |||||
| #### Tips | |||||
| Due to the nature of Discord.Net's event system, all log event | |||||
| handlers will be executed synchronously on the gateway thread. If your | |||||
| log output will be dumped to a Web API (e.g. Sentry), you are advised | |||||
| to wrap your output in a `Task.Run` so the gateway thread does not | |||||
| become blocked while waiting for logging data to be written. | |||||
| @@ -1,28 +1,29 @@ | |||||
| using Discord; | using Discord; | ||||
| using Discord.Rest; | |||||
| using Discord.WebSocket; | |||||
| public class Program | public class Program | ||||
| { | { | ||||
| private DiscordSocketClient _client; | |||||
| static void Main(string[] args) => new Program().Start().GetAwaiter().GetResult(); | |||||
| public async Task Start() | |||||
| { | |||||
| _client = new DiscordSocketClient(new DiscordSocketConfig() { | |||||
| private DiscordSocketClient _client; | |||||
| static void Main(string[] args) => new Program().MainAsync().GetAwaiter().GetResult(); | |||||
| public async Task MainAsync() | |||||
| { | |||||
| _client = new DiscordSocketClient(new DiscordSocketConfig | |||||
| { | |||||
| LogLevel = LogSeverity.Info | LogLevel = LogSeverity.Info | ||||
| }); | |||||
| }); | |||||
| _client.Log += Log; | |||||
| _client.Log += Log; | |||||
| await _client.LoginAsync(TokenType.Bot, "bot token"); | |||||
| await _client.ConnectAsync(); | |||||
| await Task.Delay(-1); | |||||
| } | |||||
| await _client.LoginAsync(TokenType.Bot, "bot token"); | |||||
| await _client.StartAsync(); | |||||
| await Task.Delay(-1); | |||||
| } | |||||
| private Task Log(LogMessage message) | |||||
| { | |||||
| Console.WriteLine(message.ToString()); | |||||
| return Task.CompletedTask; | |||||
| } | |||||
| } | |||||
| private Task Log(LogMessage message) | |||||
| { | |||||
| Console.WriteLine(message.ToString()); | |||||
| return Task.CompletedTask; | |||||
| } | |||||
| } | |||||