#pragma warning disable CS1591 using Discord.Net.Converters; using Discord.Net.Rest; using Newtonsoft.Json; using System.Collections.Generic; using System.IO; using System.Text; namespace Discord.API.Rest { internal class UploadFileParams { private static JsonSerializer _serializer = new JsonSerializer { ContractResolver = new DiscordContractResolver() }; public Stream File { get; } public Optional Filename { get; set; } public Optional Content { get; set; } public Optional Nonce { get; set; } public Optional IsTTS { get; set; } public Optional Embed { get; set; } public bool IsSpoiler { get; set; } = false; public UploadFileParams(Stream file) { File = file; } public IReadOnlyDictionary ToDictionary() { var d = new Dictionary(); var filename = Filename.GetValueOrDefault("unknown.dat"); if (IsSpoiler && !filename.StartsWith(AttachmentExtensions.SpoilerPrefix)) filename = filename.Insert(0, AttachmentExtensions.SpoilerPrefix); d["file"] = new MultipartFile(File, filename); var payload = new Dictionary(); if (Content.IsSpecified) payload["content"] = Content.Value; if (IsTTS.IsSpecified) payload["tts"] = IsTTS.Value.ToString(); if (Nonce.IsSpecified) payload["nonce"] = Nonce.Value; if (Embed.IsSpecified) payload["embed"] = Embed.Value; if (IsSpoiler) payload["hasSpoiler"] = IsSpoiler.ToString(); var json = new StringBuilder(); using (var text = new StringWriter(json)) using (var writer = new JsonTextWriter(text)) _serializer.Serialize(writer, payload); d["payload_json"] = json.ToString(); return d; } } }