using Discord.Rest; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using Model = Discord.API.Channel; namespace Discord.WebSocket { [DebuggerDisplay(@"{DebuggerDisplay,nq}")] public abstract class SocketChannel : SocketEntity, IChannel { public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); public IReadOnlyCollection Users => GetUsersInternal(); internal SocketChannel(DiscordSocketClient discord, ulong id) : base(discord, id) { } internal static ISocketPrivateChannel CreatePrivate(DiscordSocketClient discord, ClientState state, Model model) { switch (model.Type) { case ChannelType.DM: return SocketDMChannel.Create(discord, state, model); case ChannelType.Group: return SocketGroupChannel.Create(discord, state, model); default: throw new InvalidOperationException($"Unexpected channel type: {model.Type}"); } } internal abstract void Update(ClientState state, Model model); //User public SocketUser GetUser(ulong id) => GetUserInternal(id); internal abstract SocketUser GetUserInternal(ulong id); internal abstract IReadOnlyCollection GetUsersInternal(); internal SocketChannel Clone() => MemberwiseClone() as SocketChannel; //IChannel string IChannel.Name => null; Task IChannel.GetUserAsync(ulong id, CacheMode mode, RequestOptions options) => Task.FromResult(null); //Overridden IAsyncEnumerable> IChannel.GetUsersAsync(CacheMode mode, RequestOptions options) => AsyncEnumerable.Empty>(); //Overridden } }