@@ -16,13 +16,18 @@ namespace Discord
/// The ID of this emote
/// </summary>
public ulong Id { get; }
/// <summary>
/// Is this emote animated?
/// </summary>
public bool Animated { get; }
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
public string Url => CDN.GetEmojiUrl(Id);
public string Url => CDN.GetEmojiUrl(Id, Animated );
internal Emote(ulong id, string name)
internal Emote(ulong id, string name, bool animated )
{
Id = id;
Name = name;
Animated = animated;
}
public override bool Equals(object other)
@@ -59,17 +64,20 @@ namespace Discord
public static bool TryParse(string text, out Emote result)
{
result = null;
if (text.Length >= 4 && text[0] == '<' && text[1] == ':' && text[text.Length - 1] == '>')
if (text.Length >= 4 && text[0] == '<' && ( text[1] == ':' || (text[1] == 'a' && text[2] == ':')) && text[text.Length - 1] == '>')
{
int splitIndex = text.IndexOf(':', 2);
bool animated = text[1] == 'a';
int startIndex = animated ? 3 : 2;
int splitIndex = text.IndexOf(':', startIndex);
if (splitIndex == -1)
return false;
if (!ulong.TryParse(text.Substring(splitIndex + 1, text.Length - splitIndex - 2), NumberStyles.None, CultureInfo.InvariantCulture, out ulong id))
return false;
string name = text.Substring(2, splitIndex - 2 );
result = new Emote(id, name);
string name = text.Substring(startIndex, splitIndex - startIndex );
result = new Emote(id, name, animated );
return true;
}
return false;
@@ -77,6 +85,6 @@ namespace Discord
}
private string DebuggerDisplay => $"{Name} ({Id})";
public override string ToString() => $"<:{Name}:{Id}>";
public override string ToString() => $"<{(Animated ? "a" : "")} :{Name}:{Id}>";
}
}