diff --git a/Directory.Build.targets b/Directory.Build.targets
index f1715a487..50fad7775 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -29,7 +29,8 @@
-
+
+
diff --git a/Discord.Net.sln b/Discord.Net.sln
index 3b0ea5400..8635159e4 100644
--- a/Discord.Net.sln
+++ b/Discord.Net.sln
@@ -1,19 +1,21 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.26124.0
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.31229.75
MinimumVisualStudioVersion = 15.0.26124.0
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CD5CFA4B-143E-4495-8BFD-AF419226CBE5}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Gateway", "src\Gateway\Discord.Net.Gateway.csproj", "{DAF502E3-CFE6-4243-8049-9A6157F42111}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Gateway", "src\Gateway\Discord.Net.Gateway.csproj", "{DAF502E3-CFE6-4243-8049-9A6157F42111}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{6D7B7A29-83FE-44F2-85E1-7D44B061EA27}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PingPong", "samples\PingPong\PingPong.csproj", "{54A6E396-5186-4D79-893B-6EFD1CF658CB}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PingPong", "samples\PingPong\PingPong.csproj", "{54A6E396-5186-4D79-893B-6EFD1CF658CB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{A47FC28E-1835-46C3-AFD5-7C048A43C157}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Gateway.UnitTests", "test\Gateway\Discord.Net.Gateway.UnitTests.csproj", "{7EC53EB6-6C15-4FD7-9B83-95F96025C14D}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Gateway.UnitTests", "test\Gateway\Discord.Net.Gateway.UnitTests.csproj", "{7EC53EB6-6C15-4FD7-9B83-95F96025C14D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Models", "src\Models\Discord.Net.Models.csproj", "{564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -24,9 +26,6 @@ Global
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
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
@@ -64,10 +63,29 @@ Global
{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
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Debug|x64.Build.0 = Debug|Any CPU
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Debug|x86.Build.0 = Debug|Any CPU
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Release|Any CPU.Build.0 = Release|Any CPU
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Release|x64.ActiveCfg = Release|Any CPU
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Release|x64.Build.0 = Release|Any CPU
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Release|x86.ActiveCfg = Release|Any CPU
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
EndGlobalSection
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}
+ {564A2E82-CE92-42F6-9D4E-8CC09C5CDF17} = {CD5CFA4B-143E-4495-8BFD-AF419226CBE5}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {36B0BFC9-AF79-4D25-89D4-2EE3C961612B}
EndGlobalSection
EndGlobal
diff --git a/src/Models/AuditLog/AuditEntryInfo.cs b/src/Models/AuditLog/AuditEntryInfo.cs
new file mode 100644
index 000000000..cea53bfeb
--- /dev/null
+++ b/src/Models/AuditLog/AuditEntryInfo.cs
@@ -0,0 +1,58 @@
+using System.Text.Json.Serialization;
+
+namespace Discord.Net.Models
+{
+ ///
+ /// Represents an audit entry info object.
+ ///
+ public record AuditEntryInfo
+ {
+ ///
+ /// Number of days after which inactive members were kicked.
+ ///
+ [JsonPropertyName("delete_member_days")]
+ public Optional DeleteMemberDays { get; init; } // actually sent as Optional
+
+ ///
+ /// Number of members removed by the prune.
+ ///
+ [JsonPropertyName("members_removed")]
+ public Optional MembersRemoved { get; init; } // actually sent as Optional
+
+ ///
+ /// Channel in which the entities were targeted.
+ ///
+ [JsonPropertyName("channel_id")]
+ public Optional ChannelId { get; init; }
+
+ ///
+ /// Id of the message that was targeted.
+ ///
+ [JsonPropertyName("message_id")]
+ public Optional MessageId { get; init; }
+
+ ///
+ /// Number of entities that were targeted.
+ ///
+ [JsonPropertyName("count")]
+ public Optional Count { get; init; } // actually sent as Optional
+
+ ///
+ /// Id of the overwritten entity.
+ ///
+ [JsonPropertyName("id")]
+ public Optional Id { get; init; }
+
+ ///
+ /// Type of overwritten entity - "0" for "role" or "1" for "member".
+ ///
+ [JsonPropertyName("type")]
+ public Optional Type { get; init; } // actually sent as Optional
+
+ ///
+ /// Name of the role if type is "0" (not present if type is "1").
+ ///
+ [JsonPropertyName("role_name")]
+ public Optional RoleName { get; init; }
+ }
+}
diff --git a/src/Models/AuditLog/AuditEntryInfoType.cs b/src/Models/AuditLog/AuditEntryInfoType.cs
new file mode 100644
index 000000000..e92f94314
--- /dev/null
+++ b/src/Models/AuditLog/AuditEntryInfoType.cs
@@ -0,0 +1,17 @@
+namespace Discord.Net.Models
+{
+ ///
+ /// Represents type of the overwritten entity for an audit entry info.
+ ///
+ public enum AuditEntryInfoType
+ {
+ ///
+ /// The type of the overwritten entity is a role.
+ ///
+ Role = 0,
+ ///
+ /// The type of the overwritten entity is a member.
+ ///
+ Member = 1,
+ }
+}
diff --git a/src/Models/AuditLog/AuditLog.cs b/src/Models/AuditLog/AuditLog.cs
new file mode 100644
index 000000000..54fd26bad
--- /dev/null
+++ b/src/Models/AuditLog/AuditLog.cs
@@ -0,0 +1,34 @@
+using System.Text.Json.Serialization;
+
+namespace Discord.Net.Models
+{
+ ///
+ /// Represents a discord audit log object.
+ ///
+ public record AuditLog
+ {
+ ///
+ /// Gets an array of s.
+ ///
+ /*[JsonPropertyName("webhooks")]
+ public Optional Webhooks { get; init; }*/ //TODO Add Webhook
+
+ ///
+ /// Gets an array of s.
+ ///
+ /*[JsonPropertyName("users")]
+ public Optional Users { get; init; }*/ //TODO Add User
+
+ ///
+ /// Gets an array of s.
+ ///
+ [JsonPropertyName("audit_log_entries")]
+ public Optional AuditLogEntries { get; init; }
+
+ ///
+ /// Gets an array of s.
+ ///
+ /*[JsonPropertyName("integrations")]
+ public Optional Integrations { get; init; }*/ //TODO Add Integration
+ }
+}
diff --git a/src/Models/AuditLog/AuditLogChange.cs b/src/Models/AuditLog/AuditLogChange.cs
new file mode 100644
index 000000000..32317aa1f
--- /dev/null
+++ b/src/Models/AuditLog/AuditLogChange.cs
@@ -0,0 +1,28 @@
+using System.Text.Json.Serialization;
+
+namespace Discord.Net.Models
+{
+ ///
+ /// Represents an audit log change object.
+ ///
+ public record AuditLogChange
+ {
+ ///
+ /// New value of the key.
+ ///
+ [JsonPropertyName("new_value")]
+ public Optional