| @@ -1,6 +1,9 @@ | |||||
| using System; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| public interface ISnowflakeEntity : IEntity<ulong> | public interface ISnowflakeEntity : IEntity<ulong> | ||||
| { | { | ||||
| DateTimeOffset CreatedAt { get; } | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,10 +0,0 @@ | |||||
| using System; | |||||
| namespace Discord.Extensions | |||||
| { | |||||
| public static class SnowflakeEntityExtensions | |||||
| { | |||||
| //TODO: C#7 Candidate for extension property. | |||||
| public static DateTimeOffset GetCreatedAt(this ISnowflakeEntity entity) => DateTimeUtils.FromSnowflake(entity.Id); | |||||
| } | |||||
| } | |||||
| @@ -8,6 +8,8 @@ namespace Discord.Rest | |||||
| { | { | ||||
| public abstract class RestChannel : RestEntity<ulong>, IChannel, IUpdateable | public abstract class RestChannel : RestEntity<ulong>, IChannel, IUpdateable | ||||
| { | { | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| internal RestChannel(BaseDiscordClient discord, ulong id) | internal RestChannel(BaseDiscordClient discord, ulong id) | ||||
| : base(discord, id) | : base(discord, id) | ||||
| { | { | ||||
| @@ -1,5 +1,4 @@ | |||||
| using Discord.Rest; | |||||
| using System; | |||||
| using System; | |||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Diagnostics; | using System.Diagnostics; | ||||
| using System.IO; | using System.IO; | ||||
| @@ -12,6 +11,7 @@ namespace Discord.Rest | |||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | ||||
| internal class RestVirtualMessageChannel : RestEntity<ulong>, IMessageChannel | internal class RestVirtualMessageChannel : RestEntity<ulong>, IMessageChannel | ||||
| { | { | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public string Mention => MentionUtils.MentionChannel(Id); | public string Mention => MentionUtils.MentionChannel(Id); | ||||
| internal RestVirtualMessageChannel(BaseDiscordClient discord, ulong id) | internal RestVirtualMessageChannel(BaseDiscordClient discord, ulong id) | ||||
| @@ -33,6 +33,7 @@ namespace Discord.Rest | |||||
| public string SplashId { get; private set; } | public string SplashId { get; private set; } | ||||
| internal bool Available { get; private set; } | internal bool Available { get; private set; } | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public ulong DefaultChannelId => Id; | public ulong DefaultChannelId => Id; | ||||
| public string IconUrl => API.CDN.GetGuildIconUrl(Id, IconId); | public string IconUrl => API.CDN.GetGuildIconUrl(Id, IconId); | ||||
| public string SplashUrl => API.CDN.GetGuildSplashUrl(Id, SplashId); | public string SplashUrl => API.CDN.GetGuildSplashUrl(Id, SplashId); | ||||
| @@ -1,4 +1,5 @@ | |||||
| using System.Diagnostics; | |||||
| using System; | |||||
| using System.Diagnostics; | |||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.UserGuild; | using Model = Discord.API.UserGuild; | ||||
| @@ -13,6 +14,7 @@ namespace Discord.Rest | |||||
| public bool IsOwner { get; private set; } | public bool IsOwner { get; private set; } | ||||
| public GuildPermissions Permissions { get; private set; } | public GuildPermissions Permissions { get; private set; } | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public string IconUrl => API.CDN.GetGuildIconUrl(Id, _iconId); | public string IconUrl => API.CDN.GetGuildIconUrl(Id, _iconId); | ||||
| internal RestUserGuild(BaseDiscordClient discord, ulong id) | internal RestUserGuild(BaseDiscordClient discord, ulong id) | ||||
| @@ -17,6 +17,7 @@ namespace Discord.Rest | |||||
| public string Content { get; private set; } | public string Content { get; private set; } | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public virtual bool IsTTS => false; | public virtual bool IsTTS => false; | ||||
| public virtual bool IsPinned => false; | public virtual bool IsPinned => false; | ||||
| public virtual DateTimeOffset? EditedTimestamp => null; | public virtual DateTimeOffset? EditedTimestamp => null; | ||||
| @@ -17,6 +17,7 @@ namespace Discord.Rest | |||||
| public IUser Owner { get; private set; } | public IUser Owner { get; private set; } | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public string IconUrl => API.CDN.GetApplicationIconUrl(Id, _iconId); | public string IconUrl => API.CDN.GetApplicationIconUrl(Id, _iconId); | ||||
| internal RestApplication(BaseDiscordClient discord, ulong id) | internal RestApplication(BaseDiscordClient discord, ulong id) | ||||
| @@ -18,6 +18,7 @@ namespace Discord.Rest | |||||
| public GuildPermissions Permissions { get; private set; } | public GuildPermissions Permissions { get; private set; } | ||||
| public int Position { get; private set; } | public int Position { get; private set; } | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public bool IsEveryone => Id == Guild.Id; | public bool IsEveryone => Id == Guild.Id; | ||||
| public string Mention => MentionUtils.MentionRole(Id); | public string Mention => MentionUtils.MentionRole(Id); | ||||
| @@ -1,4 +1,5 @@ | |||||
| using System.Diagnostics; | |||||
| using System; | |||||
| using System.Diagnostics; | |||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.User; | using Model = Discord.API.User; | ||||
| @@ -13,6 +14,7 @@ namespace Discord.Rest | |||||
| public string AvatarId { get; private set; } | public string AvatarId { get; private set; } | ||||
| public string AvatarUrl => API.CDN.GetUserAvatarUrl(Id, AvatarId); | public string AvatarUrl => API.CDN.GetUserAvatarUrl(Id, AvatarId); | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public string Discriminator => DiscriminatorValue.ToString("D4"); | public string Discriminator => DiscriminatorValue.ToString("D4"); | ||||
| public string Mention => MentionUtils.MentionUser(Id); | public string Mention => MentionUtils.MentionUser(Id); | ||||
| public virtual Game? Game => null; | public virtual Game? Game => null; | ||||
| @@ -8,6 +8,8 @@ namespace Discord.Rpc | |||||
| { | { | ||||
| public string Name { get; private set; } | public string Name { get; private set; } | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| internal RpcChannel(DiscordRpcClient discord, ulong id) | internal RpcChannel(DiscordRpcClient discord, ulong id) | ||||
| : base(discord, id) | : base(discord, id) | ||||
| { | { | ||||
| @@ -15,6 +15,7 @@ namespace Discord.Rpc | |||||
| public string Content { get; private set; } | public string Content { get; private set; } | ||||
| public Color AuthorColor { get; private set; } | public Color AuthorColor { get; private set; } | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public virtual bool IsTTS => false; | public virtual bool IsTTS => false; | ||||
| public virtual bool IsPinned => false; | public virtual bool IsPinned => false; | ||||
| public virtual bool IsBlocked => false; | public virtual bool IsBlocked => false; | ||||
| @@ -1,4 +1,5 @@ | |||||
| using Discord.Rest; | using Discord.Rest; | ||||
| using System; | |||||
| using System.Diagnostics; | using System.Diagnostics; | ||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.User; | using Model = Discord.API.User; | ||||
| @@ -14,6 +15,7 @@ namespace Discord.Rpc | |||||
| public string AvatarId { get; private set; } | public string AvatarId { get; private set; } | ||||
| public string AvatarUrl => API.CDN.GetUserAvatarUrl(Id, AvatarId); | public string AvatarUrl => API.CDN.GetUserAvatarUrl(Id, AvatarId); | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public string Discriminator => DiscriminatorValue.ToString("D4"); | public string Discriminator => DiscriminatorValue.ToString("D4"); | ||||
| public string Mention => MentionUtils.MentionUser(Id); | public string Mention => MentionUtils.MentionUser(Id); | ||||
| public virtual Game? Game => null; | public virtual Game? Game => null; | ||||
| @@ -10,6 +10,7 @@ namespace Discord.WebSocket | |||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | ||||
| public abstract class SocketChannel : SocketEntity<ulong>, IChannel | public abstract class SocketChannel : SocketEntity<ulong>, IChannel | ||||
| { | { | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public IReadOnlyCollection<SocketUser> Users => GetUsersInternal(); | public IReadOnlyCollection<SocketUser> Users => GetUsersInternal(); | ||||
| internal SocketChannel(DiscordSocketClient discord, ulong id) | internal SocketChannel(DiscordSocketClient discord, ulong id) | ||||
| @@ -51,6 +51,7 @@ namespace Discord.WebSocket | |||||
| public string IconId { get; private set; } | public string IconId { get; private set; } | ||||
| public string SplashId { get; private set; } | public string SplashId { get; private set; } | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public ulong DefaultChannelId => Id; | public ulong DefaultChannelId => Id; | ||||
| public string IconUrl => API.CDN.GetGuildIconUrl(Id, IconId); | public string IconUrl => API.CDN.GetGuildIconUrl(Id, IconId); | ||||
| public string SplashUrl => API.CDN.GetGuildSplashUrl(Id, SplashId); | public string SplashUrl => API.CDN.GetGuildSplashUrl(Id, SplashId); | ||||
| @@ -15,6 +15,7 @@ namespace Discord.WebSocket | |||||
| public string Content { get; private set; } | public string Content { get; private set; } | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public virtual bool IsTTS => false; | public virtual bool IsTTS => false; | ||||
| public virtual bool IsPinned => false; | public virtual bool IsPinned => false; | ||||
| public virtual DateTimeOffset? EditedTimestamp => null; | public virtual DateTimeOffset? EditedTimestamp => null; | ||||
| @@ -18,7 +18,7 @@ namespace Discord.WebSocket | |||||
| private ImmutableArray<Attachment> _attachments; | private ImmutableArray<Attachment> _attachments; | ||||
| private ImmutableArray<Embed> _embeds; | private ImmutableArray<Embed> _embeds; | ||||
| private ImmutableArray<ITag> _tags; | private ImmutableArray<ITag> _tags; | ||||
| public override bool IsTTS => _isTTS; | public override bool IsTTS => _isTTS; | ||||
| public override bool IsPinned => _isPinned; | public override bool IsPinned => _isPinned; | ||||
| public override ulong? WebhookId => _webhookId; | public override ulong? WebhookId => _webhookId; | ||||
| @@ -20,6 +20,7 @@ namespace Discord.WebSocket | |||||
| public GuildPermissions Permissions { get; private set; } | public GuildPermissions Permissions { get; private set; } | ||||
| public int Position { get; private set; } | public int Position { get; private set; } | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public bool IsEveryone => Id == Guild.Id; | public bool IsEveryone => Id == Guild.Id; | ||||
| public string Mention => MentionUtils.MentionRole(Id); | public string Mention => MentionUtils.MentionRole(Id); | ||||
| @@ -1,4 +1,5 @@ | |||||
| using Discord.Rest; | using Discord.Rest; | ||||
| using System; | |||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
| using Model = Discord.API.User; | using Model = Discord.API.User; | ||||
| using PresenceModel = Discord.API.Presence; | using PresenceModel = Discord.API.Presence; | ||||
| @@ -15,6 +16,7 @@ namespace Discord.WebSocket | |||||
| internal abstract SocketPresence Presence { get; set; } | internal abstract SocketPresence Presence { get; set; } | ||||
| public string AvatarUrl => API.CDN.GetUserAvatarUrl(Id, AvatarId); | public string AvatarUrl => API.CDN.GetUserAvatarUrl(Id, AvatarId); | ||||
| public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id); | |||||
| public string Discriminator => DiscriminatorValue.ToString("D4"); | public string Discriminator => DiscriminatorValue.ToString("D4"); | ||||
| public string Mention => MentionUtils.MentionUser(Id); | public string Mention => MentionUtils.MentionUser(Id); | ||||
| public Game? Game => Presence.Game; | public Game? Game => Presence.Game; | ||||