#pragma warning disable CS1591 using System.Collections.Generic; using System.IO; using System.Text; using Discord.Net.Converters; using Discord.Net.Rest; using Newtonsoft.Json; namespace Discord.API.Rest { internal class UploadWebhookFileParams { 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 Username { get; set; } public Optional AvatarUrl { get; set; } public Optional Embeds { get; set; } public Optional AllowedMentions { get; set; } public bool IsSpoiler { get; set; } = false; public UploadWebhookFileParams(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 (Username.IsSpecified) payload["username"] = Username.Value; if (AvatarUrl.IsSpecified) payload["avatar_url"] = AvatarUrl.Value; if (Embeds.IsSpecified) payload["embeds"] = Embeds.Value; if (AllowedMentions.IsSpecified) payload["allowed_mentions"] = AllowedMentions.Value; 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; } } }