Added SnowflakeUtils
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
src/Discord.Net.Core/Utils/SnowflakeUtils.cs
Normal file
12
src/Discord.Net.Core/Utils/SnowflakeUtils.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user