From ee7bf028f782d3fc39eb514c08b95d498d9b3722 Mon Sep 17 00:00:00 2001 From: Christopher F Date: Fri, 29 Jul 2016 23:17:13 -0400 Subject: [PATCH] Adjust GuildExtensions per Voltana's feedback Instead of implicitly soft-casting IGuild to SocketGuild, I added a method to soft-cast IGuild to SocketGuild, and throw an InvalidOp if it came up null for some reason. GetUsers was changed from an IEnumerable to an IReadOnlyCollection to allow quick ".Count"-ing on the collection. --- .../WebSocket/Extensions/GuildExtensions.cs | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/Discord.Net/WebSocket/Extensions/GuildExtensions.cs b/src/Discord.Net/WebSocket/Extensions/GuildExtensions.cs index bf5a636a8..d2e8e1482 100644 --- a/src/Discord.Net/WebSocket/Extensions/GuildExtensions.cs +++ b/src/Discord.Net/WebSocket/Extensions/GuildExtensions.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; namespace Discord.WebSocket.Extensions @@ -9,36 +10,44 @@ namespace Discord.WebSocket.Extensions // Channels public static IGuildChannel GetChannel(this IGuild guild, ulong id) => - (guild as SocketGuild).GetChannel(id); + GetSocketGuild(guild).GetChannel(id); public static ITextChannel GetTextChannel(this IGuild guild, ulong id) => - (guild as SocketGuild).GetChannel(id) as ITextChannel; + GetSocketGuild(guild).GetChannel(id) as ITextChannel; public static IEnumerable GetTextChannels(this IGuild guild) => - (guild as SocketGuild).Channels.Select(c => c as ITextChannel).Where(c => c != null); + GetSocketGuild(guild).Channels.Select(c => c as ITextChannel).Where(c => c != null); public static IVoiceChannel GetVoiceChannel(this IGuild guild, ulong id) => - (guild as SocketGuild).GetChannel(id) as IVoiceChannel; + GetSocketGuild(guild).GetChannel(id) as IVoiceChannel; public static IEnumerable GetVoiceChannels(this IGuild guild) => - (guild as SocketGuild).Channels.Select(c => c as IVoiceChannel).Where(c => c != null); + GetSocketGuild(guild).Channels.Select(c => c as IVoiceChannel).Where(c => c != null); // Users public static IGuildUser GetCurrentUser(this IGuild guild) => - (guild as SocketGuild).CurrentUser; + GetSocketGuild(guild).CurrentUser; public static IGuildUser GetUser(this IGuild guild, ulong id) => - (guild as SocketGuild).GetUser(id); + GetSocketGuild(guild).GetUser(id); - public static IEnumerable GetUsers(this IGuild guild) => - (guild as SocketGuild).Members; + public static IReadOnlyCollection GetUsers(this IGuild guild) => + GetSocketGuild(guild).Members; public static int GetUserCount(this IGuild guild) => - (guild as SocketGuild).MemberCount; + GetSocketGuild(guild).MemberCount; public static int GetCachedUserCount(this IGuild guild) => - (guild as SocketGuild).DownloadedMemberCount; + GetSocketGuild(guild).DownloadedMemberCount; + + internal static SocketGuild GetSocketGuild(IGuild guild) + { + var socketGuild = guild as SocketGuild; + if (socketGuild == null) + throw new InvalidOperationException("This extension method is only valid on WebSocket Entities"); + return socketGuild; + } } }