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"); } }
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); }
/// <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); }
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"); } }