@@ -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; | ||||