diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 000000000..c6d1c1334
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,380 @@
+###############################################################################
+# EditorConfig is awesome: http://EditorConfig.org
+###############################################################################
+
+###############################################################################
+# Top-most EditorConfig file
+###############################################################################
+root = true
+
+###############################################################################
+# Set default behavior to:
+# a UTF-8 encoding,
+# Unix-style line endings,
+# a newline ending the file,
+# 4 space indentation, and
+# trimming of trailing whitespace
+###############################################################################
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = true
+
+###############################################################################
+# Set file behavior to:
+# 2 space indentation
+###############################################################################
+[*.{cmd,config,csproj,json,nuspec,props,ps1,resx,sh,targets,yml}]
+indent_size = 2
+
+###############################################################################
+# Set file behavior to:
+# Windows-style line endings, and
+# tabular indentation
+###############################################################################
+[*.sln]
+end_of_line = crlf
+indent_style = tab
+
+###############################################################################
+# Set dotnet naming rules to:
+# suggest async members be pascal case suffixed with Async
+# suggest const declarations be pascal case
+# suggest interfaces be pascal case prefixed with I
+# suggest parameters be camel case
+# suggest private and internal static fields be pascal case
+# suggest private and internal fields be camel case and prefixed with underscore
+# suggest public and protected declarations be pascal case
+# suggest static readonly declarations be pascal case
+# suggest type parameters be prefixed with T
+###############################################################################
+[*.cs]
+dotnet_naming_rule.async_members_should_be_pascal_case_suffixed_with_async.severity = suggestion
+dotnet_naming_rule.async_members_should_be_pascal_case_suffixed_with_async.style = pascal_case_suffixed_with_async
+dotnet_naming_rule.async_members_should_be_pascal_case_suffixed_with_async.symbols = async_members
+
+dotnet_naming_rule.const_declarations_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.const_declarations_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.const_declarations_should_be_pascal_case.symbols = const_declarations
+
+dotnet_naming_rule.interfaces_should_be_pascal_case_prefixed_with_i.severity = suggestion
+dotnet_naming_rule.interfaces_should_be_pascal_case_prefixed_with_i.style = pascal_case_prefixed_with_i
+dotnet_naming_rule.interfaces_should_be_pascal_case_prefixed_with_i.symbols = interfaces
+
+dotnet_naming_rule.parameters_should_be_camel_case.severity = suggestion
+dotnet_naming_rule.parameters_should_be_camel_case.style = camel_case
+dotnet_naming_rule.parameters_should_be_camel_case.symbols = parameters
+
+dotnet_naming_rule.private_and_internal_static_fields_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.private_and_internal_static_fields_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.private_and_internal_static_fields_should_be_pascal_case.symbols = private_and_internal_static_fields
+
+dotnet_naming_rule.private_and_internal_fields_should_be_camel_case_prefixed_with_underscore.severity = suggestion
+dotnet_naming_rule.private_and_internal_fields_should_be_camel_case_prefixed_with_underscore.style = camel_case_prefixed_with_underscore
+dotnet_naming_rule.private_and_internal_fields_should_be_camel_case_prefixed_with_underscore.symbols = private_and_internal_fields
+
+dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.public_and_protected_declarations_should_be_pascal_case.symbols = public_and_protected_declarations
+
+dotnet_naming_rule.static_readonly_declarations_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.static_readonly_declarations_should_be_pascal_case.style = pascal_case
+dotnet_naming_rule.static_readonly_declarations_should_be_pascal_case.symbols = static_readonly_declarations
+
+dotnet_naming_rule.type_parameters_should_be_pascal_case_prefixed_with_t.severity = suggestion
+dotnet_naming_rule.type_parameters_should_be_pascal_case_prefixed_with_t.style = pascal_case_prefixed_with_t
+dotnet_naming_rule.type_parameters_should_be_pascal_case_prefixed_with_t.symbols = type_parameters
+
+###############################################################################
+# Set dotnet naming styles to define:
+# camel case
+# camel case prefixed with _
+# camel case prefixed with s_
+# pascal case
+# pascal case suffixed with Async
+# pascal case prefixed with I
+# pascal case prefixed with T
+###############################################################################
+[*.cs]
+dotnet_naming_style.camel_case.capitalization = camel_case
+
+dotnet_naming_style.camel_case_prefixed_with_underscore.capitalization = camel_case
+dotnet_naming_style.camel_case_prefixed_with_underscore.required_prefix = _
+
+dotnet_naming_style.pascal_case.capitalization = pascal_case
+
+dotnet_naming_style.pascal_case_suffixed_with_async.capitalization = pascal_case
+dotnet_naming_style.pascal_case_suffixed_with_async.required_suffix = Async
+
+dotnet_naming_style.pascal_case_prefixed_with_i.capitalization = pascal_case
+dotnet_naming_style.pascal_case_prefixed_with_i.required_prefix = I
+
+dotnet_naming_style.pascal_case_prefixed_with_t.capitalization = pascal_case
+dotnet_naming_style.pascal_case_prefixed_with_t.required_prefix = T
+
+###############################################################################
+# Set dotnet naming symbols to:
+# async members
+# const declarations
+# interfaces
+# private and internal fields
+# private and internal static fields
+# public and protected declarations
+# static readonly declarations
+# type parameters
+###############################################################################
+[*.cs]
+dotnet_naming_symbols.async_members.required_modifiers = async
+
+dotnet_naming_symbols.const_declarations.required_modifiers = const
+
+dotnet_naming_symbols.interfaces.applicable_kinds = interface
+
+dotnet_naming_symbols.parameters.applicable_kinds = parameter
+
+dotnet_naming_symbols.private_and_internal_fields.applicable_accessibilities = private, internal
+dotnet_naming_symbols.private_and_internal_fields.applicable_kinds = field
+
+dotnet_naming_symbols.private_and_internal_static_fields.applicable_accessibilities = private, internal
+dotnet_naming_symbols.private_and_internal_static_fields.applicable_kinds = field
+dotnet_naming_symbols.private_and_internal_static_fields.required_modifiers = static
+
+dotnet_naming_symbols.public_and_protected_declarations.applicable_accessibilities = public, protected
+dotnet_naming_symbols.public_and_protected_declarations.applicable_kinds = namespace, class, struct, enum, property, method, field, event, delegate, local_function
+
+dotnet_naming_symbols.static_readonly_declarations.required_modifiers = static, readonly
+
+dotnet_naming_symbols.type_parameters.applicable_kinds = type_parameter
+
+###############################################################################
+# Set dotnet sort options to:
+# do not separate import directives into groups, and
+# sort system directives first
+###############################################################################
+[*.cs]
+dotnet_separate_import_directive_groups = false
+dotnet_sort_system_directives_first = true
+
+###############################################################################
+# Set dotnet style options to:
+# suggest null-coalescing expressions,
+# suggest collection-initializers,
+# suggest explicit tuple names,
+# suggest null-propogation
+# suggest object-initializers,
+# suggest parentheses in arithmetic binary operators for clarity,
+# suggest parentheses in other binary operators for clarity,
+# don't suggest parentheses in other operators if unnecessary,
+# suggest parentheses in relational binary operators for clarity,
+# suggest predefined-types for locals, parameters, and members,
+# suggest predefined-types of type names for member access,
+# don't suggest auto properties,
+# suggest compound assignment,
+# suggest conditional expression over assignment,
+# suggest conditional expression over return,
+# suggest inferred anonymous types,
+# suggest inferred tuple names,
+# suggest 'is null' checks over '== null',
+# don't suggest 'this.' and 'Me.' for events,
+# don't suggest 'this.' and 'Me.' for fields,
+# don't suggest 'this.' and 'Me.' for methods,
+# don't suggest 'this.' and 'Me.' for properties,
+# suggest readonly fields, and
+# suggest specifying accessibility modifiers
+###############################################################################
+[*.cs]
+dotnet_style_coalesce_expression = true:suggestion
+dotnet_style_collection_initializer = true:suggestion
+dotnet_style_explicit_tuple_names = true:suggestion
+dotnet_style_null_propagation = true:suggestion
+dotnet_style_object_initializer = true:suggestion
+
+dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:suggestion
+dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:suggestion
+dotnet_style_parentheses_in_other_operators = never_if_unnecessary:suggestion
+dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggestion
+
+dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
+dotnet_style_predefined_type_for_member_access = true:suggestion
+
+dotnet_style_prefer_auto_properties = false:suggestion
+dotnet_style_prefer_compound_assignment = true:suggestion
+dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion
+dotnet_style_prefer_conditional_expression_over_return = true:suggestion
+dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
+dotnet_style_prefer_inferred_tuple_names = true:suggestion
+dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
+
+dotnet_style_qualification_for_event = false:suggestion
+dotnet_style_qualification_for_field = false:suggestion
+dotnet_style_qualification_for_method = false:suggestion
+dotnet_style_qualification_for_property = false:suggestion
+
+dotnet_style_readonly_field = true:suggestion
+dotnet_style_require_accessibility_modifiers = always:suggestion
+
+###############################################################################
+# Set dotnet style options to:
+# suggest removing all unused parameters
+###############################################################################
+[*.cs]
+dotnet_code_quality_unused_parameters = all:suggestion
+
+###############################################################################
+# Set csharp indent options to:
+# indent block contents,
+# not indent braces,
+# indent case contents,
+# not indent case contents when block,
+# indent labels one less than the current, and
+# indent switch labels
+###############################################################################
+[*.cs]
+csharp_indent_block_contents = true
+csharp_indent_braces = false
+csharp_indent_case_contents = true
+csharp_indent_case_contents_when_block = false
+csharp_indent_labels = one_less_than_current
+csharp_indent_switch_labels = true
+
+###############################################################################
+# Set csharp new-line options to:
+# insert a new-line before "catch",
+# insert a new-line before "else",
+# insert a new-line before "finally",
+# insert a new-line before members in anonymous-types,
+# insert a new-line before members in object-initializers,
+# insert a new-line before all open braces except anonymous methods, anonymous types, lambdas, and object collections and
+# insert a new-line within query expression clauses
+###############################################################################
+[*.cs]
+csharp_new_line_before_catch = true
+csharp_new_line_before_else = true
+csharp_new_line_before_finally = true
+
+csharp_new_line_before_members_in_anonymous_types = true
+csharp_new_line_before_members_in_object_initializers = true
+
+csharp_new_line_before_open_brace = accessors, control_blocks, events, indexers, local_functions, methods, object_collection_array_initializers, properties, types
+
+csharp_new_line_within_query_expression_clauses = true
+
+###############################################################################
+# Set csharp preserve options to:
+# preserve single-line blocks, and
+# not preserve single-line statements
+###############################################################################
+[*.cs]
+csharp_preserve_single_line_blocks = true
+csharp_preserve_single_line_statements = false
+
+###############################################################################
+# Set csharp space options to:
+# remove any space after a cast,
+# add a space after the colon in an inheritance clause,
+# add a space after a comma,
+# remove any space after a dot,
+# add a space after keywords in control flow statements,
+# add a space after a semicolon in a "for" statement,
+# add a space before and after binary operators,
+# remove space around declaration statements,
+# add a space before the colon in an inheritance clause,
+# remove any space before a comma,
+# remove any space before a dot,
+# remove any space before an open square-bracket,
+# remove any space before a semicolon in a "for" statement,
+# remove any space between empty square-brackets,
+# remove any space between a method call's empty parameter list parenthesis,
+# remove any space between a method call's name and its opening parenthesis,
+# remove any space between a method call's parameter list parenthesis,
+# remove any space between a method declaration's empty parameter list parenthesis,
+# remove any space between a method declaration's name and its openening parenthesis,
+# remove any space between a method declaration's parameter list parenthesis,
+# remove any space between parentheses, and
+# remove any space between square brackets
+###############################################################################
+[*.cs]
+csharp_space_after_cast = false
+csharp_space_after_colon_in_inheritance_clause = true
+csharp_space_after_comma = true
+csharp_space_after_dot = false
+csharp_space_after_keywords_in_control_flow_statements = true
+csharp_space_after_semicolon_in_for_statement = true
+
+csharp_space_around_binary_operators = before_and_after
+csharp_space_around_declaration_statements = do_not_ignore
+
+csharp_space_before_colon_in_inheritance_clause = true
+csharp_space_before_comma = false
+csharp_space_before_dot = false
+csharp_space_before_open_square_brackets = false
+csharp_space_before_semicolon_in_for_statement = false
+
+csharp_space_between_empty_square_brackets = false
+csharp_space_between_method_call_empty_parameter_list_parentheses = false
+csharp_space_between_method_call_name_and_opening_parenthesis = false
+csharp_space_between_method_call_parameter_list_parentheses = false
+csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
+csharp_space_between_method_declaration_name_and_open_parenthesis = false
+csharp_space_between_method_declaration_parameter_list_parentheses = false
+csharp_space_between_parentheses = false
+csharp_space_between_square_brackets = false
+
+###############################################################################
+# Set csharp style options to:
+# don't suggest braces,
+# suggest simple default expressions,
+# suggest a preferred modifier order,
+# suggest conditional delegate calls,
+# suggest deconstructed variable declarations,
+# don't suggest expression-bodied accessors,
+# don't suggest expression-bodied indexers,
+# don't suggest expression-bodied constructors,
+# suggest expression-bodied lambdas,
+# don't suggest expression-bodied methods,
+# don't suggest expression-bodied operators,
+# don't suggest expression-bodied properties,
+# suggest inlined variable declarations,
+# suggest local over anonymous functions,
+# suggest pattern-matching over "as" with "null" check,
+# suggest pattern-matching over "is" with "cast" check,
+# suggest throw expressions,
+# suggest a discard variable for unused value expression statements,
+# suggest a discard variable for unused assignments,
+# suggest var for built-in types,
+# suggest var when the type is not apparent, and
+# suggest var when the type is apparent
+###############################################################################
+[*.cs]
+csharp_prefer_braces = false:suggestion
+csharp_prefer_simple_default_expression = true:suggestion
+csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
+
+csharp_style_conditional_delegate_call = true:suggestion
+csharp_style_deconstructed_variable_declaration = true:suggestion
+
+csharp_style_expression_bodied_accessors = when_on_single_line:suggestion
+csharp_style_expression_bodied_constructors = false:suggestion
+csharp_style_expression_bodied_indexers = when_on_single_line:suggestion
+csharp_style_expression_bodied_lambdas = true:suggestion
+csharp_style_expression_bodied_methods = when_on_single_line:suggestion
+csharp_style_expression_bodied_operators = when_on_single_line:suggestion
+csharp_style_expression_bodied_properties = when_on_single_line:suggestion
+
+csharp_style_inlined_variable_declaration = true:suggestion
+
+csharp_style_pattern_local_over_anonymous_function = true:suggestion
+csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
+csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
+
+csharp_style_throw_expression = true:suggestion
+
+csharp_style_unused_value_expression_statement_preference = discard_variable:suggestion
+csharp_style_unused_value_assignment_preference = discard_variable:suggestion
+
+csharp_style_var_for_built_in_types = true:none
+csharp_style_var_elsewhere = true:suggestion
+csharp_style_var_when_type_is_apparent = true:suggestion
diff --git a/.gitattributes b/.gitattributes
index 1ff0c4230..8545fc760 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,63 +1,24 @@
###############################################################################
-# Set default behavior to automatically normalize line endings.
+# Default to Unix-style text files
###############################################################################
-* text=auto
+* text eol=lf
###############################################################################
-# Set default behavior for command prompt diff.
-#
-# This is need for earlier builds of msysgit that does not have it on by
-# default for csharp files.
-# Note: This is only used by command line
+# Treat code and markdown as Unix-style text files
###############################################################################
-#*.cs diff=csharp
+*.cs text eol=lf
+*.csproj text eol=lf
+*.md text eol=lf
+*.props text eol=lf
+*.targets text eol=lf
###############################################################################
-# Set the merge driver for project and solution files
-#
-# Merging from the command prompt will add diff markers to the files if there
-# are conflicts (Merging from VS is not affected by the settings below, in VS
-# the diff markers are never inserted). Diff markers may cause the following
-# file extensions to fail to load in VS. An alternative would be to treat
-# these files as binary and thus will always conflict and require user
-# intervention with every merge. To do so, just uncomment the entries below
-###############################################################################
-#*.sln merge=binary
-#*.csproj merge=binary
-#*.vbproj merge=binary
-#*.vcxproj merge=binary
-#*.vcproj merge=binary
-#*.dbproj merge=binary
-#*.fsproj merge=binary
-#*.lsproj merge=binary
-#*.wixproj merge=binary
-#*.modelproj merge=binary
-#*.sqlproj merge=binary
-#*.wwaproj merge=binary
-
-###############################################################################
-# behavior for image files
-#
-# image files are treated as binary by default.
+# Treat Solution files as Windows text files
###############################################################################
-#*.jpg binary
-#*.png binary
-#*.gif binary
+*.sln text eol=crlf
###############################################################################
-# diff behavior for common document formats
-#
-# Convert binary document formats to text before diffing them. This feature
-# is only available from the command line. Turn it on by uncommenting the
-# entries below.
-###############################################################################
-#*.doc diff=astextplain
-#*.DOC diff=astextplain
-#*.docx diff=astextplain
-#*.DOCX diff=astextplain
-#*.dot diff=astextplain
-#*.DOT diff=astextplain
-#*.pdf diff=astextplain
-#*.PDF diff=astextplain
-#*.rtf diff=astextplain
-#*.RTF diff=astextplain
+# Treat images as binary files
+###############################################################################
+*.png binary
+*.ai binary
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 000000000..bac8eff0e
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,17 @@
+Thanks in advance for your contribution to Discord.Net!
+
+Before opening a pull request, please consider the following:
+
+Does your changeset adhere to the Contributing Guidelines?
+
+Does your changeset address a specific issue or idea? If not, please
+break your changes up into multiple requests.
+
+Have your changes been previously discussed with other members
+of the community? We prefer new features to be vetted through
+an issue or a discussion in our Discord channel first; bug-fixes
+and other small changes are generally fine without prior vetting.
+
+Please remove this section, and include a summary of your changes
+below.
+---
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 000000000..c606dc4d4
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,36 @@
+name: Build using .NET Core
+
+on:
+ push:
+ branches: [ 3.0 ]
+ paths-ignore:
+ - 'docs/**'
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Setup .NET Core
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: 5.0.202
+
+ - name: Install dependencies
+ run: dotnet restore
+
+ - name: Build Discord.Net
+ run: dotnet build --no-restore --configuration Release
+
+ - name: Run Unit Tests
+ run: dotnet test --no-build --configuration Release
+
+ - name: Pack Discord.Net
+ run: dotnet pack --no-build --configuration Release
+
+ - name: Upload Artifacts
+ uses: actions/upload-artifact@v1.0.0
+ with:
+ name: nupkgs
+ path: ${{ github.workspace }}/artifacts/pkg/
diff --git a/.gitignore b/.gitignore
index 654370842..f3d46e681 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,10 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
+*.rsuser
*.suo
*.user
*.userosscache
@@ -10,18 +13,30 @@
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
+# Mono auto generated files
+mono_crash.*
+
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
-build/
+x64/
+x86/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
+[Ll]og/
-# Visual Studo 2015 cache/options directory
+# Visual Studio 2015/2017 cache/options directory
.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
@@ -36,14 +51,28 @@ TestResult.xml
[Rr]eleasePS/
dlldata.c
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
*_i.c
*_p.c
-*_i.h
+*_h.h
*.ilk
*.meta
*.obj
+*.iobj
*.pch
*.pdb
+*.ipdb
*.pgc
*.pgd
*.rsp
@@ -53,6 +82,7 @@ dlldata.c
*.tlh
*.tmp
*.tmp_proj
+*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
@@ -68,14 +98,21 @@ _Chutzpah*
ipch/
*.aps
*.ncb
+*.opendb
*.opensdf
*.sdf
*.cachefile
+*.VC.db
+*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
# TFS 2012 Local Workspace
$tf/
@@ -88,7 +125,7 @@ _ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
-# JustCode is a .NET coding addin-in
+# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
@@ -97,9 +134,18 @@ _TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
# NCrunch
_NCrunch_*
.*crunch*.local.xml
+nCrunchTemp_*
# MightyMoose
*.mm.*
@@ -127,38 +173,69 @@ publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
-# TODO: Comment the next line if you want to checkin your web deploy settings
+# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
-**/packages/*
+**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
-!**/packages/build/
+!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
-#!**/packages/repositories.config
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
-# Windows Azure Build Output
+# Microsoft Azure Build Output
csx/
*.build.csdef
-# Windows Store app package directory
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
# Others
-*.[Cc]ache
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
+*.jfm
*.pfx
*.publishsettings
-node_modules/
-bower_components/
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
# RIA/Silverlight projects
Generated_Code/
@@ -170,21 +247,30 @@ _UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
+*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
+*.rptproj.rsuser
+*- Backup*.rdl
# Microsoft Fakes
FakesAssemblies/
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
+node_modules/
# Visual Studio 6 build log
*.plg
@@ -192,17 +278,152 @@ FakesAssemblies/
# Visual Studio 6 workspace options file
*.opt
-#Custom
-project.lock.json
-/test/Discord.Net.Tests/config.json
-/test/Discord.Net.Tests/cache.db*
-/docs/_build
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
*.pyc
-/.editorconfig
-.vscode/
-docs/api/\.manifest
-\.idea/
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
-# Codealike UID
-codealike.json
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+##
+## Visual studio for Mac
+##
+
+
+# globs
+Makefile.in
+*.userprefs
+*.usertasks
+config.make
+config.status
+aclocal.m4
+install-sh
+autom4te.cache/
+*.tar.gz
+tarballs/
+test-results/
+
+# Mac bundle stuff
+*.dmg
+*.app
+
+# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
+# Windows thumbnail cache files
+Thumbs.db
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+##
+## Visual Studio Code
+##
+.vscode/*
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 000000000..6c736ed91
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+ $([System.String]::Copy('$(GITHUB_REF)').Replace('refs/pull/', '').Replace('/merge', ''))
+
+
+
+
+ $(MSBuildThisFileDirectory)artifacts/
+ $(DiscordNetProjectCategory)/$(MSBuildProjectName)
+ https://github.com/discord-net/Discord.Net
+
+
+
+
+ true
+ $(BaseArtifactsPath)obj/$(BaseArtifactsPathSuffix)/
+ embedded
+ false
+ enable
+ true
+ true
+ true
+
+
+
+ true
+
+
+
+
+ Discord.Net Contributors
+ $(BaseArtifactsPath)bin/$(BaseArtifactsPathSuffix)/
+ Discord-Net
+ $(BaseArtifactsPath)pkg/$(Configuration)
+ $(BaseArtifactsPath)pkg/$(Configuration)
+ Discord.Net
+ 3.0.0
+ alpha
+ pr$(PullRequestNumber)
+
+
+
+
+ Copyright © Discord.Net Contributors.
+ An asynchronous API wrapper for Discord.
+ strict
+ true
+ true
+ preview
+ 4.3
+ en-US
+ true
+ PackageLogo.png
+ MIT
+ $(RepositoryUrl)
+ true
+ $(PackageTags);discord;discordapp
+ discord;discordapp
+ git
+
+ https://api.nuget.org/v3/index.json
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Directory.Build.targets b/Directory.Build.targets
new file mode 100644
index 000000000..3e9d0bbe0
--- /dev/null
+++ b/Directory.Build.targets
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+ $(DefineConstants);$(OS)
+ $(NoWarn);NU5105
+ $(Version).$(GITHUB_RUN_ID)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Discord.Net.sln b/Discord.Net.sln
index 656944dea..3b0ea5400 100644
--- a/Discord.Net.sln
+++ b/Discord.Net.sln
@@ -1,54 +1,73 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.31229.75
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Core", "src\Discord.Net.Core\Discord.Net.Core.csproj", "{4E7A2251-D582-4093-95A5-2FF450DCCD3F}"
+# Visual Studio 15
+VisualStudioVersion = 15.0.26124.0
+MinimumVisualStudioVersion = 15.0.26124.0
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CD5CFA4B-143E-4495-8BFD-AF419226CBE5}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Implementations", "Implementations", "{ADF3F58A-948A-4ABC-B5AA-07271B341695}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Gateway", "src\Gateway\Discord.Net.Gateway.csproj", "{DAF502E3-CFE6-4243-8049-9A6157F42111}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Rest", "src\Discord.Net.Rest\Discord.Net.Rest.csproj", "{009A57F3-3BF2-4B28-8A61-CEA8108EB8B8}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{6D7B7A29-83FE-44F2-85E1-7D44B061EA27}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.WebSocket", "src\Discord.Net.WebSocket\Discord.Net.WebSocket.csproj", "{857DD396-D71D-4E85-B83B-F26599B2FB76}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PingPong", "samples\PingPong\PingPong.csproj", "{54A6E396-5186-4D79-893B-6EFD1CF658CB}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{7EE9C2BE-991C-4CA8-9FD3-5DAE26D911E2}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{A47FC28E-1835-46C3-AFD5-7C048A43C157}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{E736282C-715C-4CBE-8EEF-E56BC6BA4F06}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Tests.Unit", "tests\Discord.Net.Tests.Unit\Discord.Net.Tests.Unit.csproj", "{EB2B832A-2023-4B97-9011-AE412C8D2208}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Gateway.UnitTests", "test\Gateway\Discord.Net.Gateway.UnitTests.csproj", "{7EC53EB6-6C15-4FD7-9B83-95F96025C14D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {4E7A2251-D582-4093-95A5-2FF450DCCD3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4E7A2251-D582-4093-95A5-2FF450DCCD3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4E7A2251-D582-4093-95A5-2FF450DCCD3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4E7A2251-D582-4093-95A5-2FF450DCCD3F}.Release|Any CPU.Build.0 = Release|Any CPU
- {009A57F3-3BF2-4B28-8A61-CEA8108EB8B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {009A57F3-3BF2-4B28-8A61-CEA8108EB8B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {009A57F3-3BF2-4B28-8A61-CEA8108EB8B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {009A57F3-3BF2-4B28-8A61-CEA8108EB8B8}.Release|Any CPU.Build.0 = Release|Any CPU
- {857DD396-D71D-4E85-B83B-F26599B2FB76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {857DD396-D71D-4E85-B83B-F26599B2FB76}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {857DD396-D71D-4E85-B83B-F26599B2FB76}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {857DD396-D71D-4E85-B83B-F26599B2FB76}.Release|Any CPU.Build.0 = Release|Any CPU
- {EB2B832A-2023-4B97-9011-AE412C8D2208}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EB2B832A-2023-4B97-9011-AE412C8D2208}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EB2B832A-2023-4B97-9011-AE412C8D2208}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EB2B832A-2023-4B97-9011-AE412C8D2208}.Release|Any CPU.Build.0 = Release|Any CPU
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {009A57F3-3BF2-4B28-8A61-CEA8108EB8B8} = {ADF3F58A-948A-4ABC-B5AA-07271B341695}
- {857DD396-D71D-4E85-B83B-F26599B2FB76} = {ADF3F58A-948A-4ABC-B5AA-07271B341695}
- {EB2B832A-2023-4B97-9011-AE412C8D2208} = {7EE9C2BE-991C-4CA8-9FD3-5DAE26D911E2}
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Debug|x64.Build.0 = Debug|Any CPU
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Debug|x86.Build.0 = Debug|Any CPU
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Release|x64.ActiveCfg = Release|Any CPU
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Release|x64.Build.0 = Release|Any CPU
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Release|x86.ActiveCfg = Release|Any CPU
+ {DAF502E3-CFE6-4243-8049-9A6157F42111}.Release|x86.Build.0 = Release|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Debug|x64.Build.0 = Debug|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Debug|x86.Build.0 = Debug|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Release|x64.ActiveCfg = Release|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Release|x64.Build.0 = Release|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Release|x86.ActiveCfg = Release|Any CPU
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB}.Release|x86.Build.0 = Release|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Debug|x64.Build.0 = Debug|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Debug|x86.Build.0 = Debug|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Release|x64.ActiveCfg = Release|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Release|x64.Build.0 = Release|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Release|x86.ActiveCfg = Release|Any CPU
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {B7EDDAFF-0E67-4853-B8BB-49134E9950D7}
+ GlobalSection(NestedProjects) = preSolution
+ {DAF502E3-CFE6-4243-8049-9A6157F42111} = {CD5CFA4B-143E-4495-8BFD-AF419226CBE5}
+ {54A6E396-5186-4D79-893B-6EFD1CF658CB} = {6D7B7A29-83FE-44F2-85E1-7D44B061EA27}
+ {7EC53EB6-6C15-4FD7-9B83-95F96025C14D} = {A47FC28E-1835-46C3-AFD5-7C048A43C157}
EndGlobalSection
EndGlobal
diff --git a/Discord.Net.targets b/Discord.Net.targets
deleted file mode 100644
index 5fe1cfa79..000000000
--- a/Discord.Net.targets
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
- 3.0.0
- alpha
- latest
- Discord.Net Contributors
- discord;discordapp
- https://github.com/discord-net/Discord.Net
- http://opensource.org/licenses/MIT
- https://github.com/discord-net/Discord.Net/raw/3.0/docs/marketing/logo/PackageLogo.png
- git
- git://github.com/discord-net/Discord.Net
-
-
- $(VersionSuffix)-alpha
- alpha
-
-
- $(VersionSuffix)-$(BuildNumber)
- build-$(BuildNumber)
-
-
- $(NoWarn);CS1573;CS1591
- true
- true
-
-
diff --git a/README.md b/README.md
deleted file mode 100644
index f59ace47a..000000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Discord.Net
-
-An unofficial .NET API Wrapper for the Discord client (https://discord.com).
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
new file mode 100644
index 000000000..752b40931
--- /dev/null
+++ b/docs/CONTRIBUTING.md
@@ -0,0 +1,62 @@
+# Contributing
+
+Discord.Net is an open-source project, and we appreciate any and all
+contributions made by our community. However, please conform to the
+following guidelines when possible:
+
+## Development Cycle
+
+We prefer all changes to the library to be discussed beforehand,
+either in a GitHub issue, or in a discussion in our Discord channel
+with library regulars or other contributors.
+
+Issues that are tagged as "up for grabs" are free to be picked up by
+any member of the community.
+
+### Pull Requests
+
+We prefer pull-requests that are descriptive of the changes being made
+and highlight any potential benefits/drawbacks of the change, but these
+types of write-ups are not required. See this [merge request](https://github.com/RogueException/Discord.Net/pull/793)
+for an example of a well-written description.
+
+## Semantic Versioning
+
+This project follows [Semantic Versioning](http://semver.org/). When
+writing changes to this project, it is recommended to write changes
+that are SemVer compliant with the latest version of the library in
+development.
+
+The working release should be the latest build off of the `dev` branch,
+but can also be found on the [development board](https://github.com/RogueException/Discord.Net/projects/1).
+
+We follow the .NET Foundation's [Breaking Change Rules](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/breaking-change-rules.md)
+when determining the SemVer compliance of a change.
+
+Obsoleting a method is considered a **minor** increment.
+
+## Coding Style
+
+We attempt to conform to the .NET Foundation's [Coding Style](https://github.com/dotnet/corefx/blob/master/Documentation/coding-guidelines/coding-style.md)
+where possible.
+
+As a general rule, follow the coding style already set in the file you
+are editing, or look at a similar file if you are adding a new one.
+
+### Documentation Style for Members
+
+When creating a new public member, the member must be annotated with sufficient documentation. This should include the
+following, but not limited to:
+
+* `` summarizing the purpose of the method.
+* `` or `` explaining the parameter.
+* `` explaining the type of the returned member and what it is.
+* `` if the method directly throws an exception.
+
+The length of the documentation should also follow the ruler as suggested by our
+[Visual Studio Code workspace](Discord.Net.code-workspace).
+
+#### Recommended Reads
+
+* [Official Microsoft Documentation](https://docs.microsoft.com)
+* [Sandcastle User Manual](https://ewsoftware.github.io/XMLCommentsGuide/html/4268757F-CE8D-4E6D-8502-4F7F2E22DDA3.htm)
\ No newline at end of file
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 000000000..4b47a4c78
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,56 @@
+# Discord.Net #
+
+[](https://discord.gg/discord-api)
+
+An unofficial .NET library for the [Discord API](https://discordapp.com/).
+
+## Installation ##
+
+Our stable builds available from NuGet through the Discord.Net metapackage:
+[Discord.Net](https://www.nuget.org/packages/Discord.Net/)
+
+Unstable "nightly" builds are available through our MyGet feed:
+`https://www.myget.org/F/discord-net/api/v3/index.json`
+
+## Building ##
+
+At minimum, .NET Core 2.1 is required to successfully build Discord.Net,
+but .NET Core 3.1 is recommended. You should install the appropriate tools and
+components for your editor to open the Discord.Net solution file:
+
+- The .NET Core workload for Visual Studio
+- The C# build tools for Visual Studio Code
+- The .NET Core SDK for command line
+
+### Versioning ###
+
+As a rule, Discord.Net attempts to follow
+[Semantic Versioning](https://semver.org). This means `MAJOR.MINOR.PATCH`
+versioning.
+
+However, as Discord evolves and adds or changes existing endpoints, we may need
+to add code to support these changes. To do this, we increment the minor version
+when adding new API surfaces to the library. To counter any inevitable breaking
+changes, we have decided that our public interfaces should be for
+*consumption only* - bot developers should not need to implement these
+interfaces for normal code.
+
+Additionally, as the Discord API changes, we may need to add, remove, or change
+parameters to certain methods. To ensure this breaks as little code as
+possible, we use the following approach to deprecate old APIs and redirect
+users to new APIs, while retaining binary compatibility:
+
+```cs
+// OLD API
+[Obsolete("This API has been superseded by GetUserAsync.", false)]
+[EditorBrowsable(EditorBrowsableState.Never)]
+public ValueTask GetUserAsync(ulong userId)
+ => GetUserAsync(userId, "default");
+
+// NEW API
+public ValueTask GetUserAsync(ulong userId,
+ string additionalParameter = "default");
+```
+
+These obsolete methods will be removed in the next major version, and will be
+clearly documented in our change logs.
diff --git a/docs/marketing/logo/Logo.ai b/docs/marketing/logo/Logo.ai
new file mode 100644
index 000000000..f145111c3
--- /dev/null
+++ b/docs/marketing/logo/Logo.ai
@@ -0,0 +1,1445 @@
+%PDF-1.5
%
+1 0 obj
<>/OCGs[6 0 R 7 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<>stream
+
+
+
+
+ application/pdf
+
+
+ Logo
+
+
+ Adobe Illustrator CC 23.0 (Windows)
+ 2018-12-23T04:14+02:00
+ 2018-12-23T04:14+01:00
+ 2018-12-23T04:14+01:00
+
+
+
+ 256
+ 128
+ JPEG
+ /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAgAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXmH50/l55m85Np
C6MbdYrAXDTi4laMM03phKBUevEIczNJnjju+rmaTPHHd9WM6j+S2q6jfWsV1Pf2zrpdnplzd2k6
/V2dI1WaTi37x/T5nj9np4nKsnDImVtOSpEytOLj/nHTS5rBrP8AxHqagxSwrKvoK9JrZLepKRpX
h6QCUoFjLRj4WyhpZD+W/wCVFt5Hur24h1e81E3kcMJS4b4QsCLGjGpYs/FB3AG9FFcVR/nLyJf+
YJ4Liz8z6rokkNxaz+jZT8Ld1t2YyRvGnBmEyPRqvSoU02IZVK778nxd3NlOfOnmmNbOOKI26akP
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
+
+
+
+ uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7
+ xmp.did:7b6ad08a-6c34-094a-99ed-6fd2184825ab
+ uuid:00f17b8b-7d1e-47af-92bc-2084415a76cb
+ proof:pdf
+
+ xmp.iid:53573ae3-c43e-0d4a-8781-3ffb12417c5c
+ xmp.did:53573ae3-c43e-0d4a-8781-3ffb12417c5c
+ uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7
+ proof:pdf
+
+
+
+
+ saved
+ xmp.iid:7cc70b61-b475-d44e-a574-e657edcb3f5b
+ 2018-10-23T21:23:47+02:00
+ Adobe Illustrator CC 22.1 (Windows)
+ /
+
+
+ saved
+ xmp.iid:7b6ad08a-6c34-094a-99ed-6fd2184825ab
+ 2018-12-23T04:13:58+01:00
+ Adobe Illustrator CC 23.0 (Windows)
+ /
+
+
+
+ Basic RGB
+ Document
+ 1
+ False
+ False
+
+ 5000.000000
+ 5000.000000
+ Pixels
+
+
+
+
+ MyriadPro-Regular
+ Myriad Pro
+ Regular
+ Open Type
+ Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329
+ False
+ MyriadPro-Regular.otf
+
+
+
+
+
+ Cyan
+ Magenta
+ Yellow
+ Black
+
+
+
+
+
+ Default Swatch Group
+ 0
+
+
+
+ White
+ RGB
+ PROCESS
+ 255
+ 255
+ 255
+
+
+ Black
+ RGB
+ PROCESS
+ 0
+ 0
+ 0
+
+
+ RGB Red
+ RGB
+ PROCESS
+ 255
+ 0
+ 0
+
+
+ RGB Yellow
+ RGB
+ PROCESS
+ 255
+ 255
+ 0
+
+
+ RGB Green
+ RGB
+ PROCESS
+ 0
+ 255
+ 0
+
+
+ RGB Cyan
+ RGB
+ PROCESS
+ 0
+ 255
+ 255
+
+
+ RGB Blue
+ RGB
+ PROCESS
+ 0
+ 0
+ 255
+
+
+ RGB Magenta
+ RGB
+ PROCESS
+ 255
+ 0
+ 255
+
+
+ R=193 G=39 B=45
+ RGB
+ PROCESS
+ 193
+ 39
+ 45
+
+
+ R=237 G=28 B=36
+ RGB
+ PROCESS
+ 237
+ 28
+ 36
+
+
+ R=241 G=90 B=36
+ RGB
+ PROCESS
+ 241
+ 90
+ 36
+
+
+ R=247 G=147 B=30
+ RGB
+ PROCESS
+ 247
+ 147
+ 30
+
+
+ R=251 G=176 B=59
+ RGB
+ PROCESS
+ 251
+ 176
+ 59
+
+
+ R=252 G=238 B=33
+ RGB
+ PROCESS
+ 252
+ 238
+ 33
+
+
+ R=217 G=224 B=33
+ RGB
+ PROCESS
+ 217
+ 224
+ 33
+
+
+ R=140 G=198 B=63
+ RGB
+ PROCESS
+ 140
+ 198
+ 63
+
+
+ R=57 G=181 B=74
+ RGB
+ PROCESS
+ 57
+ 181
+ 74
+
+
+ R=0 G=146 B=69
+ RGB
+ PROCESS
+ 0
+ 146
+ 69
+
+
+ R=0 G=104 B=55
+ RGB
+ PROCESS
+ 0
+ 104
+ 55
+
+
+ R=34 G=181 B=115
+ RGB
+ PROCESS
+ 34
+ 181
+ 115
+
+
+ R=0 G=169 B=157
+ RGB
+ PROCESS
+ 0
+ 169
+ 157
+
+
+ R=41 G=171 B=226
+ RGB
+ PROCESS
+ 41
+ 171
+ 226
+
+
+ R=0 G=113 B=188
+ RGB
+ PROCESS
+ 0
+ 113
+ 188
+
+
+ R=46 G=49 B=146
+ RGB
+ PROCESS
+ 46
+ 49
+ 146
+
+
+ R=27 G=20 B=100
+ RGB
+ PROCESS
+ 27
+ 20
+ 100
+
+
+ R=102 G=45 B=145
+ RGB
+ PROCESS
+ 102
+ 45
+ 145
+
+
+ R=147 G=39 B=143
+ RGB
+ PROCESS
+ 147
+ 39
+ 143
+
+
+ R=158 G=0 B=93
+ RGB
+ PROCESS
+ 158
+ 0
+ 93
+
+
+ R=212 G=20 B=90
+ RGB
+ PROCESS
+ 212
+ 20
+ 90
+
+
+ R=237 G=30 B=121
+ RGB
+ PROCESS
+ 237
+ 30
+ 121
+
+
+ R=199 G=178 B=153
+ RGB
+ PROCESS
+ 199
+ 178
+ 153
+
+
+ R=153 G=134 B=117
+ RGB
+ PROCESS
+ 153
+ 134
+ 117
+
+
+ R=115 G=99 B=87
+ RGB
+ PROCESS
+ 115
+ 99
+ 87
+
+
+ R=83 G=71 B=65
+ RGB
+ PROCESS
+ 83
+ 71
+ 65
+
+
+ R=198 G=156 B=109
+ RGB
+ PROCESS
+ 198
+ 156
+ 109
+
+
+ R=166 G=124 B=82
+ RGB
+ PROCESS
+ 166
+ 124
+ 82
+
+
+ R=140 G=98 B=57
+ RGB
+ PROCESS
+ 140
+ 98
+ 57
+
+
+ R=117 G=76 B=36
+ RGB
+ PROCESS
+ 117
+ 76
+ 36
+
+
+ R=96 G=56 B=19
+ RGB
+ PROCESS
+ 96
+ 56
+ 19
+
+
+ R=66 G=33 B=11
+ RGB
+ PROCESS
+ 66
+ 33
+ 11
+
+
+
+
+
+ Cold
+ 1
+
+
+
+ C=56 M=0 Y=20 K=0
+ RGB
+ PROCESS
+ 101
+ 200
+ 208
+
+
+ C=51 M=43 Y=0 K=0
+ RGB
+ PROCESS
+ 131
+ 139
+ 197
+
+
+ C=26 M=41 Y=0 K=0
+ RGB
+ PROCESS
+ 186
+ 155
+ 201
+
+
+
+
+
+ Grays
+ 1
+
+
+
+ R=0 G=0 B=0
+ RGB
+ PROCESS
+ 0
+ 0
+ 0
+
+
+ R=26 G=26 B=26
+ RGB
+ PROCESS
+ 26
+ 26
+ 26
+
+
+ R=51 G=51 B=51
+ RGB
+ PROCESS
+ 51
+ 51
+ 51
+
+
+ R=77 G=77 B=77
+ RGB
+ PROCESS
+ 77
+ 77
+ 77
+
+
+ R=102 G=102 B=102
+ RGB
+ PROCESS
+ 102
+ 102
+ 102
+
+
+ R=128 G=128 B=128
+ RGB
+ PROCESS
+ 128
+ 128
+ 128
+
+
+ R=153 G=153 B=153
+ RGB
+ PROCESS
+ 153
+ 153
+ 153
+
+
+ R=179 G=179 B=179
+ RGB
+ PROCESS
+ 179
+ 179
+ 179
+
+
+ R=204 G=204 B=204
+ RGB
+ PROCESS
+ 204
+ 204
+ 204
+
+
+ R=230 G=230 B=230
+ RGB
+ PROCESS
+ 230
+ 230
+ 230
+
+
+ R=242 G=242 B=242
+ RGB
+ PROCESS
+ 242
+ 242
+ 242
+
+
+
+
+
+
+ Adobe PDF library 15.00
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+endstream
endobj
3 0 obj
<>
endobj
9 0 obj
<>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/Thumb 14 0 R/TrimBox[0.0 0.0 5000.0 5000.0]/Type/Page>>
endobj
10 0 obj
<>stream
+HI&
u@fya?o/>-l_p4Oݾӟ__f/Gc!-99/xc#}Som
+vgG b-}P+a1jKe),t+==so/{9zk;BB1j; ra6:َR;%#̤-bv2a}__tt6ȚU]M=rKOӜr_e7u53OG#Oçh|s[-p۰3-vԷڏ2
+dNeKkBu~شQ23,W[="pc;j1}ȉ~o
+:ӏQ1K|dR8B0ǏN%~߉.o7{|E7;7͘4ffݗX#ߏjX[