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