private async Task <Db.Bot> InstallBot(Db.Bot Bot, Service service, ProxyServer ProxyServer, BotResponse Response)
        {
            if (Response.Ok && ProxyServer.CreateConfigFile(Bot.ReserveWebHookUrl.WebHookUrl.Dns.Name,
                                                            Bot.ReserveWebApp.WebApp.ToString(),
                                                            Convert.ToInt32(Bot.ReserveWebHookUrl.WebHookUrl.Port.PortNumber)))
            {
                //Если все хорошо вызываем метод SetWebhook
                await TelegramFunction.SetWebHook(Bot.Token,
                                                  Bot.ReserveWebHookUrl.WebHookUrl.Dns.PublicKeyPathOnMainServer(),
                                                  Bot.ReserveWebHookUrl.WebHookUrl.ToString());

                InsertServiceBotHistory(Bot, service);
                InsertWebAppHistory(Bot, Bot.ReserveWebApp.WebApp);
                InsertWebHookHistory(Bot, Bot.ReserveWebHookUrl.WebHookUrl);

                DbContext.Remove <ReserveWebApp>(Bot.ReserveWebApp);
                DbContext.Remove <ReserveWebHookUrl>(Bot.ReserveWebHookUrl);

                service.IsStart        = true;
                service.StartTimeStamp = DateTime.Now;
                service.EndTimeStamp   = DateTime.Now.Add(new TimeSpan(Convert.ToInt32(service.DayDuration), 0, 0, 0));
                Bot.WebAppId           = Bot.ReserveWebApp.WebAppId;
                Bot.WebHookUrlId       = Bot.ReserveWebHookUrl.WebHookUrlId;
                Bot.Launched           = true;
                Bot.Visable            = true;
                Bot.ProxyServeId       = ProxyServer.Id;
                Bot.ServiceId          = service.Id;

                DbContext.Update <Db.Bot>(Bot);

                DbContext.SaveChanges();

                Bot.SendMessageToOwner("Добро пожаловать. Нажмите сюда /admin");

                Bot.Service = service;
                return(Bot);
            }

            else // Ошибка во время установки бота на вебприложение
            {
                throw new Exception(Response.Result);
            }
        }
        private async Task <Db.Bot> InstallDemo(Db.Bot Bot, ServiceType ServiceType)
        {
            //проверяем брал ли когда нибудь этот пользователь пробную версию если брал то вызываем исключение
            if (UsedDemo(Bot.FollowerId))
            {
                throw new Exception("Вы уже использовали пробную версию");
            }

            var WebApp = SearchFreeWebApp();

            var WebHookUrl = SearchWebHookUrl();

            var ProxyServer = DbContext.ProxyServer.Where(p => p.Enable).FirstOrDefault();

            //Веб приложени свободно токен действителен. Устанавливаем бота
            string result = await WebApp.Install(
                new HostInfo
            {
                Token       = Bot.Token,
                BotName     = Bot.BotName,
                IsDemo      = ServiceType.IsDemo,
                UrlWebHook  = WebHookUrl.ToString(),
                OwnerChatId = Convert.ToInt32(Bot.Follower.ChatId),
                DbName      = Bot.BotName + GeneralFunction.UnixTimeNow().ToString()
            }
                );


            var Response = Newtonsoft.Json.JsonConvert.DeserializeObject <BotResponse>(result);

            //Установка бота на веб приложение прошла успешно.Создаем файл для прокси сервера и заливаем на сервер,Перезапускаем службу прокси сервера (nginx)
            if (Response.Ok && ProxyServer.CreateConfigFile(WebHookUrl.Dns.Name, WebApp.ToString(), Convert.ToInt32(WebHookUrl.Port.PortNumber)))
            {
                //Если все хорошо вызываем метод SetWebhook
                await TelegramFunction.SetWebHook(Bot.Token, WebHookUrl.Dns.PublicKeyPathOnMainServer(), WebHookUrl.ToString());

                // Добавляем услугу в бд
                Service service = new Service {
                    ServiceTypeId   = ServiceType.Id,
                    CreateTimeStamp = DateTime.Now,
                    DayDuration     = ServiceType.MaxDuration,
                    IsStart         = true,
                    Visable         = true,
                    StartTimeStamp  = DateTime.Now,
                    EndTimeStamp    = DateTime.Now.Add(new TimeSpan(Convert.ToInt32(ServiceType.MaxDuration), 0, 0, 0))
                };
                service = InsertService(service);

                InsertServiceBotHistory(Bot, service);

                InsertWebAppHistory(Bot, WebApp);

                InsertWebHookHistory(Bot, WebHookUrl);

                WebApp.IsFree     = false;
                WebHookUrl.IsFree = false;

                //привязываем  услугу, прокси сервер, веб приложение, доменное имя к боту
                Bot.ProxyServeId    = ProxyServer.Id;
                Bot.ServiceId       = service.Id;
                Bot.CreateTimeStamp = DateTime.Now;
                Bot.WebHookUrlId    = WebHookUrl.Id;
                Bot.WebAppId        = WebApp.Id;
                Bot.Launched        = true;
                Bot.Visable         = true;

                DbContext.SaveChanges();

                service.ServiceType = ServiceType;
                Bot.Service         = service;

                return(Bot);
            }
            else // Ошибка во время установки бота на вебприложение
            {
                throw new Exception(Response.Result);
            }
        }