Browse Source

Added SnowflakeUtils

tags/1.0.0-rc2
RogueException 8 years ago
parent
commit
e762dddfbb
19 changed files with 29 additions and 22 deletions
  1. +0
    -5
      src/Discord.Net.Core/Utils/DateTimeUtils.cs
  2. +1
    -1
      src/Discord.Net.Core/Utils/Preconditions.cs
  3. +12
    -0
      src/Discord.Net.Core/Utils/SnowflakeUtils.cs
  4. +1
    -1
      src/Discord.Net.Rest/Entities/Channels/RestChannel.cs
  5. +1
    -1
      src/Discord.Net.Rest/Entities/Channels/RpcVirtualMessageChannel.cs
  6. +1
    -1
      src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
  7. +1
    -1
      src/Discord.Net.Rest/Entities/Guilds/RestUserGuild.cs
  8. +1
    -1
      src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
  9. +1
    -1
      src/Discord.Net.Rest/Entities/RestApplication.cs
  10. +1
    -1
      src/Discord.Net.Rest/Entities/Roles/RestRole.cs
  11. +1
    -1
      src/Discord.Net.Rest/Entities/Users/RestUser.cs
  12. +1
    -1
      src/Discord.Net.Rpc/Entities/Channels/RpcChannel.cs
  13. +1
    -1
      src/Discord.Net.Rpc/Entities/Messages/RpcMessage.cs
  14. +1
    -1
      src/Discord.Net.Rpc/Entities/Users/RpcUser.cs
  15. +1
    -1
      src/Discord.Net.WebSocket/Entities/Channels/SocketChannel.cs
  16. +1
    -1
      src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
  17. +1
    -1
      src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs
  18. +1
    -1
      src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs
  19. +1
    -1
      src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs

+ 0
- 5
src/Discord.Net.Core/Utils/DateTimeUtils.cs View File

@@ -11,11 +11,6 @@ namespace Discord
private const long UnixEpochMilliseconds = 62_135_596_800_000; private const long UnixEpochMilliseconds = 62_135_596_800_000;
#endif #endif


public static DateTimeOffset FromSnowflake(ulong value)
=> FromUnixMilliseconds((long)((value >> 22) + 1420070400000UL));
public static ulong ToSnowflake(DateTimeOffset value)
=> ((ulong)ToUnixMilliseconds(value) - 1420070400000UL) << 22;

public static DateTimeOffset FromTicks(long ticks) public static DateTimeOffset FromTicks(long ticks)
=> new DateTimeOffset(ticks, TimeSpan.Zero); => new DateTimeOffset(ticks, TimeSpan.Zero);
public static DateTimeOffset? FromTicks(long? ticks) public static DateTimeOffset? FromTicks(long? ticks)


+ 1
- 1
src/Discord.Net.Core/Utils/Preconditions.cs View File

@@ -185,7 +185,7 @@ namespace Discord
// Bulk Delete // Bulk Delete
public static void YoungerThanTwoWeeks(ulong[] collection, string name) public static void YoungerThanTwoWeeks(ulong[] collection, string name)
{ {
var minimum = DateTimeUtils.ToSnowflake(DateTimeOffset.UtcNow.Subtract(TimeSpan.FromDays(14)));
var minimum = SnowflakeUtils.ToSnowflake(DateTimeOffset.UtcNow.Subtract(TimeSpan.FromDays(14)));
for (var i = 0; i < collection.Length; i++) for (var i = 0; i < collection.Length; i++)
{ {
if (collection[i] <= minimum) if (collection[i] <= minimum)


+ 12
- 0
src/Discord.Net.Core/Utils/SnowflakeUtils.cs View File

@@ -0,0 +1,12 @@
using System;

namespace Discord
{
public static class SnowflakeUtils
{
public static DateTimeOffset FromSnowflake(ulong value)
=> DateTimeUtils.FromUnixMilliseconds((long)((value >> 22) + 1420070400000UL));
public static ulong ToSnowflake(DateTimeOffset value)
=> ((ulong)DateTimeUtils.ToUnixMilliseconds(value) - 1420070400000UL) << 22;
}
}

+ 1
- 1
src/Discord.Net.Rest/Entities/Channels/RestChannel.cs View File

@@ -8,7 +8,7 @@ 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);
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);


internal RestChannel(BaseDiscordClient discord, ulong id) internal RestChannel(BaseDiscordClient discord, ulong id)
: base(discord, id) : base(discord, id)


+ 1
- 1
src/Discord.Net.Rest/Entities/Channels/RpcVirtualMessageChannel.cs View File

@@ -10,7 +10,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 DateTimeOffset CreatedAt => SnowflakeUtils.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)


+ 1
- 1
src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs View File

@@ -32,7 +32,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 DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
public ulong DefaultChannelId => Id; public ulong DefaultChannelId => Id;
public string IconUrl => CDN.GetGuildIconUrl(Id, IconId); public string IconUrl => CDN.GetGuildIconUrl(Id, IconId);
public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId); public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId);


