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