diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs index 0e7cfde82..1fe9a741f 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs @@ -10,7 +10,7 @@ using Model = Discord.API.Channel; namespace Discord.WebSocket { [DebuggerDisplay(@"{DebuggerDisplay,nq}")] - public abstract class SocketGuildChannel : SocketChannel, IGuildChannel + public class SocketGuildChannel : SocketChannel, IGuildChannel { private ImmutableArray _overwrites; @@ -19,7 +19,7 @@ namespace Discord.WebSocket public int Position { get; private set; } public IReadOnlyCollection PermissionOverwrites => _overwrites; - public new abstract IReadOnlyCollection Users { get; } + public new virtual IReadOnlyCollection Users => ImmutableArray.Create(); internal SocketGuildChannel(DiscordSocketClient discord, ulong id, SocketGuild guild) : base(discord, id) @@ -35,7 +35,8 @@ namespace Discord.WebSocket case ChannelType.Voice: return SocketVoiceChannel.Create(guild, state, model); default: - throw new InvalidOperationException("Unknown guild channel type"); + // TODO: Proper implementation for channel categories + return new SocketGuildChannel(guild.Discord, model.Id, guild); } } internal override void Update(ClientState state, Model model) @@ -49,7 +50,7 @@ namespace Discord.WebSocket newOverwrites.Add(overwrites[i].ToEntity()); _overwrites = newOverwrites.ToImmutable(); } - + public Task ModifyAsync(Action func, RequestOptions options = null) => ChannelHelper.ModifyAsync(this, Discord, func, options); public Task DeleteAsync(RequestOptions options = null) @@ -115,7 +116,7 @@ namespace Discord.WebSocket public async Task CreateInviteAsync(int? maxAge = 3600, int? maxUses = null, bool isTemporary = false, bool isUnique = false, RequestOptions options = null) => await ChannelHelper.CreateInviteAsync(this, Discord, maxAge, maxUses, isTemporary, isUnique, options).ConfigureAwait(false); - public new abstract SocketGuildUser GetUser(ulong id); + public new virtual SocketGuildUser GetUser(ulong id) => null; public override string ToString() => Name; internal new SocketGuildChannel Clone() => MemberwiseClone() as SocketGuildChannel; @@ -145,7 +146,7 @@ namespace Discord.WebSocket => await RemovePermissionOverwriteAsync(role, options).ConfigureAwait(false); async Task IGuildChannel.RemovePermissionOverwriteAsync(IUser user, RequestOptions options) => await RemovePermissionOverwriteAsync(user, options).ConfigureAwait(false); - + IAsyncEnumerable> IGuildChannel.GetUsersAsync(CacheMode mode, RequestOptions options) => ImmutableArray.Create>(Users).ToAsyncEnumerable(); Task IGuildChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options)