using Newtonsoft.Json; namespace NadekoBot.Modules.Searches.Common { public interface IStreamResponse { int Viewers { get; } string Title { get; } bool Live { get; } string Game { get; } int Followers { get; } string Url { get; } string Icon { get; } } public class SmashcastResponse : IStreamResponse { public bool Success { get; set; } = true; public int Followers { get; set; } [JsonProperty("user_logo")] public string UserLogo { get; set; } [JsonProperty("is_live")] public string IsLive { get; set; } public int Viewers => 0; public string Title => ""; public bool Live => IsLive == "1"; public string Game => ""; public string Icon => !string.IsNullOrWhiteSpace(UserLogo) ? "https://edge.sf.hitbox.tv" + UserLogo : ""; public string Url { get; set; } } public class PicartoResponse : IStreamResponse { public string Name { get; set; } public int Viewers { get; set; } public string Title { get; set; } [JsonProperty("online")] public bool Live { get; set; } [JsonProperty("category")] public string Game { get; set; } public int Followers { get; set; } public string Url => "https://picarto.tv/" + Name; [JsonProperty("thumbnail")] public string Icon { get; set; } } public class TwitchResponse : IStreamResponse { public string Error { get; set; } = null; public bool IsLive => Stream != null; public StreamInfo Stream { get; set; } public class StreamInfo { public int Viewers { get; set; } public string Game { get; set; } public ChannelInfo Channel { get; set; } public class ChannelInfo { public string Status { get; set; } public string Logo { get; set; } public int Followers { get; set; } } } public int Viewers => Stream?.Viewers ?? 0; public string Title => Stream?.Channel?.Status; public bool Live => IsLive; public string Game => Stream?.Game; public int Followers => Stream?.Channel?.Followers ?? 0; public string Url { get; set; } public string Icon => Stream?.Channel?.Logo; } public class MixerResponse : IStreamResponse { public class MixerType { public string Parent { get; set; } public string Name { get; set; } } public class MixerThumbnail { public string Url { get; set; } } public string Url { get; set; } public string Error { get; set; } = null; [JsonProperty("online")] public bool IsLive { get; set; } public int ViewersCurrent { get; set; } public string Name { get; set; } public int NumFollowers { get; set; } public MixerType Type { get; set; } public MixerThumbnail Thumbnail { get; set; } public int Viewers => ViewersCurrent; public string Title => Name; public bool Live => IsLive; public string Game => Type?.Name ?? ""; public int Followers => NumFollowers; public string Icon => Thumbnail?.Url; } }