+ 1
- 1
src/Discord.Net.Rest/Entities/Guilds/RestUserGuild.cs View File

@@ -14,7 +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 DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
public string IconUrl => CDN.GetGuildIconUrl(Id, _iconId); public string IconUrl => CDN.GetGuildIconUrl(Id, _iconId);


internal RestUserGuild(BaseDiscordClient discord, ulong id) internal RestUserGuild(BaseDiscordClient discord, ulong id)


+ 1
- 1
src/Discord.Net.Rest/Entities/Messages/RestMessage.cs View File

@@ -17,7 +17,7 @@ namespace Discord.Rest


public string Content { get; private set; } public string Content { get; private set; }


public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id);
public DateTimeOffset CreatedAt => SnowflakeUtils.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;


+ 1
- 1
src/Discord.Net.Rest/Entities/RestApplication.cs View File

@@ -17,7 +17,7 @@ namespace Discord.Rest


public IUser Owner { get; private set; } public IUser Owner { get; private set; }


public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id);
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
public string IconUrl => CDN.GetApplicationIconUrl(Id, _iconId); public string IconUrl => CDN.GetApplicationIconUrl(Id, _iconId);


internal RestApplication(BaseDiscordClient discord, ulong id) internal RestApplication(BaseDiscordClient discord, ulong id)


+ 1
- 1
src/Discord.Net.Rest/Entities/Roles/RestRole.cs View File

@@ -17,7 +17,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 DateTimeOffset CreatedAt => SnowflakeUtils.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
- 1
src/Discord.Net.Rest/Entities/Users/RestUser.cs View File

@@ -13,7 +13,7 @@ namespace Discord.Rest
public ushort DiscriminatorValue { get; private set; } public ushort DiscriminatorValue { get; private set; }
public string AvatarId { get; private set; } public string AvatarId { get; private set; }


public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id);
public DateTimeOffset CreatedAt => SnowflakeUtils.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;


+ 1
- 1
src/Discord.Net.Rpc/Entities/Channels/RpcChannel.cs View File

@@ -8,7 +8,7 @@ namespace Discord.Rpc
{ {
public string Name { get; private set; } public string Name { get; private set; }


public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id);
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);


internal RpcChannel(DiscordRpcClient discord, ulong id) internal RpcChannel(DiscordRpcClient discord, ulong id)
: base(discord, id) : base(discord, id)


+ 1
- 1
src/Discord.Net.Rpc/Entities/Messages/RpcMessage.cs View File

@@ -18,7 +18,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 DateTimeOffset CreatedAt => SnowflakeUtils.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
- 1
src/Discord.Net.Rpc/Entities/Users/RpcUser.cs View File

@@ -14,7 +14,7 @@ namespace Discord.Rpc
public ushort DiscriminatorValue { get; private set; } public ushort DiscriminatorValue { get; private set; }
public string AvatarId { get; private set; } public string AvatarId { get; private set; }


public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id);
public DateTimeOffset CreatedAt => SnowflakeUtils.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 bool IsWebhook => false; public virtual bool IsWebhook => false;


+ 1
- 1
src/Discord.Net.WebSocket/Entities/Channels/SocketChannel.cs View File

@@ -10,7 +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 DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
public IReadOnlyCollection<SocketUser> Users => GetUsersInternal(); public IReadOnlyCollection<SocketUser> Users => GetUsersInternal();


internal SocketChannel(DiscordSocketClient discord, ulong id) internal SocketChannel(DiscordSocketClient discord, ulong id)


+ 1
- 1
src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs View File

@@ -53,7 +53,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 DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
public SocketTextChannel DefaultChannel => GetTextChannel(Id); public SocketTextChannel DefaultChannel => GetTextChannel(Id);
public string IconUrl => CDN.GetGuildIconUrl(Id, IconId); public string IconUrl => CDN.GetGuildIconUrl(Id, IconId);
public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId); public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId);


+ 1
- 1
src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs View File

@@ -18,7 +18,7 @@ namespace Discord.WebSocket


public string Content { get; private set; } public string Content { get; private set; }


public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id);
public DateTimeOffset CreatedAt => SnowflakeUtils.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;


+ 1
- 1
src/Discord.Net.WebSocket/Entities/Roles/SocketRole.cs View File

@@ -19,7 +19,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 DateTimeOffset CreatedAt => SnowflakeUtils.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
- 1
src/Discord.Net.WebSocket/Entities/Users/SocketUser.cs View File

@@ -15,7 +15,7 @@ namespace Discord.WebSocket
internal abstract SocketGlobalUser GlobalUser { get; } internal abstract SocketGlobalUser GlobalUser { get; }
internal abstract SocketPresence Presence { get; set; } internal abstract SocketPresence Presence { get; set; }


public DateTimeOffset CreatedAt => DateTimeUtils.FromSnowflake(Id);
public DateTimeOffset CreatedAt => SnowflakeUtils.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;


Loading…
Cancel
Save