* UnixTimestampConverter should now obey a maximum value
This change prevents an issue where the converter would be unable to
handle obscenely large timestamp values - which are actually quite
common on Discord.
OptionalConverter had to be rewritten to support checking whether or not
an InnerConverter returned an Optional. The perf impacts from this
_shouldn't_ be too bad, as types without a custom parser (which should
be the majority of Optionals in the lib) will bypass the type-check.
* optimizations on OptionalConverter
- Add a helper under CDN for cover art URLs
It would be bad practice of us to leave CDN urls hardcoded in the
deserializer, would be harder to change down the line should Spotify
ever change their CDN.
I'm not entirely supportive of leaving Spotify's CDN hardcoded in our lib
either, but there's no better alternative.
- Change SpotifyGame#Artists to an IEnumerable<string>
Seems pretty common to prefer IEnumerables in place of Arrays.
* Initial Spotify support
* Remove GameAsset#ToEntity
- appId doesn't seem to be necessary, and Spotify Game doesn't return appId either.
* Implement SpotifyGame details
* Implement song Duration prop
* Add album art CDN
* Fix ActivityType
* Remove payload debug
* Add changes according to review
+ Make `ApplicationId` nullable
+ Move ctor after props
Previously it was implemented under Discord.Net.Rest, which seems
inconsistent and unnecessary.
This also allows Commands docstrings to reference EmbedBuilder, since
Commands only has a dependency on Core.
To reply with just a rich embed, users have to invoke ReplyAsync with
`ReplyAsync("", embed: embed)`, which seems wasteful, when they only
need to specify the embed.