public void Post() { try { var obj = JsonConvert.DeserializeObject <ReleaseEvent>(Request.Content.ReadAsStringAsync().Result); var validKey = ConfigurationManager.AppSettings.Get("VSTSSubId"); if (obj.subscriptionId == validKey) //can't have random people triggering this! { string TelegramAPIKey = ConfigurationManager.AppSettings.Get("TelegramAPIToken"); var msg = "Woot! New build has been released, and is staged on the server. Do you want me to copy the files and update?"; var bot = new Telegram.Bot.Client(TelegramAPIKey, System.Environment.CurrentDirectory); var result = bot.SendTextMessage(-1001094155678, msg, replyMarkup: new InlineKeyboardMarkup(new[] { new InlineKeyboardButton("Yes", "update|yes"), new InlineKeyboardButton("No", "update|no") })) .Result; } } catch (Exception e) { string path = HttpContext.Current.Server.MapPath("~/App_Data/error.log"); StreamWriter writer = new StreamWriter(path); writer.WriteLine(e.Message); } }
public void Post() { try { var obj = JsonConvert.DeserializeObject <ReleaseEvent>(Request.Content.ReadAsStringAsync().Result); var releaseKey = ConfigurationManager.AppSettings.Get("VSTSReleaseId"); var buildKey = ConfigurationManager.AppSettings.Get("VSTSBuildId"); if (obj.subscriptionId == releaseKey) //can't have random people triggering this! { string TelegramAPIKey = ConfigurationManager.AppSettings.Get("TelegramAPIToken"); var msg = obj.detailedMessage.markdown; InlineKeyboardMarkup menu = null; if (obj.resource.environment.status == "succeeded") { msg += "\nDo you want me to copy the files and update?"; menu = new InlineKeyboardMarkup(new[] { new InlineKeyboardButton("Yes", "update|yes"), new InlineKeyboardButton("No", "update|no") }); } var bot = new Telegram.Bot.Client(TelegramAPIKey, System.Environment.CurrentDirectory); bot.SendTextMessage(-1001077134233, msg, replyMarkup: menu, parseMode: ParseMode.Markdown); } if (obj.subscriptionId == buildKey) { var build = JsonConvert.DeserializeObject <BuildEvent>(Request.Content.ReadAsStringAsync().Result); string TelegramAPIKey = ConfigurationManager.AppSettings.Get("TelegramAPIToken"); var msg = obj.message.markdown + "\n"; var urlPre = "https://github.com/parabola949/Werewolf/commit/"; msg += $"Build triggered by commit [{build.resource.sourceVersion.Substring(0,7)}]({urlPre + build.resource.sourceVersion})"; if (build.resource.result == "succeeded") { msg += "\nRelease is now being created, you will be notified when it is completed."; } var bot = new Telegram.Bot.Client(TelegramAPIKey, System.Environment.CurrentDirectory); bot.SendTextMessage(-1001077134233, msg, parseMode: ParseMode.Markdown); } } catch (Exception e) { string path = HttpContext.Current.Server.MapPath("~/App_Data/error.log"); StreamWriter writer = new StreamWriter(path); writer.WriteLine(e.Message); } }
public HttpResponseMessage Post() { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; string TelegramAPIKey = ConfigurationManager.AppSettings.Get("TelegramAPIToken"); var bot = new Telegram.Bot.Client(TelegramAPIKey, System.Environment.CurrentDirectory); try { var body = Request.Content.ReadAsStringAsync().Result; var obj = JsonConvert.DeserializeObject <ReleaseEvent>(body); if (obj?.subscriptionId != null) { var releaseKey = ConfigurationManager.AppSettings.Get("VSTSReleaseId"); var buildKey = ConfigurationManager.AppSettings.Get("VSTSBuildId"); if (obj.subscriptionId == releaseKey) //can't have random people triggering this! { //what was released var beta = obj.resource.environment.name.Contains("Beta"); var node = obj.resource.environment.name.Contains("Node"); var control = obj.resource.environment.name.Contains("Control"); var website = obj.resource.environment.name.Contains("Website"); var msg = obj.detailedMessage.markdown; InlineKeyboardMarkup menu = null; if (obj.resource.environment.status == "succeeded") { if (website) { msg += "The website will now be deployed.\r\n"; } if (node || control) { msg += "\nDo you want me to copy the files and update?"; menu = new InlineKeyboardMarkup(new[] { new InlineKeyboardCallbackButton("Yes", $"update|{(beta ? "beta" : "release")}{(node ? "node" : "control")}"), new InlineKeyboardCallbackButton("No", "update|no") }); } } bot.SendTextMessageAsync(GroupId, msg, replyMarkup: menu, parseMode: ParseMode.Markdown); } if (obj.subscriptionId == buildKey) { var build = JsonConvert.DeserializeObject <BuildEvent>(Request.Content.ReadAsStringAsync().Result); var detail = obj.detailedMessage.markdown; if (detail.Contains("\r\n+ Process 'msbuild.exe'")) { detail = detail.Substring(0, detail.IndexOf("\r\n+ Process 'msbuild.exe'")); } detail = detail.Replace("\r\n+ ", "\r\n"); var msg = detail + "\n"; var urlPre = "https://github.com/GreyWolfDev/Werewolf/commit/"; var ver = build.resource.sourceGetVersion; var commit = ver.Substring(ver.Length - 40, 40); msg += $"Built with commit [{commit}]({urlPre + commit}) as latest"; if (build.resource.status == "succeeded") { msg += "\nRelease is now being created, you will be notified when it is completed."; } bot.SendTextMessageAsync(GroupId, msg, parseMode: ParseMode.Markdown); } } else { //github var push = JsonConvert.DeserializeObject <PushEvent>(body); var msg = $"🔨 <a href='{push.compare}'>{push.commits.Length} new commit{(push.commits.Length > 1 ? "s" : "")} to {push.repository.name}:{push._ref}</a>\n\n"; msg = push.commits.Aggregate(msg, (current, a) => current + $"<a href='{a.url}'>{a.id.Substring(0, 7)}</a>: {a.message} ({a.author.username})\n"); //string path = HttpContext.Current.Server.MapPath("~/App_Data/github.json"); //using (var sw = new StreamWriter(path)) //{ // foreach (var c in push.commits) // sw.WriteLine($"Commit by: {c.committer.username}\nMessage: {c.message}\n"); // sw.WriteLine(body); //} //check what was built var beta = push._ref.Contains("beta"); //beta or master - refs/head/<branch> var master = push._ref.Contains("master"); //now check if control was changed var control = push.commits.Any( x => x.modified.Union(x.added).Union(x.removed).Any(c => c.Contains("Werewolf Control"))); var node = push.commits.Any( x => x.modified.Union(x.added).Union(x.removed).Any(c => c.Contains("Werewolf Node"))); var website = push.commits.Any( x => x.modified.Union(x.added).Union(x.removed).Any(c => c.Contains("Werewolf Website"))); if ((!beta && !master) || (!control && !node && !website)) //nothing to build { bot.SendTextMessageAsync(GroupId, msg, parseMode: ParseMode.Html, disableWebPagePreview: true); return(Request.CreateResponse(HttpStatusCode.OK)); } var none = new InlineKeyboardCallbackButton("No", "build|no"); var yes = "Yes"; var betaControl = new InlineKeyboardCallbackButton(yes, "build|betacontrol"); var betaNode = new InlineKeyboardCallbackButton(yes, "build|betanode"); var betaBoth = new InlineKeyboardCallbackButton(yes, "build|betaboth"); var releaseControl = new InlineKeyboardCallbackButton(yes, "build|releasecontrol"); var releaseNode = new InlineKeyboardCallbackButton(yes, "build|releasenode"); //var releaseBoth = new InlineKeyboardCallbackButton(yes, "build|releaseboth"); var releaseWebSite = new InlineKeyboardCallbackButton(yes, "build|releasewebsite"); //var releaseWN = new InlineKeyboardCallbackButton(yes, "build|releasenodewebsite"); //var releaseWC = new InlineKeyboardCallbackButton(yes, "build|releasecontrolwebsite"); //var releaseAll = new InlineKeyboardCallbackButton(yes, "build|releasewebsitebot"); Menu menu; msg += "\nThis commit contains changes to "; if (beta) { if (control && node && website) { menu = new Menu(1, new List <InlineKeyboardButton> { new InlineKeyboardCallbackButton("All of it!", "build|betacontrolwebsitenode"), new InlineKeyboardCallbackButton("Control & Node", "build|betacontrolnode"), new InlineKeyboardCallbackButton("Website & Control", "build|betacontrolwebsite"), new InlineKeyboardCallbackButton("Website & Node", "build|betanodewebsite"), new InlineKeyboardCallbackButton("Website Only", "build|betawebsite"), new InlineKeyboardCallbackButton("Control Only", "build|betacontrol"), new InlineKeyboardCallbackButton("Node Only", "build|betanode"), none }); msg += "Control, Node, and Website"; } else if (control && node) { menu = new Menu(1, new List <InlineKeyboardButton> { new InlineKeyboardCallbackButton("Control & Node", "build|betacontrolnode"), new InlineKeyboardCallbackButton("Control Only", "build|betacontrol"), new InlineKeyboardCallbackButton("Node Only", "build|betanode"), none }); msg += "Control and Node"; } else if (control && website) { menu = new Menu(1, new List <InlineKeyboardButton> { new InlineKeyboardCallbackButton("Website & Control", "build|betacontrolwebsite"), new InlineKeyboardCallbackButton("Website Only", "build|betawebsite"), new InlineKeyboardCallbackButton("Control Only", "build|betacontrol"), none }); msg += "Control and Website"; } else if (node && website) { menu = new Menu(1, new List <InlineKeyboardButton> { new InlineKeyboardCallbackButton("Website & Node", "build|betanodewebsite"), new InlineKeyboardCallbackButton("Website Only", "build|betawebsite"), new InlineKeyboardCallbackButton("Node Only", "build|betanode"), none }); msg += "Node and Website"; } else if (control) { menu = new Menu(1, new List <InlineKeyboardButton> { betaControl, none }); msg += "Control only"; } else if (node) { menu = new Menu(1, new List <InlineKeyboardButton> { betaNode, none }); msg += "Node only"; } else //if (website) { menu = new Menu(1, new List <InlineKeyboardButton> { releaseWebSite, none }); msg += "Website Only"; } } else { if (control && node && website) { menu = new Menu(1, new List <InlineKeyboardButton> { new InlineKeyboardCallbackButton("All of it!", "build|releasecontrolwebsitenode"), new InlineKeyboardCallbackButton("Control & Node", "build|releasecontrolnode"), new InlineKeyboardCallbackButton("Website & Control", "build|releasecontrolwebsite"), new InlineKeyboardCallbackButton("Website & Node", "build|releasenodewebsite"), new InlineKeyboardCallbackButton("Website Only", "build|releasewebsite"), new InlineKeyboardCallbackButton("Control Only", "build|releasecontrol"), new InlineKeyboardCallbackButton("Node Only", "build|releasenode"), none }); msg += "Control, Node, and Website"; } else if (control && node) { menu = new Menu(1, new List <InlineKeyboardButton> { new InlineKeyboardCallbackButton("Control & Node", "build|releasecontrolnode"), new InlineKeyboardCallbackButton("Control Only", "build|releasecontrol"), new InlineKeyboardCallbackButton("Node Only", "build|releasenode"), none }); msg += "Control and Node"; } else if (control && website) { menu = new Menu(1, new List <InlineKeyboardButton> { new InlineKeyboardCallbackButton("Website & Control", "build|releasecontrolwebsite"), new InlineKeyboardCallbackButton("Website Only", "build|releasewebsite"), new InlineKeyboardCallbackButton("Control Only", "build|releasecontrol"), none }); msg += "Control and Website"; } else if (node && website) { menu = new Menu(1, new List <InlineKeyboardButton> { new InlineKeyboardCallbackButton("Website & Node", "build|releasenodewebsite"), new InlineKeyboardCallbackButton("Website Only", "build|releasewebsite"), new InlineKeyboardCallbackButton("Node Only", "build|releasenode"), none }); msg += "Node and Website"; } else if (control) { menu = new Menu(1, new List <InlineKeyboardButton> { releaseControl, none }); msg += "Control only"; } else if (node) { menu = new Menu(1, new List <InlineKeyboardButton> { releaseNode, none }); msg += "Node only"; } else //if (website) { menu = new Menu(1, new List <InlineKeyboardButton> { releaseWebSite, none }); msg += "Website Only"; } } msg += $", on {(beta ? "Beta" : "Release")}\n"; msg += "Do you want to build?"; var r = bot.SendTextMessageAsync(GroupId, msg, replyMarkup: menu.CreateMarkup(), parseMode: ParseMode.Html, disableWebPagePreview: true).Result; //if (beta) //{ // var m = "Changes on beta branch. Do you want to build the website too?"; // var websiteYes = new InlineKeyboardCallbackButton("Yes", "build|website"); // menu = new InlineKeyboardMarkup(new[] { websiteYes, none }); // bot.SendTextMessageAsync(GroupId, m, replyMarkup: menu, parseMode: ParseMode.Html, disableWebPagePreview: true); //} } return(Request.CreateResponse(HttpStatusCode.OK)); } catch (AggregateException e) { var x = e.InnerExceptions[0]; while (x.InnerException != null) { x = x.InnerException; } bot.SendTextMessageAsync(GroupId, x.Message + "\n" + x.StackTrace); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, x)); } catch (ApiRequestException e) { var code = e.ErrorCode; var x = e.InnerException; while (x?.InnerException != null) { x = x.InnerException; } bot.SendTextMessageAsync(GroupId, x?.Message + "\n" + x?.StackTrace); return(Request.CreateErrorResponse((HttpStatusCode)code, x)); } catch (Exception e) { //string path = HttpContext.Current.Server.MapPath("~/App_Data/error"); while (e.InnerException != null) { e = e.InnerException; } bot.SendTextMessageAsync(GroupId, e.Message + "\n" + e.StackTrace); //using (var sw = new StreamWriter(path)) //{ // sw.WriteLine(e.Message); // sw.Flush(); //} return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e)); } }
public HttpResponseMessage Post() { string TelegramAPIKey = ConfigurationManager.AppSettings.Get("TelegramAPIToken"); var bot = new Telegram.Bot.Client(TelegramAPIKey, System.Environment.CurrentDirectory); try { var body = Request.Content.ReadAsStringAsync().Result; var obj = JsonConvert.DeserializeObject <ReleaseEvent>(body); if (obj?.subscriptionId != null) { var releaseKey = ConfigurationManager.AppSettings.Get("VSTSReleaseId"); var buildKey = ConfigurationManager.AppSettings.Get("VSTSBuildId"); if (obj.subscriptionId == releaseKey) //can't have random people triggering this! { //what was released var beta = obj.resource.environment.name.Contains("Beta"); var node = obj.resource.environment.name.Contains("Node"); var msg = obj.detailedMessage.markdown; InlineKeyboardMarkup menu = null; if (obj.resource.environment.status == "succeeded") { msg += "\nDo you want me to copy the files and update?"; menu = new InlineKeyboardMarkup(new [] { new InlineKeyboardButton("Yes", $"update|{(beta?"beta":"release")}{(node?"node":"control")}"), new InlineKeyboardButton("No", "update|no") }); } bot.SendTextMessage(-1001077134233, msg, replyMarkup: menu, parseMode: ParseMode.Markdown); } if (obj.subscriptionId == buildKey) { var build = JsonConvert.DeserializeObject <BuildEvent>(Request.Content.ReadAsStringAsync().Result); var detail = obj.detailedMessage.markdown; if (detail.Contains("\r\n+ Process 'msbuild.exe'")) { detail = detail.Substring(0, detail.IndexOf("\r\n+ Process 'msbuild.exe'")); } detail = detail.Replace("\r\n+ ", "\r\n"); var msg = detail + "\n"; var urlPre = "https://github.com/parabola949/Werewolf/commit/"; msg += $"Built with commit [{build.resource.sourceVersion.Substring(0, 7)}]({urlPre + build.resource.sourceVersion}) as latest"; if (build.resource.result == "succeeded") { msg += "\nRelease is now being created, you will be notified when it is completed."; } bot.SendTextMessage(-1001077134233, msg, parseMode: ParseMode.Markdown); } } else { //github var push = JsonConvert.DeserializeObject <PushEvent>(body); var msg = $"🔨 <a href='{push.compare}'>{push.commits.Length} new commit{(push.commits.Length > 1 ? "s" : "")} to {push.repository.name}:{push._ref}</a>\n\n"; msg = push.commits.Aggregate(msg, (current, a) => current + $"<a href='{a.url}'>{a.id.Substring(0, 7)}</a>: {a.message} ({a.author.username})\n"); //string path = HttpContext.Current.Server.MapPath("~/App_Data/github.json"); //using (var sw = new StreamWriter(path)) //{ // foreach (var c in push.commits) // sw.WriteLine($"Commit by: {c.committer.username}\nMessage: {c.message}\n"); // sw.WriteLine(body); //} //check what was built var beta = push._ref.Contains("beta"); //beta or master - refs/head/<branch> //now check if control was changed var control = push.commits.Any( x => x.modified.Union(x.added).Union(x.removed).Any(c => c.Contains("Werewolf Control"))); var node = push.commits.Any( x => x.modified.Union(x.added).Union(x.removed).Any(c => c.Contains("Werewolf Node"))); if (!control && !node) //nothing to build { bot.SendTextMessage(-1001077134233, msg, parseMode: ParseMode.Html, disableWebPagePreview: true); return(Request.CreateResponse(HttpStatusCode.OK)); } var none = new InlineKeyboardButton("No", "build|no"); var yes = "Yes"; var betaControl = new InlineKeyboardButton(yes, "build|betacontrol"); var betaNode = new InlineKeyboardButton(yes, "build|betanode"); var betaBoth = new InlineKeyboardButton(yes, "build|betaboth"); var releaseControl = new InlineKeyboardButton(yes, "build|releasecontrol"); var releaseNode = new InlineKeyboardButton(yes, "build|releasenode"); var releaseBoth = new InlineKeyboardButton(yes, "build|releaseboth"); InlineKeyboardMarkup menu; msg += "\nThis commit contains changes to "; if (beta) { if (control && node) { menu = new InlineKeyboardMarkup(new[] { betaBoth, none }); msg += "Control and Node"; } else if (control) { menu = new InlineKeyboardMarkup(new[] { betaControl, none }); msg += "Control only"; } else { menu = new InlineKeyboardMarkup(new[] { betaNode, none }); msg += "Node only"; } } else { if (control && node) { menu = new InlineKeyboardMarkup(new[] { releaseBoth, none }); msg += "Control and Node"; } else if (control) { menu = new InlineKeyboardMarkup(new[] { releaseControl, none }); msg += "Control only"; } else { menu = new InlineKeyboardMarkup(new[] { releaseNode, none }); msg += "Node only"; } } msg += $", on {(beta ? "Beta" : "Release")}\n"; msg += "Do you want to build?"; bot.SendTextMessage(-1001077134233, msg, replyMarkup: menu, parseMode: ParseMode.Html, disableWebPagePreview: true); } return(Request.CreateResponse(HttpStatusCode.OK)); } catch (Exception e) { //string path = HttpContext.Current.Server.MapPath("~/App_Data/error"); while (e.InnerException != null) { e = e.InnerException; } bot.SendTextMessage(-1001077134233, e.Message + "\n" + e.StackTrace); //using (var sw = new StreamWriter(path)) //{ // sw.WriteLine(e.Message); // sw.Flush(); //} return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e)); } }