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 { [JsonObject(MemberSerialization = MemberSerialization.OptIn)] internal class CreateWebhookMessageParams { private static JsonSerializer _serializer = new JsonSerializer { ContractResolver = new DiscordContractResolver() }; [JsonProperty("content")] public Optional Content { get; set; } [JsonProperty("nonce")] public Optional Nonce { get; set; } [JsonProperty("tts")] public Optional IsTTS { get; set; } [JsonProperty("embeds")] public Optional Embeds { get; set; } [JsonProperty("username")] public Optional Username { get; set; } [JsonProperty("avatar_url")] public Optional AvatarUrl { get; set; } [JsonProperty("allowed_mentions")] public Optional AllowedMentions { get; set; } [JsonProperty("flags")] public Optional Flags { get; set; } [JsonProperty("components")] public Optional Components { get; set; } [JsonProperty("file")] public Optional File { get; set; } [JsonProperty("thread_name")] public Optional ThreadName { get; set; } [JsonProperty("applied_tags")] public Optional AppliedTags { get; set; } [JsonProperty("poll")] public Optional Poll { get; set; } public IReadOnlyDictionary ToDictionary() { var d = new Dictionary(); if (File.IsSpecified) { d["file"] = File.Value; } var payload = new Dictionary { ["content"] = Content }; 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; if (Components.IsSpecified) payload["components"] = Components.Value; if (ThreadName.IsSpecified) payload["thread_name"] = ThreadName.Value; if (AppliedTags.IsSpecified) payload["applied_tags"] = AppliedTags.Value; if (Flags.IsSpecified) payload["flags"] = Flags.Value; if (Poll.IsSpecified) payload["poll"] = Poll.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; } } }