* docs: adjust wording of ActivityType.Watching enum Adjusts the xmldoc summary wording of the ActivityType.Watching enum to fix a wording issue. * Add D.NET Logo to Open Graph meta tags * Update DescriptionGenerator ...And update color to suit the logo better * Disable smooth scrolling due to user complaints * Remove unnecessary spacing in sideaffix * Update footer version * Remove featherlight plugin As it is unnecessary and can break image tags * Adjust wordings regarding safe-handling of secrets * Fix formatting for first bot token sample * Add badges to homepage * Minor wording fixes on terminal * Update to higher quality PNG * Add Discord.Net.Example in sln for build validation * Clarify all instances of IAsnycEnumerable * Clarify overridden props in SocketNewsChannel * Add returns and params docs for SyncPermissionsAsync * Remove/fix invalid XMLdoc strings * Remove AppVeyor and add GitHub badgepull/1386/head
@@ -36,7 +36,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Tests.Integrati | |||||
EndProject | EndProject | ||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{C7CF5621-7D36-433B-B337-5A2E3C101A71}" | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{C7CF5621-7D36-433B-B337-5A2E3C101A71}" | ||||
EndProject | EndProject | ||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Analyzers.Tests", "test\Discord.Net.Analyzers.Tests\Discord.Net.Analyzers.Tests.csproj", "{FC67057C-E92F-4E1C-98BE-46F839C8AD71}" | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Analyzers.Tests", "test\Discord.Net.Analyzers.Tests\Discord.Net.Analyzers.Tests.csproj", "{FC67057C-E92F-4E1C-98BE-46F839C8AD71}" | |||||
EndProject | |||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Examples", "src\Discord.Net.Examples\Discord.Net.Examples.csproj", "{47820065-3CFB-401C-ACEA-862BD564A404}" | |||||
EndProject | EndProject | ||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
@@ -204,6 +206,18 @@ Global | |||||
{FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x64.Build.0 = Release|Any CPU | {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x64.Build.0 = Release|Any CPU | ||||
{FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x86.ActiveCfg = Release|Any CPU | {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x86.ActiveCfg = Release|Any CPU | ||||
{FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x86.Build.0 = Release|Any CPU | {FC67057C-E92F-4E1C-98BE-46F839C8AD71}.Release|x86.Build.0 = Release|Any CPU | ||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x64.ActiveCfg = Debug|Any CPU | |||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x64.Build.0 = Debug|Any CPU | |||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x86.ActiveCfg = Debug|Any CPU | |||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Debug|x86.Build.0 = Debug|Any CPU | |||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Release|x64.ActiveCfg = Release|Any CPU | |||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Release|x64.Build.0 = Release|Any CPU | |||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Release|x86.ActiveCfg = Release|Any CPU | |||||
{47820065-3CFB-401C-ACEA-862BD564A404}.Release|x86.Build.0 = Release|Any CPU | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
@@ -221,6 +235,7 @@ Global | |||||
{DBF8B16E-5967-4480-8EDE-15D98A0DF0C4} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} | {DBF8B16E-5967-4480-8EDE-15D98A0DF0C4} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} | ||||
{E169E15A-E82C-45BF-8C24-C2CADB7093AA} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} | {E169E15A-E82C-45BF-8C24-C2CADB7093AA} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} | ||||
{FC67057C-E92F-4E1C-98BE-46F839C8AD71} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} | {FC67057C-E92F-4E1C-98BE-46F839C8AD71} = {C7CF5621-7D36-433B-B337-5A2E3C101A71} | ||||
{47820065-3CFB-401C-ACEA-862BD564A404} = {BB59D5B5-E7B0-4BF4-8F82-D14431B2799B} | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(ExtensibilityGlobals) = postSolution | GlobalSection(ExtensibilityGlobals) = postSolution | ||||
SolutionGuid = {D2404771-EEC8-45F2-9D71-F3373F6C1495} | SolutionGuid = {D2404771-EEC8-45F2-9D71-F3373F6C1495} | ||||
@@ -5,9 +5,18 @@ | |||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | ||||
<title>{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}</title> | <title>{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}</title> | ||||
<meta name="viewport" content="width=device-width"> | <meta name="viewport" content="width=device-width"> | ||||
<meta name="title" content="{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}"> | |||||
<meta property="og:title" content="{{#title}}{{title}}{{/title}}{{^title}}{{>partials/title}}{{/title}} {{#_appTitle}}| {{_appTitle}} {{/_appTitle}}"> | |||||
{{#_description}}<meta property="og:description" content="{{_description}}">{{/_description}} | |||||
<meta property="og:locale" content="en-us"> | |||||
<meta property="og:type" content="website"> | |||||
<meta property="og:site_name" content="Discord.Net Docs"> | |||||
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/discord-net/Discord.Net/docs/marketing/logo/PackageLogo.png"> | |||||
<meta property="og:image:alt" content="Discord.Net Logo"> | |||||
<meta name="theme-color" content="#995EA7"/> | |||||
<meta name="generator" content="docfx {{_docfxVersion}}"> | <meta name="generator" content="docfx {{_docfxVersion}}"> | ||||
{{#_description}}<meta name="description" content="{{_description}}">{{/_description}} | |||||
<meta property="docfx:navrel" content="{{_navRel}}"> | |||||
<meta property="docfx:tocrel" content="{{_tocRel}}"> | |||||
<meta id="docfx-style:rel" content="{{_rel}}"> | |||||
<link rel="preload" href="{{_rel}}styles/search-worker.js" as="script"> | <link rel="preload" href="{{_rel}}styles/search-worker.js" as="script"> | ||||
<link rel="preload" href="{{_rel}}fonts/glyphicons-halflings-regular.woff2" as="font" type="font/woff2" crossorigin="anonymous"> | <link rel="preload" href="{{_rel}}fonts/glyphicons-halflings-regular.woff2" as="font" type="font/woff2" crossorigin="anonymous"> | ||||
<link rel="shortcut icon" href="{{_rel}}{{{_appFaviconPath}}}{{^_appFaviconPath}}favicon.ico{{/_appFaviconPath}}"> | <link rel="shortcut icon" href="{{_rel}}{{{_appFaviconPath}}}{{^_appFaviconPath}}favicon.ico{{/_appFaviconPath}}"> | ||||
@@ -18,10 +27,6 @@ | |||||
<link rel="stylesheet" href="{{_rel}}styles/material.css"> | <link rel="stylesheet" href="{{_rel}}styles/material.css"> | ||||
<link rel="stylesheet" href="{{_rel}}styles/theme-switcher.css"> | <link rel="stylesheet" href="{{_rel}}styles/theme-switcher.css"> | ||||
<link href="https://cdn.rawgit.com/noelboss/featherlight/1.7.6/release/featherlight.min.css" type="text/css" rel="stylesheet" /> | <link href="https://cdn.rawgit.com/noelboss/featherlight/1.7.6/release/featherlight.min.css" type="text/css" rel="stylesheet" /> | ||||
<meta name="theme-color" content="#99AAB5"/> | |||||
<meta property="docfx:navrel" content="{{_navRel}}"> | |||||
<meta property="docfx:tocrel" content="{{_tocRel}}"> | |||||
<meta id="docfx-style:rel" content="{{_rel}}"> | |||||
{{#_noindex}}<meta name="searchOption" content="noindex">{{/_noindex}} | {{#_noindex}}<meta name="searchOption" content="noindex">{{/_noindex}} | ||||
{{#_enableSearch}}<meta property="docfx:rel" content="{{_rel}}">{{/_enableSearch}} | {{#_enableSearch}}<meta property="docfx:rel" content="{{_rel}}">{{/_enableSearch}} | ||||
{{#_enableNewTab}}<meta property="docfx:newtab" content="true">{{/_enableNewTab}} | {{#_enableNewTab}}<meta property="docfx:newtab" content="true">{{/_enableNewTab}} | ||||
@@ -3,8 +3,6 @@ | |||||
<script type="text/javascript" src="{{_rel}}styles/docfx.vendor.js"></script> | <script type="text/javascript" src="{{_rel}}styles/docfx.vendor.js"></script> | ||||
<script type="text/javascript" src="{{_rel}}styles/docfx.js"></script> | <script type="text/javascript" src="{{_rel}}styles/docfx.js"></script> | ||||
<script type="text/javascript" src="{{_rel}}styles/main.js"></script> | <script type="text/javascript" src="{{_rel}}styles/main.js"></script> | ||||
<script type="text/javascript" src="https://cdn.rawgit.com/noelboss/featherlight/master/release/featherlight.min.js" charset="utf-8"></script> | |||||
<script type="text/javascript" src="{{_rel}}styles/plugin-featherlight.js"></script> | |||||
<script type="text/javascript" src="{{_rel}}styles/styleswitcher.js"></script> | <script type="text/javascript" src="{{_rel}}styles/styleswitcher.js"></script> | ||||
<script type="text/javascript" src="https://malsup.github.io/jquery.corner.js"></script> | <script type="text/javascript" src="https://malsup.github.io/jquery.corner.js"></script> | ||||
<script type="text/javascript" src="{{_rel}}styles/cornerify.js"></script> | <script type="text/javascript" src="{{_rel}}styles/cornerify.js"></script> |
@@ -6,7 +6,6 @@ body { | |||||
font-display: optional; | font-display: optional; | ||||
height: 100%; | height: 100%; | ||||
font-size: 15px; | font-size: 15px; | ||||
scroll-behavior: smooth; | |||||
} | } | ||||
code{ | code{ | ||||
@@ -92,6 +91,10 @@ article.content h6{ | |||||
line-height: 140%; | line-height: 140%; | ||||
} | } | ||||
.sideaffix > div.contribution { | |||||
margin-bottom: 0; | |||||
} | |||||
header .navbar { | header .navbar { | ||||
border-width: 0 0 0px; | border-width: 0 0 0px; | ||||
border-radius: 0; | border-radius: 0; | ||||
@@ -1,37 +0,0 @@ | |||||
// MIT License | |||||
// Copyright (c) 2017 Roel Fauconnier | |||||
// Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
// of this software and associated documentation files (the "Software"), to deal | |||||
// in the Software without restriction, including without limitation the rights | |||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
// copies of the Software, and to permit persons to whom the Software is | |||||
// furnished to do so, subject to the following conditions: | |||||
// The above copyright notice and this permission notice shall be included in all | |||||
// copies or substantial portions of the Software. | |||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||||
// SOFTWARE. | |||||
$(document).ready(function() { | |||||
//find all images, but not the logo, and add the lightbox | |||||
$('img').not('#logo').each(function(){ | |||||
var $img = $(this); | |||||
var filename = $img.attr('src') | |||||
//add cursor | |||||
$img.css('cursor','zoom-in'); | |||||
$img.css('cursor','-moz-zoom-in'); | |||||
$img.css('cursor','-webkit-zoom-in'); | |||||
//add featherlight | |||||
$img.attr('alt', filename); | |||||
$img.featherlight(filename); | |||||
}); | |||||
}); |
@@ -35,7 +35,8 @@ | |||||
"**/images/**", | "**/images/**", | ||||
"**/samples/**", | "**/samples/**", | ||||
"langwordMapping.yml", | "langwordMapping.yml", | ||||
"marketing/logo/SVG/**.svg", | |||||
"marketing/logo/**.svg", | |||||
"marketing/logo/**.png", | |||||
"favicon.ico" | "favicon.ico" | ||||
] | ] | ||||
}], | }], | ||||
@@ -50,7 +51,7 @@ | |||||
"overwrite": "_overwrites/**/**.md", | "overwrite": "_overwrites/**/**.md", | ||||
"globalMetadata": { | "globalMetadata": { | ||||
"_appTitle": "Discord.Net Documentation", | "_appTitle": "Discord.Net Documentation", | ||||
"_appFooter": "Discord.Net (c) 2015-2019 2.0.1", | |||||
"_appFooter": "Discord.Net (c) 2015-2019 2.1.1", | |||||
"_enableSearch": true, | "_enableSearch": true, | ||||
"_appLogoPath": "marketing/logo/SVG/Logomark Purple.svg", | "_appLogoPath": "marketing/logo/SVG/Logomark Purple.svg", | ||||
"_appFaviconPath": "favicon.ico" | "_appFaviconPath": "favicon.ico" | ||||
@@ -146,23 +146,6 @@ method with the application's "token." | |||||
> Pay attention to what you are copying from the developer portal! | > Pay attention to what you are copying from the developer portal! | ||||
> A token is not the same as the application's "client secret." | > A token is not the same as the application's "client secret." | ||||
> [!IMPORTANT] | |||||
> Your bot's token can be used to gain total access to your bot, so | |||||
> **do not** share this token with anyone else! You should store this | |||||
> token in an external source if you plan on distributing | |||||
> the source code for your bot. | |||||
> | |||||
> In the following example, we retrieve the token from the environment | |||||
> variable `DiscordToken`. Please note that this is *not* designed to | |||||
> be used in a production environment, as the secrets are stored in | |||||
> plain-text. | |||||
> | |||||
> For information on how to set an environment variable, please see | |||||
> instructions below, | |||||
> | |||||
> * Windows: [How to Create Environment Variables Shortcut in Windows](https://www.tenforums.com/tutorials/121742-create-environment-variables-shortcut-windows.html) | |||||
> * Linux: [How To Read and Set Environmental and Shell Variables on a Linux VPS](https://www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-a-linux-vps) | |||||
> * macOS: [How do I set environment variables on OS X?](https://apple.stackexchange.com/questions/106778/how-do-i-set-environment-variables-on-os-x) | |||||
We may now invoke the client's [StartAsync] method, which will | We may now invoke the client's [StartAsync] method, which will | ||||
start connection/reconnection logic. It is important to note that | start connection/reconnection logic. It is important to note that | ||||
@@ -175,6 +158,22 @@ Finally, we will want to block the async main method from returning | |||||
when running the application. To do this, we can await an infinite delay | when running the application. To do this, we can await an infinite delay | ||||
or any other blocking method, such as reading from the console. | or any other blocking method, such as reading from the console. | ||||
> [!IMPORTANT] | |||||
> Your bot's token can be used to gain total access to your bot, so | |||||
> **do not** share this token with anyone else! You should store this | |||||
> token in an external source if you plan on distributing | |||||
> the source code for your bot. | |||||
> | |||||
> In the following example, we retrieve the token from a pre-defined | |||||
> variable, which is **NOT** secure, especially if you plan on | |||||
> distributing the application in any shape or form. | |||||
> | |||||
> We recommend alternative storage such as | |||||
> [Environment Variables], an external configuration file, or a | |||||
> secrets manager for safe-handling of secrets. | |||||
> | |||||
> [Environment Variables]: https://en.wikipedia.org/wiki/Environment_variable | |||||
The following lines can now be added: | The following lines can now be added: | ||||
[!code-csharp[Create client](samples/first-bot/client.cs)] | [!code-csharp[Create client](samples/first-bot/client.cs)] | ||||
@@ -78,7 +78,7 @@ published to our [MyGet feed]. See | |||||
### [Using dotnet CLI](#tab/dotnet-cli) | ### [Using dotnet CLI](#tab/dotnet-cli) | ||||
1. Launch your terminal | |||||
1. Launch a terminal of your choice | |||||
2. Navigate to where your `*.csproj` is located | 2. Navigate to where your `*.csproj` is located | ||||
3. Enter `dotnet add package Discord.Net` | 3. Enter `dotnet add package Discord.Net` | ||||
@@ -90,7 +90,7 @@ In order to compile Discord.Net, you will need the following: | |||||
### Using Visual Studio | ### Using Visual Studio | ||||
* [Visual Studio 2017](https://www.visualstudio.com/) | |||||
* [Visual Studio 2019](https://visualstudio.microsoft.com/) | |||||
* [.NET Core SDK] | * [.NET Core SDK] | ||||
The .NET Core and Docker workload is required during Visual Studio | The .NET Core and Docker workload is required during Visual Studio | ||||
@@ -109,7 +109,7 @@ When running any Discord.Net-powered bot on an older operating system | |||||
you may encounter a @System.PlatformNotSupportedException upon | you may encounter a @System.PlatformNotSupportedException upon | ||||
connecting. | connecting. | ||||
You may resolve this by either targeting .NET Core 2.1 or later, or | |||||
You may resolve this by either targeting .NET Core 2.1 or higher, or | |||||
by installing one or more custom packages as listed below. | by installing one or more custom packages as listed below. | ||||
#### [Targeting .NET Core 2.1](#tab/core2-1) | #### [Targeting .NET Core 2.1](#tab/core2-1) | ||||
@@ -141,4 +141,4 @@ over the default ones. | |||||
*** | *** | ||||
[.NET Core SDK]: https://www.microsoft.com/net/download/ | |||||
[.NET Core SDK]: https://dotnet.microsoft.com/download |
@@ -53,7 +53,7 @@ adding the feed to your package source. | |||||
### [Using dotnet CLI](#tab/cli) | ### [Using dotnet CLI](#tab/cli) | ||||
1. Launch your terminal | |||||
1. Launch a terminal of your choice | |||||
2. Navigate to where your `*.csproj` is located | 2. Navigate to where your `*.csproj` is located | ||||
3. Type `dotnet add package Discord.Net --source https://www.myget.org/F/discord-net/api/v3/index.json` | 3. Type `dotnet add package Discord.Net --source https://www.myget.org/F/discord-net/api/v3/index.json` | ||||
@@ -2,22 +2,22 @@ private DiscordSocketClient _client; | |||||
public async Task MainAsync() | public async Task MainAsync() | ||||
{ | { | ||||
_client = new DiscordSocketClient(); | |||||
_client = new DiscordSocketClient(); | |||||
_client.Log += Log; | |||||
// You can assign your bot token to a string, and pass that in to connect. | |||||
// This however is insecure, particularly if you plan to have your code hosted in a repository. | |||||
_client.Log += Log; | |||||
// You can assign your bot token to a string, and pass that in to connect. | |||||
// This is, however, insecure, particularly if you plan to have your code hosted in a public repository. | |||||
var token = "token"; | var token = "token"; | ||||
// Some alternative options would be to keep your token in an Environment Variable or a standalone file. | |||||
// Some alternative options would be to keep your token in an Environment Variable or a standalone file. | |||||
// var token = Environment.GetEnvironmentVariable("NameOfYourEnvironmentVariable"); | // var token = Environment.GetEnvironmentVariable("NameOfYourEnvironmentVariable"); | ||||
// var token = File.ReadAllText("token.txt"); | // var token = File.ReadAllText("token.txt"); | ||||
// var token = JsonConvert.DeserializeObject<AConfigurationClass>(File.ReadAllText("config.json")).Token; | // var token = JsonConvert.DeserializeObject<AConfigurationClass>(File.ReadAllText("config.json")).Token; | ||||
await _client.LoginAsync(TokenType.Bot, token); | |||||
await _client.StartAsync(); | |||||
await _client.LoginAsync(TokenType.Bot, token); | |||||
await _client.StartAsync(); | |||||
// Block this task until the program is closed. | |||||
await Task.Delay(-1); | |||||
} | |||||
// Block this task until the program is closed. | |||||
await Task.Delay(-1); | |||||
} |
@@ -5,7 +5,13 @@ title: Home | |||||
# Discord.Net Documentation | # Discord.Net Documentation | ||||
<div class="big-logo logo-switcher" /> | |||||
<div class="big-logo logo-switcher"></div> | |||||
[](https://github.com/discord-net/Discord.Net) | |||||
[](https://www.nuget.org/packages/Discord.Net) | |||||
[](https://www.myget.org/feed/Packages/discord-net) | |||||
[](https://dev.azure.com/discord-net/Discord.Net/_build/latest?definitionId=1&branchName=dev) | |||||
[](https://discord.gg/jkrBmQR) | |||||
## What is Discord.Net? | ## What is Discord.Net? | ||||
@@ -20,11 +26,3 @@ If this is your first time using Discord.Net, you should refer to the | |||||
More experienced users might want to refer to the | More experienced users might want to refer to the | ||||
[API Documentation](xref:API.Docs) for a breakdown of the individual | [API Documentation](xref:API.Docs) for a breakdown of the individual | ||||
objects in the library. | objects in the library. | ||||
## Additional Resources | |||||
- [Discord API Guild](https://discord.gg/discord-api) - Look for `#dotnet_discord-net` | |||||
- [GitHub](https://github.com/RogueException/Discord.Net/) | |||||
- [NuGet](https://www.nuget.org/packages/Discord.Net/) | |||||
- [MyGet Feed](https://www.myget.org/feed/Packages/discord-net) - Add-ons and nightly builds | |||||
- [AppVeyor CI](https://ci.appveyor.com/project/RogueException/discord-net) - Nightly builds via Continuous Integration |
@@ -18,7 +18,7 @@ namespace Discord | |||||
/// </summary> | /// </summary> | ||||
Listening = 2, | Listening = 2, | ||||
/// <summary> | /// <summary> | ||||
/// The user is watching a media. | |||||
/// The user is watching some form of media. | |||||
/// </summary> | /// </summary> | ||||
Watching = 3 | Watching = 3 | ||||
} | } | ||||
@@ -1,14 +1,15 @@ | |||||
namespace Discord | namespace Discord | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// Specifies the direction of where message(s) should be retrieved from. | |||||
/// Specifies the direction of where message(s) should be retrieved from. | |||||
/// </summary> | /// </summary> | ||||
/// <remarks> | /// <remarks> | ||||
/// This enum is used to specify the direction for retrieving messages. | /// This enum is used to specify the direction for retrieving messages. | ||||
/// <note type="important"> | /// <note type="important"> | ||||
/// At the time of writing, <see cref="Around"/> is not yet implemented into | /// At the time of writing, <see cref="Around"/> is not yet implemented into | ||||
/// <see cref="IMessageChannel.GetMessagesAsync"/>. Attempting to use the method with <see cref="Around"/> | |||||
/// as its direction will throw a <see cref="System.NotImplementedException"/>. | |||||
/// <see cref="IMessageChannel.GetMessagesAsync(int, CacheMode, RequestOptions)"/>. | |||||
/// Attempting to use the method with <see cref="Around"/> will throw | |||||
/// a <see cref="System.NotImplementedException"/>. | |||||
/// </note> | /// </note> | ||||
/// </remarks> | /// </remarks> | ||||
public enum Direction | public enum Direction | ||||
@@ -17,14 +17,24 @@ namespace Discord | |||||
string Name { get; } | string Name { get; } | ||||
/// <summary> | /// <summary> | ||||
/// Gets a collection of all users in this channel. | |||||
/// Gets a collection of users that are able to view the channel or are currently in this channel. | |||||
/// </summary> | /// </summary> | ||||
/// <remarks> | |||||
/// <note type="important"> | |||||
/// The returned collection is an asynchronous enumerable object; one must call | |||||
/// <see cref="AsyncEnumerableExtensions.FlattenAsync{T}"/> to access the individual messages as a | |||||
/// collection. | |||||
/// </note> | |||||
/// This method will attempt to fetch all users that is able to view this channel or is currently in this channel. | |||||
/// The library will attempt to split up the requests according to and <see cref="DiscordConfig.MaxUsersPerBatch"/>. | |||||
/// In other words, if there are 3000 users, and the <see cref="Discord.DiscordConfig.MaxUsersPerBatch"/> constant | |||||
/// is <c>1000</c>, the request will be split into 3 individual requests; thus returning 53individual asynchronous | |||||
/// responses, hence the need of flattening. | |||||
/// </remarks> | |||||
/// <param name="mode">The <see cref="CacheMode"/> that determines whether the object should be fetched from cache.</param> | /// <param name="mode">The <see cref="CacheMode"/> that determines whether the object should be fetched from cache.</param> | ||||
/// <param name="options">The options to be used when sending the request.</param> | /// <param name="options">The options to be used when sending the request.</param> | ||||
/// <returns> | /// <returns> | ||||
/// A paged collection containing a collection of users that can access this channel. Flattening the | |||||
/// paginated response into a collection of users with | |||||
/// <see cref="AsyncEnumerableExtensions.FlattenAsync{T}"/> is required if you wish to access the users. | |||||
/// Paged collection of users. | |||||
/// </returns> | /// </returns> | ||||
IAsyncEnumerable<IReadOnlyCollection<IUser>> GetUsersAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); | IAsyncEnumerable<IReadOnlyCollection<IUser>> GetUsersAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); | ||||
@@ -132,14 +132,16 @@ namespace Discord | |||||
Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions options = null); | Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions options = null); | ||||
/// <summary> | /// <summary> | ||||
/// Gets a collection of users that are able to view the channel. | |||||
/// Gets a collection of users that are able to view the channel or are currently in this channel. | |||||
/// </summary> | /// </summary> | ||||
/// <remarks> | |||||
/// This method follows the same behavior as described in <see cref="IChannel.GetUsersAsync"/>. | |||||
/// Please visit its documentation for more details on this method. | |||||
/// </remarks> | |||||
/// <param name="mode">The <see cref="CacheMode" /> that determines whether the object should be fetched from cache.</param> | /// <param name="mode">The <see cref="CacheMode" /> that determines whether the object should be fetched from cache.</param> | ||||
/// <param name="options">The options to be used when sending the request.</param> | /// <param name="options">The options to be used when sending the request.</param> | ||||
/// <returns> | /// <returns> | ||||
/// A paged collection containing a collection of guild users that can access this channel. Flattening the | |||||
/// paginated response into a collection of users with | |||||
/// <see cref="AsyncEnumerableExtensions.FlattenAsync{T}"/> is required if you wish to access the users. | |||||
/// Paged collection of users. | |||||
/// </returns> | /// </returns> | ||||
new IAsyncEnumerable<IReadOnlyCollection<IGuildUser>> GetUsersAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); | new IAsyncEnumerable<IReadOnlyCollection<IGuildUser>> GetUsersAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); | ||||
/// <summary> | /// <summary> | ||||
@@ -26,10 +26,14 @@ namespace Discord | |||||
/// representing the parent of this channel; <c>null</c> if none is set. | /// representing the parent of this channel; <c>null</c> if none is set. | ||||
/// </returns> | /// </returns> | ||||
Task<ICategoryChannel> GetCategoryAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); | Task<ICategoryChannel> GetCategoryAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); | ||||
/// <summary> | /// <summary> | ||||
/// Syncs the permissions of this nested channel with its parent's. | /// Syncs the permissions of this nested channel with its parent's. | ||||
/// </summary> | /// </summary> | ||||
/// <param name="options">The options to be used when sending the request.</param> | |||||
/// <returns> | |||||
/// A task that represents the asynchronous operation for syncing channel permissions with its parent's. | |||||
/// </returns> | |||||
Task SyncPermissionsAsync(RequestOptions options = null); | Task SyncPermissionsAsync(RequestOptions options = null); | ||||
/// <summary> | /// <summary> | ||||
@@ -586,11 +586,11 @@ namespace Discord | |||||
/// <remarks> | /// <remarks> | ||||
/// This method requires you have an OAuth2 access token for the user, requested with the guilds.join scope, and that the bot have the MANAGE_INVITES permission in the guild. | /// This method requires you have an OAuth2 access token for the user, requested with the guilds.join scope, and that the bot have the MANAGE_INVITES permission in the guild. | ||||
/// </remarks> | /// </remarks> | ||||
/// <param name="id">The snowflake identifier of the user.</param> | |||||
/// <param name="userId">The snowflake identifier of the user.</param> | |||||
/// <param name="accessToken">The OAuth2 access token for the user, requested with the guilds.join scope.</param> | /// <param name="accessToken">The OAuth2 access token for the user, requested with the guilds.join scope.</param> | ||||
/// <param name="func">The delegate containing the properties to be applied to the user upon being added to the guild.</param> | /// <param name="func">The delegate containing the properties to be applied to the user upon being added to the guild.</param> | ||||
/// <param name="options">The options to be used when sending the request.</param> | /// <param name="options">The options to be used when sending the request.</param> | ||||
/// <returns>A guild user associated with the specified <paramref name="id" />; <c>null</c> if the user is already in the guild.</returns> | |||||
/// <returns>A guild user associated with the specified <paramref name="userId" />; <c>null</c> if the user is already in the guild.</returns> | |||||
Task<IGuildUser> AddGuildUserAsync(ulong userId, string accessToken, Action<AddGuildUserProperties> func = null, RequestOptions options = null); | Task<IGuildUser> AddGuildUserAsync(ulong userId, string accessToken, Action<AddGuildUserProperties> func = null, RequestOptions options = null); | ||||
/// <summary> | /// <summary> | ||||
/// Gets a collection of all users in this guild. | /// Gets a collection of all users in this guild. | ||||
@@ -73,7 +73,7 @@ namespace Discord | |||||
/// </summary> | /// </summary> | ||||
/// <example> | /// <example> | ||||
/// The following example checks if the current user has the ability to send a message with attachment in | /// The following example checks if the current user has the ability to send a message with attachment in | ||||
/// this channel; if so, uploads a file via <see cref="IMessageChannel.SendFileAsync"/>. | |||||
/// this channel; if so, uploads a file via <see cref="IMessageChannel.SendFileAsync(string, string, bool, Embed, RequestOptions, bool)"/>. | |||||
/// <code language="cs"> | /// <code language="cs"> | ||||
/// if (currentUser?.GetPermissions(targetChannel)?.AttachFiles) | /// if (currentUser?.GetPermissions(targetChannel)?.AttachFiles) | ||||
/// await targetChannel.SendFileAsync("fortnite.png"); | /// await targetChannel.SendFileAsync("fortnite.png"); | ||||
@@ -5,6 +5,11 @@ using System.Threading.Tasks; | |||||
namespace Discord | namespace Discord | ||||
{ | { | ||||
/// <summary> An extension class for squashing <see cref="IAsyncEnumerable{T}"/>. </summary> | /// <summary> An extension class for squashing <see cref="IAsyncEnumerable{T}"/>. </summary> | ||||
/// <remarks> | |||||
/// This set of extension methods will squash an <see cref="IAsyncEnumerable{T}"/> into a | |||||
/// single <see cref="IEnumerable{T}"/>. This is often associated with requests that has a | |||||
/// set limit when requesting. | |||||
/// </remarks> | |||||
public static class AsyncEnumerableExtensions | public static class AsyncEnumerableExtensions | ||||
{ | { | ||||
/// <summary> Flattens the specified pages into one <see cref="IEnumerable{T}"/> asynchronously. </summary> | /// <summary> Flattens the specified pages into one <see cref="IEnumerable{T}"/> asynchronously. </summary> | ||||
@@ -294,7 +294,6 @@ namespace Discord.Rest | |||||
/// <summary> | /// <summary> | ||||
/// Gets a collection of all text channels in this guild. | /// Gets a collection of all text channels in this guild. | ||||
/// </summary> | /// </summary> | ||||
/// <param name="mode">The <see cref="CacheMode"/> that determines whether the object should be fetched from cache.</param> | |||||
/// <param name="options">The options to be used when sending the request.</param> | /// <param name="options">The options to be used when sending the request.</param> | ||||
/// <returns> | /// <returns> | ||||
/// A task that represents the asynchronous get operation. The task result contains a read-only collection of | /// A task that represents the asynchronous get operation. The task result contains a read-only collection of | ||||
@@ -9,6 +9,11 @@ namespace Discord.WebSocket | |||||
/// <summary> | /// <summary> | ||||
/// Represents a WebSocket-based news channel in a guild that has the same properties as a <see cref="SocketTextChannel"/>. | /// Represents a WebSocket-based news channel in a guild that has the same properties as a <see cref="SocketTextChannel"/>. | ||||
/// </summary> | /// </summary> | ||||
/// <remarks> | |||||
/// <note type="warning"> | |||||
/// Most of the properties and methods featured may not be supported due to the nature of the channel. | |||||
/// </note> | |||||
/// </remarks> | |||||
[DebuggerDisplay(@"{DebuggerDisplay,nq}")] | [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | ||||
public class SocketNewsChannel : SocketTextChannel | public class SocketNewsChannel : SocketTextChannel | ||||
{ | { | ||||
@@ -22,31 +27,61 @@ namespace Discord.WebSocket | |||||
entity.Update(state, model); | entity.Update(state, model); | ||||
return entity; | return entity; | ||||
} | } | ||||
/// <inheritdoc /> | |||||
/// <remarks> | |||||
/// <note type="important"> | |||||
/// This property is not supported by this type. Attempting to use this property will result in a <see cref="NotSupportedException"/>. | |||||
/// </note> | |||||
/// </remarks> | |||||
public override int SlowModeInterval | public override int SlowModeInterval | ||||
{ | |||||
get { throw new NotSupportedException("News channels do not support Slow Mode."); } | |||||
} | |||||
=> throw new NotSupportedException("News channels do not support Slow Mode."); | |||||
/// <inheritdoc /> | |||||
/// <remarks> | |||||
/// <note type="important"> | |||||
/// This method is not supported by this type. Attempting to use this method will result in a <see cref="NotSupportedException"/>. | |||||
/// </note> | |||||
/// </remarks> | |||||
public override Task AddPermissionOverwriteAsync(IRole role, OverwritePermissions permissions, RequestOptions options = null) | public override Task AddPermissionOverwriteAsync(IRole role, OverwritePermissions permissions, RequestOptions options = null) | ||||
{ | |||||
throw new NotSupportedException("News channels do not support Overwrite Permissions."); | |||||
} | |||||
=> throw new NotSupportedException("News channels do not support Overwrite Permissions."); | |||||
/// <inheritdoc /> | |||||
/// <remarks> | |||||
/// <note type="important"> | |||||
/// This method is not supported by this type. Attempting to use this method will result in a <see cref="NotSupportedException"/>. | |||||
/// </note> | |||||
/// </remarks> | |||||
public override Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions options = null) | public override Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions, RequestOptions options = null) | ||||
{ | |||||
throw new NotSupportedException("News channels do not support Overwrite Permissions."); | |||||
} | |||||
=> throw new NotSupportedException("News channels do not support Overwrite Permissions."); | |||||
/// <inheritdoc /> | |||||
/// <remarks> | |||||
/// <note type="important"> | |||||
/// This property is not supported by this type. Attempting to use this property will result in a <see cref="NotSupportedException"/>. | |||||
/// </note> | |||||
/// </remarks> | |||||
public override IReadOnlyCollection<Overwrite> PermissionOverwrites | public override IReadOnlyCollection<Overwrite> PermissionOverwrites | ||||
=> throw new NotSupportedException("News channels do not support Overwrite Permissions."); | => throw new NotSupportedException("News channels do not support Overwrite Permissions."); | ||||
/// <inheritdoc /> | |||||
/// <remarks> | |||||
/// <note type="important"> | |||||
/// This method is not supported by this type. Attempting to use this method will result in a <see cref="NotSupportedException"/>. | |||||
/// </note> | |||||
/// </remarks> | |||||
public override Task SyncPermissionsAsync(RequestOptions options = null) | public override Task SyncPermissionsAsync(RequestOptions options = null) | ||||
{ | |||||
throw new NotSupportedException("News channels do not support Overwrite Permissions."); | |||||
} | |||||
=> throw new NotSupportedException("News channels do not support Overwrite Permissions."); | |||||
/// <inheritdoc /> | |||||
/// <remarks> | |||||
/// <note type="important"> | |||||
/// This method is not supported by this type. Attempting to use this method will result in a <see cref="NotSupportedException"/>. | |||||
/// </note> | |||||
/// </remarks> | |||||
public override Task RemovePermissionOverwriteAsync(IRole role, RequestOptions options = null) | public override Task RemovePermissionOverwriteAsync(IRole role, RequestOptions options = null) | ||||
{ | |||||
throw new NotSupportedException("News channels do not support Overwrite Permissions."); | |||||
} | |||||
=> throw new NotSupportedException("News channels do not support Overwrite Permissions."); | |||||
/// <inheritdoc /> | |||||
/// <remarks> | |||||
/// <note type="important"> | |||||
/// This method is not supported by this type. Attempting to use this method will result in a <see cref="NotSupportedException"/>. | |||||
/// </note> | |||||
/// </remarks> | |||||
public override Task RemovePermissionOverwriteAsync(IUser user, RequestOptions options = null) | public override Task RemovePermissionOverwriteAsync(IUser user, RequestOptions options = null) | ||||
{ | |||||
throw new NotSupportedException("News channels do not support Overwrite Permissions."); | |||||
} | |||||
=> throw new NotSupportedException("News channels do not support Overwrite Permissions."); | |||||
} | } | ||||
} | } |