Browse Source

Feature: CustomStatusGame Activity (#1406)

* Implement CustomStatusGame activity

Adds the CustomStatusGame class, which is the activity corresponding to the custom status feature.

* Remove unused import from Game.cs
tags/2.2.0
Chris Johnston Christopher F 5 years ago
parent
commit
79a0ea9de3
5 changed files with 73 additions and 1 deletions
  1. +5
    -1
      src/Discord.Net.Core/Entities/Activities/ActivityType.cs
  2. +40
    -0
      src/Discord.Net.Core/Entities/Activities/CustomStatusGame.cs
  3. +6
    -0
      src/Discord.Net.Rest/API/Common/Game.cs
  4. +7
    -0
      src/Discord.Net.Rest/Extensions/EntityExtensions.cs
  5. +15
    -0
      src/Discord.Net.WebSocket/Extensions/EntityExtensions.cs

+ 5
- 1
src/Discord.Net.Core/Entities/Activities/ActivityType.cs View File

@@ -20,6 +20,10 @@ namespace Discord
/// <summary>
/// The user is watching some form of media.
/// </summary>
Watching = 3
Watching = 3,
/// <summary>
/// The user has set a custom status.
/// </summary>
CustomStatus = 4,
}
}

+ 40
- 0
src/Discord.Net.Core/Entities/Activities/CustomStatusGame.cs View File

@@ -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}";
}
}

+ 6
- 0
src/Discord.Net.Rest/API/Common/Game.cs View File

@@ -35,6 +35,12 @@ namespace Discord.API
public Optional<string> SessionId { get; set; }
[JsonProperty("Flags")]
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]
internal void OnError(StreamingContext context, ErrorContext errorContext)


+ 7
- 0
src/Discord.Net.Rest/Extensions/EntityExtensions.cs View File

@@ -5,6 +5,13 @@ namespace Discord.Rest
{
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)
=> new GuildEmote(model.Id.Value,
model.Name,


+ 15
- 0
src/Discord.Net.WebSocket/Extensions/EntityExtensions.cs View File

@@ -1,3 +1,5 @@
using Discord.Rest;
using System;
using System.Collections.Immutable;
using System.Linq;

@@ -7,6 +9,19 @@ namespace Discord.WebSocket
{
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
if (model.SyncId.IsSpecified)
{


Loading…
Cancel
Save