* Implement CustomStatusGame activity Adds the CustomStatusGame class, which is the activity corresponding to the custom status feature. * Remove unused import from Game.cstags/2.2.0
| @@ -20,6 +20,10 @@ namespace Discord | |||||
| /// <summary> | /// <summary> | ||||
| /// The user is watching some form of media. | /// The user is watching some form of media. | ||||
| /// </summary> | /// </summary> | ||||
| Watching = 3 | |||||
| Watching = 3, | |||||
| /// <summary> | |||||
| /// The user has set a custom status. | |||||
| /// </summary> | |||||
| CustomStatus = 4, | |||||
| } | } | ||||
| } | } | ||||
| @@ -0,0 +1,40 @@ | |||||
| using System; | |||||
| using System.Diagnostics; | |||||
| namespace Discord | |||||
| { | |||||
| /// <summary> | |||||
| /// A user's activity for their custom status. | |||||
| /// </summary> | |||||
| [DebuggerDisplay(@"{DebuggerDisplay,nq}")] | |||||
| public class CustomStatusGame : Game | |||||
| { | |||||
| internal CustomStatusGame() { } | |||||
| /// <summary> | |||||
| /// Gets the emote, if it is set. | |||||
| /// </summary> | |||||
| /// <returns> | |||||
| /// An <see cref="IEmote"/> containing the <see cref="Emoji"/> or <see cref="GuildEmote"/> set by the user. | |||||
| /// </returns> | |||||
| public IEmote Emote { get; internal set; } | |||||
| /// <summary> | |||||
| /// Gets the timestamp of when this status was created. | |||||
| /// </summary> | |||||
| /// <returns> | |||||
| /// A <see cref="DateTimeOffset"/> containing the time when this status was created. | |||||
| /// </returns> | |||||
| public DateTimeOffset CreatedAt { get; internal set; } | |||||
| /// <summary> | |||||
| /// Gets the state of the status. | |||||
| /// </summary> | |||||
| public string State { get; internal set; } | |||||
| public override string ToString() | |||||
| => $"{Emote} {State}"; | |||||
| private string DebuggerDisplay => $"{Name}"; | |||||
| } | |||||
| } | |||||
| @@ -35,6 +35,12 @@ namespace Discord.API | |||||
| public Optional<string> SessionId { get; set; } | public Optional<string> SessionId { get; set; } | ||||
| [JsonProperty("Flags")] | [JsonProperty("Flags")] | ||||
| public Optional<ActivityProperties> Flags { get; set; } | public Optional<ActivityProperties> Flags { get; set; } | ||||
| [JsonProperty("id")] | |||||
| public Optional<string> Id { get; set; } | |||||
| [JsonProperty("emoji")] | |||||
| public Optional<Emoji> Emoji { get; set; } | |||||
| [JsonProperty("created_at")] | |||||
| public Optional<long> CreatedAt { get; set; } | |||||
| [OnError] | [OnError] | ||||
| internal void OnError(StreamingContext context, ErrorContext errorContext) | internal void OnError(StreamingContext context, ErrorContext errorContext) | ||||
| @@ -5,6 +5,13 @@ namespace Discord.Rest | |||||
| { | { | ||||
| internal static class EntityExtensions | internal static class EntityExtensions | ||||
| { | { | ||||
| public static IEmote ToIEmote(this API.Emoji model) | |||||
| { | |||||
| if (model.Id.HasValue) | |||||
| return model.ToEntity(); | |||||
| return new Emoji(model.Name); | |||||
| } | |||||
| public static GuildEmote ToEntity(this API.Emoji model) | public static GuildEmote ToEntity(this API.Emoji model) | ||||
| => new GuildEmote(model.Id.Value, | => new GuildEmote(model.Id.Value, | ||||
| model.Name, | model.Name, | ||||
| @@ -1,3 +1,5 @@ | |||||
| using Discord.Rest; | |||||
| using System; | |||||
| using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
| using System.Linq; | using System.Linq; | ||||
| @@ -7,6 +9,19 @@ namespace Discord.WebSocket | |||||
| { | { | ||||
| public static IActivity ToEntity(this API.Game model) | public static IActivity ToEntity(this API.Game model) | ||||
| { | { | ||||
| // Custom Status Game | |||||
| if (model.Id.IsSpecified) | |||||
| { | |||||
| return new CustomStatusGame() | |||||
| { | |||||
| Type = ActivityType.CustomStatus, | |||||
| Name = model.Name, | |||||
| State = model.State.IsSpecified ? model.State.Value : null, | |||||
| Emote = model.Emoji.IsSpecified ? model.Emoji.Value.ToIEmote() : null, | |||||
| CreatedAt = DateTimeOffset.FromUnixTimeMilliseconds(model.CreatedAt.Value), | |||||
| }; | |||||
| } | |||||
| // Spotify Game | // Spotify Game | ||||
| if (model.SyncId.IsSpecified) | if (model.SyncId.IsSpecified) | ||||
| { | { | ||||