diff --git a/src/Discord.Net.Core/Extensions/ChannelExtensions.cs b/src/Discord.Net.Core/Extensions/ChannelExtensions.cs new file mode 100644 index 000000000..b5ddae1cf --- /dev/null +++ b/src/Discord.Net.Core/Extensions/ChannelExtensions.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Discord +{ + public static class ChannelExtensions + { + /// + /// Attempts to get the based off of the channel's interfaces. + /// + /// The channel to get the type of. + /// The of the channel if found, otherwise . + public static ChannelType? GetChannelType(this IChannel channel) + { + switch (channel) + { + case IStageChannel: + return ChannelType.Stage; + + case IThreadChannel thread: + return thread.Type switch + { + ThreadType.NewsThread => ChannelType.NewsThread, + ThreadType.PrivateThread => ChannelType.PrivateThread, + ThreadType.PublicThread => ChannelType.PublicThread, + _ => null, + }; + + case ICategoryChannel: + return ChannelType.Category; + + case IDMChannel: + return ChannelType.DM; + + case IGroupChannel: + return ChannelType.Group; + + case INewsChannel: + return ChannelType.News; + + case IVoiceChannel: + return ChannelType.Voice; + + case ITextChannel: + return ChannelType.Text; + } + + return null; + } + } +}