diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj
index 92cb7f83b..aec38d9d5 100644
--- a/src/Discord.Net.Net45/Discord.Net.csproj
+++ b/src/Discord.Net.Net45/Discord.Net.csproj
@@ -67,6 +67,9 @@
API\Client\Common\ExtendedGuild.cs
+
+ API\Client\Common\ExtendedMember.cs
+
API\Client\Common\Guild.cs
diff --git a/src/Discord.Net/API/Client/Common/ExtendedGuild.cs b/src/Discord.Net/API/Client/Common/ExtendedGuild.cs
index bfb1971cc..63c55eddb 100644
--- a/src/Discord.Net/API/Client/Common/ExtendedGuild.cs
+++ b/src/Discord.Net/API/Client/Common/ExtendedGuild.cs
@@ -4,25 +4,20 @@ namespace Discord.API.Client
{
public class ExtendedGuild : Guild
{
- public class ExtendedMemberInfo : Member
- {
- [JsonProperty("mute")]
- public bool? IsServerMuted { get; set; }
- [JsonProperty("deaf")]
- public bool? IsServerDeafened { get; set; }
- }
+ [JsonProperty("member_count")]
+ public int? MemberCount { get; set; }
+ [JsonProperty("large")]
+ public bool IsLarge { get; set; }
+ [JsonProperty("unavailable")]
+ public bool? Unavailable { get; set; }
[JsonProperty("channels")]
public Channel[] Channels { get; set; }
[JsonProperty("members")]
- public ExtendedMemberInfo[] Members { get; set; }
+ public ExtendedMember[] Members { get; set; }
[JsonProperty("presences")]
public MemberPresence[] Presences { get; set; }
[JsonProperty("voice_states")]
public MemberVoiceState[] VoiceStates { get; set; }
- [JsonProperty("large")]
- public bool IsLarge { get; set; }
- [JsonProperty("unavailable")]
- public bool? Unavailable { get; set; }
}
}
diff --git a/src/Discord.Net/API/Client/Common/ExtendedMember.cs b/src/Discord.Net/API/Client/Common/ExtendedMember.cs
new file mode 100644
index 000000000..890ec9de5
--- /dev/null
+++ b/src/Discord.Net/API/Client/Common/ExtendedMember.cs
@@ -0,0 +1,12 @@
+using Newtonsoft.Json;
+
+namespace Discord.API.Client
+{
+ public class ExtendedMember : Member
+ {
+ [JsonProperty("mute")]
+ public bool? IsServerMuted { get; set; }
+ [JsonProperty("deaf")]
+ public bool? IsServerDeafened { get; set; }
+ }
+}
diff --git a/src/Discord.Net/API/Client/Common/Guild.cs b/src/Discord.Net/API/Client/Common/Guild.cs
index fd4519147..1ee4a0b51 100644
--- a/src/Discord.Net/API/Client/Common/Guild.cs
+++ b/src/Discord.Net/API/Client/Common/Guild.cs
@@ -44,5 +44,7 @@ namespace Discord.API.Client
public EmojiData[] Emojis { get; set; }
[JsonProperty("splash")]
public string Splash { get; set; }
+ [JsonProperty("verification_level")]
+ public int VerificationLevel { get; set; }
}
}
diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/GuildMembersChunk.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/GuildMembersChunk.cs
index 23be74855..4f2d36b8a 100644
--- a/src/Discord.Net/API/Client/GatewaySocket/Events/GuildMembersChunk.cs
+++ b/src/Discord.Net/API/Client/GatewaySocket/Events/GuildMembersChunk.cs
@@ -8,6 +8,6 @@ namespace Discord.API.Client.GatewaySocket
[JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))]
public ulong GuildId { get; set; }
[JsonProperty("members")]
- public Member[] Members { get; set; }
+ public ExtendedMember[] Members { get; set; }
}
}
diff --git a/src/Discord.Net/API/Client/GatewaySocket/Events/Ready.cs b/src/Discord.Net/API/Client/GatewaySocket/Events/Ready.cs
index c672a30ae..744e5b4b5 100644
--- a/src/Discord.Net/API/Client/GatewaySocket/Events/Ready.cs
+++ b/src/Discord.Net/API/Client/GatewaySocket/Events/Ready.cs
@@ -34,5 +34,7 @@ namespace Discord.API.Client.GatewaySocket
public object UserSettings { get; set; }
[JsonProperty("user_guild_settings")]
public object UserGuildSettings { get; set; }
+ [JsonProperty("tutorial")]
+ public object Tutorial { get; set; }
}
}
diff --git a/src/Discord.Net/Models/Channel.cs b/src/Discord.Net/Models/Channel.cs
index d99475b4e..a6ff1162b 100644
--- a/src/Discord.Net/Models/Channel.cs
+++ b/src/Discord.Net/Models/Channel.cs
@@ -72,7 +72,7 @@ namespace Discord
public IEnumerable Messages => _messages?.Values ?? Enumerable.Empty();
/// Gets a collection of all custom permissions used for this channel.
public IEnumerable PermissionOverwrites => _permissionOverwrites.Select(x => x.Value);
-
+
/// Gets a collection of all users with read access to this channel.
public IEnumerable Users
{
@@ -104,7 +104,7 @@ namespace Discord
return Enumerable.Empty();
}
}
-
+
internal Channel(DiscordClient client, ulong id, Server server)
: this(client, id)
{
diff --git a/src/Discord.Net/Models/Server.cs b/src/Discord.Net/Models/Server.cs
index 2efc006bb..6fb42ed92 100644
--- a/src/Discord.Net/Models/Server.cs
+++ b/src/Discord.Net/Models/Server.cs
@@ -51,6 +51,7 @@ namespace Discord
private readonly ConcurrentDictionary _channels;
private ulong _ownerId;
private ulong? _afkChannelId;
+ private int _userCount;
public DiscordClient Client { get; }
@@ -101,7 +102,14 @@ namespace Discord
public IEnumerable Users => _users.Select(x => x.Value.User);
/// Gets a collection of all roles in this server.
public IEnumerable Roles => _roles.Select(x => x.Value);
-
+
+ /// Gets the number of channels in this server.
+ public int ChannelCount => _channels.Count;
+ /// Gets the number of users in this server.
+ public int UserCount => _userCount;
+ /// Gets the number of roles in this server.
+ public int RoleCount => _channels.Count;
+
internal Server(DiscordClient client, ulong id)
{
Client = client;
@@ -179,6 +187,8 @@ namespace Discord
foreach (var subModel in model.Presences)
GetUser(subModel.User.Id)?.Update(subModel);
}
+ if (model.MemberCount != null)
+ _userCount = model.MemberCount.Value;
}
/// Edits this server, changing only non-null attributes.
@@ -436,6 +446,7 @@ namespace Discord
#region Users
internal User AddUser(ulong id)
{
+ _userCount++;
Member member = new Member(new User(Client, id, this), ServerPermissions.None);
if (id == Client.CurrentUser.Id)
{
@@ -452,6 +463,7 @@ namespace Discord
}
internal User RemoveUser(ulong id)
{
+ _userCount--;
Member member;
if (_users.TryRemove(id, out member))
{
diff --git a/src/Discord.Net/Models/User.cs b/src/Discord.Net/Models/User.cs
index fa3a35e49..b2f5488cf 100644
--- a/src/Discord.Net/Models/User.cs
+++ b/src/Discord.Net/Models/User.cs
@@ -169,7 +169,7 @@ namespace Discord
if (model.Roles != null)
UpdateRoles(model.Roles.Select(x => Server.GetRole(x)));
}
- internal void Update(ExtendedGuild.ExtendedMemberInfo model)
+ internal void Update(ExtendedMember model)
{
Update(model as APIMember);
diff --git a/src/Discord.Net/Net/Rest/JsonRestClient.cs b/src/Discord.Net/Net/Rest/JsonRestClient.cs
index 3aea24115..ac18ac823 100644
--- a/src/Discord.Net/Net/Rest/JsonRestClient.cs
+++ b/src/Discord.Net/Net/Rest/JsonRestClient.cs
@@ -1,5 +1,8 @@
using Discord.Logging;
using Newtonsoft.Json;
+#if TEST_RESPONSES
+using System;
+#endif
using System.IO;
namespace Discord.Net.Rest