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