public DiscordChatMessageResult PostMessage( string webHookUrl, string content, DiscordChatMessageSettings messageSettings ) { if (messageSettings == null) { throw new ArgumentNullException(nameof(messageSettings)); } var response = _context.PostMessage( webHookUrl, content, messageSettings); response.Wait(); return(response.Result); }
internal static async Task <DiscordChatMessageResult> PostMessage( this ICakeContext context, string webHookUrl, string content, DiscordChatMessageSettings messageSettings) { if (messageSettings == null) { throw new ArgumentNullException(nameof(messageSettings), "Invalid Discord message specified"); } if (string.IsNullOrWhiteSpace(webHookUrl)) { throw new NullReferenceException("Invalid WebHookUrl supplied."); } context.Verbose( "Posting to incoming webhook {0}...", string.Concat( webHookUrl .TrimEnd('/') .Reverse() .SkipWhile(c => c != '/') .Reverse() ) ); var json = ToJson( new { content, username = messageSettings.UserName ?? "CakeBuild", avatar_url = messageSettings.AvatarUrl?.ToString() ?? new Uri("https://raw.githubusercontent.com/cake-build/graphics/master/png/cake-small.png").ToString(), tts = messageSettings.Tts }); context.Debug("Parameter: {0}", json); using (var client = new HttpClient()) { var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var httpResponse = await client.PostAsync(webHookUrl, stringContent); context.Debug($"Status Code: {httpResponse.StatusCode}"); DiscordChatMessageResult parsedResult = null; if (httpResponse.StatusCode != System.Net.HttpStatusCode.NoContent) { var response = await httpResponse.Content.ReadAsStringAsync(); context.Debug($"Response: {response}"); var result = JsonMapper.ToObject(response); parsedResult = new DiscordChatMessageResult( false, DateTime.UtcNow.ToString(), result.GetInteger("code").Value, result.GetString("message")); } else { parsedResult = new DiscordChatMessageResult( true, DateTime.UtcNow.ToString(), 0, string.Empty); } context.Debug("Result parsed: {0}", parsedResult); if (!parsedResult.Ok && messageSettings.ThrowOnFail == true) { throw new CakeException(parsedResult.Error ?? "Failed to send message, unknown error"); } return(parsedResult); } }