コード例 #1
0
        private static JObject BuildEmbedObject(Types.EmbedArray embed)
        {
            JObject embedObject = new JObject();

            Types.EmbedAuthor embedAuthor = embed.author;
            Types.EmbedFields embedFields = embed.fields;
            Types.EmbedFooter embedFooter = embed.footer;

            // Adding the basics
            embed.title       = RemoveReservedString(embed.title);
            embed.description = RemoveReservedString(embed.description);
            embed.url         = RemoveReservedString(embed.url);
            embed.color       = RemoveReservedString(embed.color);
            embed.thumbnail   = RemoveReservedString(embed.thumbnail);
            embed.image       = RemoveReservedString(embed.image);
            if (embed.title.Length > 0)
            {
                embedObject.Add(new JProperty("title", embed.title));
            }
            if (embed.description.Length > 0)
            {
                embedObject.Add(new JProperty("description", embed.description));
            }
            if (embed.url.StartsWith("https://"))
            {
                embedObject.Add(new JProperty("url", embed.url));
            }
            if (embed.color.Length == 6)
            {
                embedObject.Add(new JProperty("color", Convert.ToInt32(embed.color, 16)));
            }
            if (embed.useTimestamp)
            {
                embedObject.Add(new JProperty("timestamp", DateTime.UtcNow.ToString("s")));
            }
            if (embed.thumbnail.StartsWith("https://"))
            {
                embedObject.Add(new JProperty("thumbnail", new JObject(new JProperty("url", embed.thumbnail))));
            }
            if (embed.image.StartsWith("https://"))
            {
                embedObject.Add(new JProperty("image", new JObject(new JProperty("url", embed.image))));
            }

            // Handle additional objects
            embedAuthor.name     = RemoveReservedString(embedAuthor.name);
            embedAuthor.url      = RemoveReservedString(embedAuthor.url);
            embedAuthor.icon_url = RemoveReservedString(embedAuthor.icon_url);
            if (embedAuthor.name.Length > 0)
            {
                JObject embedObjectAuthor = new JObject(new JProperty("name", embedAuthor.name));
                if (embedAuthor.url.StartsWith("https://"))
                {
                    embedObjectAuthor.Add(new JProperty("url", embedAuthor.url));
                }
                if (embedAuthor.icon_url.StartsWith("https://"))
                {
                    embedObjectAuthor.Add(new JProperty("icon_url", embedAuthor.icon_url));
                }

                embedObject.Add(new JProperty("author", embedObjectAuthor));
            }

            embedFooter.text     = RemoveReservedString(embedFooter.text);
            embedFooter.icon_url = RemoveReservedString(embedFooter.icon_url);
            if (embedFooter.text.Length > 0)
            {
                JObject embedObjectFooter = new JObject(new JProperty("text", embedFooter.text));
                if (embedFooter.icon_url.StartsWith("https://"))
                {
                    embedObjectFooter.Add(new JProperty("icon_url", embedFooter.icon_url));
                }

                embedObject.Add(new JProperty("footer", embedObjectFooter));
            }

            // Build fields array
            List <Types.EmbedField> fieldList = BuildFieldList(embedFields);
            JArray fieldProperty = new JArray();

            for (int i = 0; i < 25; i++)
            {
                Types.EmbedField field = fieldList.ElementAt(i);
                if (field == null)
                {
                    break;
                }
                JObject fieldObject = BuildFieldObject(field);
                if (fieldObject != null)
                {
                    fieldProperty.Add(fieldObject);
                }
            }
            if (fieldProperty.Count() > 0)
            {
                embedObject.Add(new JProperty("fields", fieldProperty));
            }

            return(embedObject);
        }
コード例 #2
0
        internal static async Task HandleRequest(string[] args)
        {
            try
            {
                // Remove arma quotations
                string            url      = args[0].Trim('"');
                string            content  = args[1].Trim('"').Replace("\"\"", "\"");
                string            username = args[2].Trim('"');
                string            avatar   = args[3].Trim('"');
                bool              tts      = Convert.ToBoolean(args[4]);
                Types.EmbedsArray embeds   = Converter.DeserializeObject <Types.EmbedsArray>(args[5]);

                // Discord 2000 character limit
                if (content.Length > 1999)
                {
                    content = content.Substring(0, 1999);
                }

                // Bare bones
                JObject package = new JObject(
                    new JProperty("content", content),
                    new JProperty("username", username),
                    new JProperty("avatar_url", avatar),
                    new JProperty("tts", tts)
                    );

                // Build embeds array
                List <Types.EmbedArray> embedList = BuildEmbedList(embeds);
                JArray embedProperty = new JArray();
                for (int i = 0; i < 10; i++)
                {
                    Types.EmbedArray embed = embedList.ElementAt(i);
                    if (embed == null)
                    {
                        break;
                    }
                    JObject embedObject = BuildEmbedObject(embed);
                    if (embedObject.Count > 0)
                    {
                        embedProperty.Add(embedObject);
                    }
                }
                if (embedProperty.Count() > 0)
                {
                    package.Add(new JProperty("embeds", embedProperty));
                }

                // Execute webhook
                using (HttpClient APIClient = new HttpClient())
                {
                    APIClient.BaseAddress = new Uri("https://discordapp.com/api/webhooks/");
                    APIClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    HttpResponseMessage response = await APIClient.PostAsync(url, new StringContent(JsonConvert.SerializeObject(package), Encoding.UTF8, "application/json"));

                    await Tools.LogAsyncReply(response.Content);
                }
            }
            catch (Exception e)
            {
                Tools.Logger(e);
            }
        }