#nullable enable using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using Telegram.Bot.Types; using File = Telegram.Bot.Types.File; namespace West.TelegramBot.ChatQuotes.Model; [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] public class QuoteRequest { public QuoteRequest(Message msg) { // TODO: move default values to config Format = "webp"; BackgroundColor = "#1b1429"; Width = 512; Height = 768; Scale = 2; Messages = new List {QuoteMessage.FromMessage(msg)}; } public QuoteType Type { get; set; } public string Format { get; set; } public string BackgroundColor { get; set; } public int Width { get; set; } public int Height { get; set; } public int Scale { get; set; } public List? Messages { get; set; } public string ToJson() { return JsonConvert.SerializeObject(this, ChatQuotes.SerializerSettings); } } [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))] public class QuoteMessage { public List? Media { get; set; } public QuoteMediaType? MediaType { get; set; } public long ChatId { get; set; } public bool Avatar { get; set; } = true; public User? From { get; set; } public string? Text { get; set; } public Message? ReplyMessage { get; set; } public static QuoteMessage FromMessage(Message msg) { var quoteMessage = new QuoteMessage(); if (msg.Text != null) { quoteMessage.Text = msg.Text; } var sticker = msg.Sticker; if (sticker != null) { var file = new File { FileId = sticker.FileId, FileSize = sticker.FileSize, FileUniqueId = sticker.FileUniqueId }; quoteMessage.Media = new List {file}; quoteMessage.MediaType = QuoteMediaType.Sticker; } quoteMessage.ChatId = msg.Chat.Id; quoteMessage.ReplyMessage = msg.ReplyToMessage; quoteMessage.From = User.FromTgUser(msg.From!); return quoteMessage; } } public enum QuoteMediaType { Sticker = 0 }