diff --git a/src/Discord.Net.Core/CDN.cs b/src/Discord.Net.Core/CDN.cs index d3ade3722..415c0c30d 100644 --- a/src/Discord.Net.Core/CDN.cs +++ b/src/Discord.Net.Core/CDN.cs @@ -22,6 +22,12 @@ namespace Discord public static string GetEmojiUrl(ulong emojiId) => $"{DiscordConfig.CDNUrl}emojis/{emojiId}.png"; + public static string GetRichAssetUrl(ulong appId, string assetId, ushort size, ImageFormat format) + { + string extension = FormatToExtension(format, ""); + return $"{DiscordConfig.CDNUrl}app-assets/{appId}/{assetId}.{extension}?size={size}"; + } + private static string FormatToExtension(ImageFormat format, string imageId) { if (format == ImageFormat.Auto) diff --git a/src/Discord.Net.Core/Entities/Activities/Game.cs b/src/Discord.Net.Core/Entities/Activities/Game.cs new file mode 100644 index 000000000..85600a4ef --- /dev/null +++ b/src/Discord.Net.Core/Entities/Activities/Game.cs @@ -0,0 +1,19 @@ +using System.Diagnostics; + +namespace Discord +{ + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] + public class Game : IActivity + { + public string Name { get; internal set; } + + public Game() { } + public Game(string name) + { + Name = name; + } + + public override string ToString() => Name; + private string DebuggerDisplay => Name; + } +} diff --git a/src/Discord.Net.Core/Entities/Activities/GameAssets.cs b/src/Discord.Net.Core/Entities/Activities/GameAssets.cs new file mode 100644 index 000000000..85d9c8d2f --- /dev/null +++ b/src/Discord.Net.Core/Entities/Activities/GameAssets.cs @@ -0,0 +1,21 @@ +namespace Discord +{ + public class GameAssets + { + public GameAsset Small { get; internal set; } + public GameAsset Large { get; internal set; } + } + + public class GameAsset + { + internal GameAsset() { } + + internal ulong ApplicationId { get; set; } + + public string Text { get; internal set; } + public string ImageId { get; internal set; } + + public string GetImageUrl(ImageFormat format = ImageFormat.Auto, ushort size = 128) + => CDN.GetRichAssetUrl(ApplicationId, ImageId, size, format); + } +} \ No newline at end of file diff --git a/src/Discord.Net.Core/Entities/Activities/GameParty.cs b/src/Discord.Net.Core/Entities/Activities/GameParty.cs new file mode 100644 index 000000000..3d4138086 --- /dev/null +++ b/src/Discord.Net.Core/Entities/Activities/GameParty.cs @@ -0,0 +1,8 @@ +namespace Discord +{ + public class GameParty + { + public ulong[] Size { get; internal set; } + public ulong Id { get; internal set; } + } +} \ No newline at end of file diff --git a/src/Discord.Net.Core/Entities/Users/GameSecrets.cs b/src/Discord.Net.Core/Entities/Activities/GameSecrets.cs similarity index 100% rename from src/Discord.Net.Core/Entities/Users/GameSecrets.cs rename to src/Discord.Net.Core/Entities/Activities/GameSecrets.cs diff --git a/src/Discord.Net.Core/Entities/Users/GameTimestamps.cs b/src/Discord.Net.Core/Entities/Activities/GameTimestamps.cs similarity index 100% rename from src/Discord.Net.Core/Entities/Users/GameTimestamps.cs rename to src/Discord.Net.Core/Entities/Activities/GameTimestamps.cs diff --git a/src/Discord.Net.Core/Entities/Activities/IActivity.cs b/src/Discord.Net.Core/Entities/Activities/IActivity.cs new file mode 100644 index 000000000..0dcf34273 --- /dev/null +++ b/src/Discord.Net.Core/Entities/Activities/IActivity.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Discord +{ + public interface IActivity + { + string Name { get; } + } +} diff --git a/src/Discord.Net.Core/Entities/Activities/RichGame.cs b/src/Discord.Net.Core/Entities/Activities/RichGame.cs new file mode 100644 index 000000000..9b02d8f1f --- /dev/null +++ b/src/Discord.Net.Core/Entities/Activities/RichGame.cs @@ -0,0 +1,19 @@ +using System.Diagnostics; + +namespace Discord +{ + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] + public class RichGame : Game + { + public string Details { get; internal set;} + public string State { get; internal set;} + public ulong? ApplicationId { get; internal set; } + public GameAssets Assets { get; internal set; } + public GameParty Party { get; internal set; } + public GameSecrets Secrets { get; internal set; } + public GameTimestamps Timestamps { get; internal set; } + + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} (Rich)"; + } +} \ No newline at end of file diff --git a/src/Discord.Net.Core/Entities/Activities/StreamingGame.cs b/src/Discord.Net.Core/Entities/Activities/StreamingGame.cs new file mode 100644 index 000000000..140024272 --- /dev/null +++ b/src/Discord.Net.Core/Entities/Activities/StreamingGame.cs @@ -0,0 +1,21 @@ +using System.Diagnostics; + +namespace Discord +{ + [DebuggerDisplay(@"{DebuggerDisplay,nq}")] + public class StreamingGame : Game + { + public string Url { get; internal set; } + public StreamType StreamType { get; internal set; } + + public StreamingGame(string name, string url, StreamType streamType) + { + Name = name; + Url = url; + StreamType = streamType; + } + + public override string ToString() => Name; + private string DebuggerDisplay => $"{Name} ({Url})"; + } +} \ No newline at end of file diff --git a/src/Discord.Net.Core/Entities/Users/Game.cs b/src/Discord.Net.Core/Entities/Users/Game.cs deleted file mode 100644 index 74484ea93..000000000 --- a/src/Discord.Net.Core/Entities/Users/Game.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Diagnostics; - -namespace Discord -{ - // TODO 2.x: make this a class? - [DebuggerDisplay(@"{DebuggerDisplay,nq}")] - public struct Game - { - // All - public string Name { get; } - public StreamType StreamType { get; } - // Streaming - public string StreamUrl { get; } - // Rich - public string Details { get; } - public string State { get; } - public ulong? ApplicationId { get; } - public GameAssets? Assets { get; } - public GameParty? Party { get; } - public GameSecrets? Secrets { get; } - public GameTimestamps? Timestamps { get; } - - public Game(string name, string streamUrl = null, StreamType type = StreamType.NotStreaming) - : this(name, streamUrl, type, null, null, null, null, null, null, null) { } - public Game(string name, - string streamUrl, - StreamType type, - string details, - string state, - ulong? applicationId, - GameAssets? assets, - GameParty? party, - GameSecrets? secrets, - GameTimestamps? timestamps) - { - Name = name; - StreamUrl = streamUrl; - StreamType = type; - Details = details; - State = state; - ApplicationId = applicationId; - Assets = assets; - Party = party; - Secrets = secrets; - Timestamps = timestamps; - } - - public override string ToString() => Name; - private string DebuggerDisplay => StreamUrl != null ? $"{Name} ({StreamUrl})" : Name; - } -} diff --git a/src/Discord.Net.Core/Entities/Users/GameAssets.cs b/src/Discord.Net.Core/Entities/Users/GameAssets.cs deleted file mode 100644 index ce8fa2864..000000000 --- a/src/Discord.Net.Core/Entities/Users/GameAssets.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace Discord -{ - public struct GameAssets - { - public string SmallText { get; } - public string SmallImage { get; } - public string LargeText { get; } - public string LargeImage { get; } - - public GameAssets(string smallText, string smallImage, string largeText, string largeImage) - { - SmallText = smallText; - SmallImage = smallImage; - LargeText = largeText; - LargeImage = largeImage; - } - } -} \ No newline at end of file diff --git a/src/Discord.Net.Core/Entities/Users/GameParty.cs b/src/Discord.Net.Core/Entities/Users/GameParty.cs deleted file mode 100644 index 0dc5a2ddf..000000000 --- a/src/Discord.Net.Core/Entities/Users/GameParty.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Discord -{ - public struct GameParty - { - public ulong[] Size { get; } - public ulong Id { get; } - - public GameParty(ulong[] size, ulong id) - { - Size = size; - Id = id; - } - } -} \ No newline at end of file