| @@ -1,15 +1,45 @@ | |||
| # 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 | |||
| * 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* | |||
| \* 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 | |||
| 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": [ | |||
| { | |||
| "files": [ | |||
| "images/**" | |||
| "**/images/**", | |||
| "**/samples/**" | |||
| ], | |||
| "exclude": [ | |||
| "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 | |||
| .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 | |||
| 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] | |||
| 2. Retrieve the app's **Client ID**. | |||
|  | |||
| 3. Create an OAuth2 authorization URL | |||
| `https://discordapp.com/oauth2/authorize?client_id=<CLIENT ID>&scope=bot` | |||
| 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. | |||
| 6. Click authorize | |||
|  | |||
| ## Connecting to Discord | |||
| @@ -120,7 +123,7 @@ on your bot's application page on the [Discord Applications Portal]). | |||
| >[!IMPORTANT] | |||
| 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 | |||
| 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 | |||
| [API Documentation]: xref:Discord.Rest.BaseDiscordClient#Discord_Rest_BaseDiscordClient_Log | |||
| [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' | |||
| @@ -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.Rest; | |||
| using Discord.WebSocket; | |||
| 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 | |||
| }); | |||
| }); | |||
| _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; | |||
| } | |||
| } | |||