예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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));
            }
        }
예제 #4
0
        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));
            }
        }