예제 #1
0
        protected override async Task Send(NotificationMessage model, DiscordNotificationSettings settings)
        {
            try
            {
                var discordBody = new DiscordWebhookBody
                {
                    content  = model.Message,
                    username = settings.Username,
                };

                string image;
                if (model.Other.TryGetValue("image", out image))
                {
                    discordBody.embeds = new List <DiscordEmbeds>
                    {
                        new DiscordEmbeds
                        {
                            image = new DiscordImage
                            {
                                url = image
                            }
                        }
                    };
                }

                await Api.SendMessage(discordBody, settings.WebHookId, settings.Token);
            }
            catch (Exception e)
            {
                Logger.LogError(LoggingEvents.DiscordNotification, e, "Failed to send Discord Notification");
            }
        }
예제 #2
0
파일: DiscordApi.cs 프로젝트: sir-marv/Ombi
        public async Task SendMessage(DiscordWebhookBody body, string webhookId, string webhookToken)
        {
            var request = new Request($"webhooks/{webhookId}/{webhookToken}", BaseUrl, HttpMethod.Post);

            request.AddJsonBody(body);

            request.ApplicationJsonContentType();

            await Api.Request(request);
        }
예제 #3
0
        /// <summary>
        /// Posts the message to the discord webhook
        /// </summary>
        /// <param name="sub">The webhook subscription to use</param>
        /// <param name="body">Full post body object</param>
        /// <returns></returns>
        public static async Task <bool> SendBodyAsync(WebhookSubscription sub, DiscordWebhookBody body)
        {
            using var http = new HttpClient();
            var jsondata = JsonConvert.SerializeObject(body);
            var res      = await http.PostAsync($"https://discordapp.com/api/webhooks/{sub.WebhookId}/{sub.Token}", new StringContent(jsondata, Encoding.UTF8, "application/json")).ConfigureAwait(false);

            var cont = await res.Content.ReadAsStringAsync();

            return(res.IsSuccessStatusCode);
        }
예제 #4
0
        protected override async Task Send(NotificationMessage model, DiscordNotificationSettings settings)
        {
            try
            {
                var discordBody = new DiscordWebhookBody
                {
                    content  = model.Message,
                    username = settings.Username,
                };

                var fields = new List <DiscordField>();

                if (model.Data.TryGetValue("Alias", out var alias))
                {
                    if (alias.HasValue())
                    {
                        fields.Add(new DiscordField {
                            name = "Requested By", value = alias, inline = true
                        });
                    }
                }
                else
                {
                    if (model.Data.TryGetValue("RequestedUser", out var requestedUser))
                    {
                        if (requestedUser.HasValue())
                        {
                            fields.Add(new DiscordField {
                                name = "Requested By", value = requestedUser, inline = true
                            });
                        }
                    }
                }
                if (model.Data.TryGetValue("DenyReason", out var denyReason))
                {
                    if (denyReason.HasValue())
                    {
                        fields.Add(new DiscordField {
                            name = "Denied Reason", value = denyReason, inline = true
                        });
                    }
                }

                string color = null;
                if (model.Data.TryGetValue("RequestStatus", out var status))
                {
                    if (status.HasValue())
                    {
                        fields.Add(new DiscordField {
                            name = "Status", value = status, inline = true
                        });

                        color = status switch
                        {
                            "Available" => "51283",
                            "Denied" => "13959168",
                            "Processing Request" => "37354",
                            "Pending Approval" => "16754470",
                            _ => throw new ArgumentOutOfRangeException(nameof(color))
                        };
                    }
                }

                var author = new DiscordAuthor
                {
                    iconurl = settings.Icon.HasValue() ? settings.Icon : string.Empty
                };

                if (model.Data.TryGetValue("ApplicationUrl", out var appUrl))
                {
                    author.url = appUrl;
                }
                if (model.Data.TryGetValue("ApplicationName", out var appName))
                {
                    author.name = appName;
                }



                var embed = new DiscordEmbeds
                {
                    fields = fields,
                    author = author,
                    color  = color
                };

                if (model.Data.TryGetValue("Title", out var title))
                {
                    embed.title = title;
                }
                if (model.Data.TryGetValue("Overview", out var overview))
                {
                    embed.description = overview;
                }
                string image;
                if (model.Other.TryGetValue("image", out image))
                {
                    embed.thumbnail = new DiscordImage {
                        url = image
                    };
                }

                if (model.Data.Any())
                {
                    discordBody.embeds = new List <DiscordEmbeds> {
                        embed
                    };
                }
                await Api.SendMessage(discordBody, settings.WebHookId, settings.Token);
            }
            catch (Exception e)
            {
                Logger.LogError(LoggingEvents.DiscordNotification, e, "Failed to send Discord Notification");
            }
        }