diff --git a/src/Discord.Net.Core/Entities/Channels/IChannel.cs b/src/Discord.Net.Core/Entities/Channels/IChannel.cs index 1de37243..36baf362 100644 --- a/src/Discord.Net.Core/Entities/Channels/IChannel.cs +++ b/src/Discord.Net.Core/Entities/Channels/IChannel.cs @@ -8,6 +8,11 @@ namespace Discord /// public interface IChannel : ISnowflakeEntity { + /// + /// Get the type of this channel. + /// + ChannelType ChannelType { get; } + /// /// Gets the name of this channel. /// diff --git a/src/Discord.Net.Rest/Entities/Channels/RestChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestChannel.cs index bbf52a44..075959d7 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestChannel.cs @@ -12,6 +12,10 @@ namespace Discord.Rest public class RestChannel : RestEntity, IChannel, IUpdateable { #region RestChannel + + /// + public ChannelType ChannelType { get; internal set; } + /// public virtual DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); @@ -68,7 +72,11 @@ namespace Discord.Rest _ => throw new InvalidOperationException($"Unexpected channel type: {model.Type}"), }; } - internal virtual void Update(Model model) { } + + internal virtual void Update(Model model) + { + ChannelType = model.Type; + } /// public virtual Task UpdateAsync(RequestOptions options = null) => Task.Delay(0); diff --git a/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs index d0fccbb3..2c09b963 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestDMChannel.cs @@ -47,6 +47,8 @@ namespace Discord.Rest } internal override void Update(Model model) { + base.Update(model); + if(model.Recipients.IsSpecified) Recipient?.Update(model.Recipients.Value[0]); } diff --git a/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs index f7d5652c..7fa7b3c6 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestGroupChannel.cs @@ -41,6 +41,7 @@ namespace Discord.Rest } internal override void Update(Model model) { + base.Update(model); if (model.Name.IsSpecified) Name = model.Name.Value; if (model.Icon.IsSpecified) diff --git a/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs index 250cc32b..2bf16fcd 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs @@ -53,6 +53,7 @@ namespace Discord.Rest } internal override void Update(Model model) { + base.Update(model); Name = model.Name.Value; if (model.Position.IsSpecified) diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketChannel.cs index c30b3d25..3c7b7c9c 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketChannel.cs @@ -14,6 +14,9 @@ namespace Discord.WebSocket public abstract class SocketChannel : SocketEntity, IChannel { #region SocketChannel + /// + public ChannelType ChannelType { get; internal set; } + /// /// Gets when the channel is created. /// @@ -38,7 +41,11 @@ namespace Discord.WebSocket _ => throw new InvalidOperationException($"Unexpected channel type: {model.Type}"), }; } - internal abstract void Update(ClientState state, Model model); + + internal virtual void Update(ClientState state, Model model) + { + ChannelType = model.Type; + } #endregion #region User diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs index 7f087b1b..2627c8e3 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketDMChannel.cs @@ -44,6 +44,7 @@ namespace Discord.WebSocket internal override void Update(ClientState state, Model model) { Recipient.Update(state, model.Recipients.Value[0]); + base.Update(state, model); } internal static SocketDMChannel Create(DiscordSocketClient discord, ClientState state, ulong channelId, API.User recipient) { diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs index 3bba7e66..28702cd5 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketGroupChannel.cs @@ -63,6 +63,7 @@ namespace Discord.WebSocket } internal override void Update(ClientState state, Model model) { + base.Update(state, model); if (model.Name.IsSpecified) Name = model.Name.Value; if (model.Icon.IsSpecified) diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs index 92dd93d6..14c636e3 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs @@ -70,6 +70,7 @@ namespace Discord.WebSocket /// internal override void Update(ClientState state, Model model) { + base.Update(state, model); Name = model.Name.Value; Position = model.Position.GetValueOrDefault(0); diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedCategoryChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedCategoryChannel.cs index 5588bd67..928ceb18 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedCategoryChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedCategoryChannel.cs @@ -7,6 +7,7 @@ namespace Discord { internal sealed class MockedCategoryChannel : ICategoryChannel { + public ChannelType ChannelType => ChannelType.Category; public int Position => throw new NotImplementedException(); public IGuild Guild => throw new NotImplementedException(); diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedDMChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedDMChannel.cs index 8f1469a1..e6f24419 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedDMChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedDMChannel.cs @@ -8,6 +8,7 @@ namespace Discord { internal sealed class MockedDMChannel : IDMChannel { + public ChannelType ChannelType => ChannelType.DM; public IUser Recipient => throw new NotImplementedException(); public IReadOnlyCollection Recipients => throw new NotImplementedException(); diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs index 423b4cc9..9d7ae46c 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedGroupChannel.cs @@ -8,6 +8,7 @@ namespace Discord { internal sealed class MockedGroupChannel : IGroupChannel { + public ChannelType ChannelType => ChannelType.Group; public IReadOnlyCollection Recipients => throw new NotImplementedException(); public string Name => throw new NotImplementedException(); diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedInvalidChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedInvalidChannel.cs index 362eeb97..6f9c4498 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedInvalidChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedInvalidChannel.cs @@ -10,6 +10,7 @@ namespace Discord /// internal sealed class MockedInvalidChannel : IChannel { + public ChannelType ChannelType => ChannelType.Text; public string Name => throw new NotImplementedException(); public DateTimeOffset CreatedAt => throw new NotImplementedException(); diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedTextChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedTextChannel.cs index 82c69d52..52d54e25 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedTextChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedTextChannel.cs @@ -8,6 +8,7 @@ namespace Discord { internal sealed class MockedTextChannel : ITextChannel { + public ChannelType ChannelType => ChannelType.Text; public bool IsNsfw => throw new NotImplementedException(); public int DefaultSlowModeInterval => throw new NotImplementedException(); diff --git a/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs b/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs index f88bf484..9b557771 100644 --- a/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs +++ b/test/Discord.Net.Tests.Unit/MockedEntities/MockedVoiceChannel.cs @@ -9,6 +9,8 @@ namespace Discord { internal sealed class MockedVoiceChannel : IVoiceChannel { + public ChannelType ChannelType => ChannelType.Voice; + public int DefaultSlowModeInterval => throw new NotImplementedException(); public int Bitrate => throw new NotImplementedException();