namespace KfChatDotNetBot.Models.DbModels; public class StreamDbModel { public int Id { get; set; } /// /// User associated with the stream if any. If none associated, then it'll just say "Somebody has gone live" /// public UserDbModel? User { get; set; } = null; /// /// Absolute URL of the streamer /// public required string StreamUrl { get; set; } /// /// Service the streamer is using /// public required StreamService Service { get; set; } /// /// JSON containing arbitrary data, e.g. social name for Parti, streamer ID for Kick, etc. /// public string? Metadata { get; set; } = null; /// /// Whether to automatically capture a stream when it goes live using yt-dlp / streamlink /// public bool AutoCapture { get; set; } = false; } public enum StreamService { Kick, Parti, DLive, KiwiPeerTube } public class BaseMetaModel { public CaptureOverridesModel? CaptureOverrides { get; set; } = null; } public class CaptureOverridesModel { // Options applicable to YtDlp will not work with Streamlink and vice versa // That being said, some options are shared while still being explicitly marked as YtDlp // This applies to CaptureYtDlpWorkingDirectory, CaptureYtDlpParentTerminal, and CaptureYtDlpScriptPath public string? CaptureYtDlpBinaryPath { get; set; } = null; public string? CaptureYtDlpWorkingDirectory { get; set; } = null; public string? CaptureYtDlpCookiesFromBrowser { get; set; } = null; public string? CaptureYtDlpOutputFormat { get; set; } = null; public string? CaptureYtDlpParentTerminal { get; set; } = null; public string? CaptureYtDlpScriptPath { get; set; } = null; public string? CaptureYtDlpUserAgent { get; set; } = null; public string? CaptureStreamlinkBinaryPath { get; set; } = null; public string? CaptureStreamlinkOutputFormat { get; set; } = null; public string? CaptureStreamlinkRemuxScript { get; set; } = null; public string? CaptureStreamlinkTwitchOptions { get; set; } = null; } public class KickStreamMetaModel : BaseMetaModel { public required int ChannelId { get; set; } } public class PeerTubeMetaModel : BaseMetaModel { public required string AccountName { get; set; } }