private Db.Bot InsertBot(string Name, string Token, int Owner, bool Visable = false) { try { Db.Bot bot = new Db.Bot { Blocked = false, BotName = Name, FollowerId = Owner, Launched = false, Token = Token, Deleted = false, Visable = Visable, CreateTimeStamp = DateTime.Now }; DbContext.Bot.Add(bot); DbContext.SaveChanges(); return(bot); } catch { return(null); } }
private void InsertServiceBotHistory(Db.Bot bot, Service service) { DbContext.ServiceBotHistory.Add(new ServiceBotHistory { ServiceId = service.Id, BotId = bot.Id }); DbContext.SaveChanges(); }
private void InsertWebAppHistory(Db.Bot bot, WebApp webApp) { WebAppHistory webAppHistory = new WebAppHistory { BotId = bot.Id, TimeStamp = DateTime.Now, WebAppId = webApp.Id }; DbContext.WebAppHistory.Add(webAppHistory); DbContext.SaveChanges(); }
private void InsertWebHookHistory(Db.Bot bot, WebHookUrl hookUrl) { WebHookUrlHistory webHookUrlHistory = new WebHookUrlHistory { BotId = bot.Id, WebHookUrlId = hookUrl.Id, Timestamp = DateTime.Now }; DbContext.WebHookUrlHistory.Add(webHookUrlHistory); DbContext.SaveChanges(); }
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); } }
public BotInfoMessage(Db.Bot bot) { this.Bot = bot; }
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); } }
public IActionResult Create() { try { DbContext = new BotMngmntDbContext(); var WebHookList = DbContext.WebHookUrl .Where(w => w.IsFree).Include(w => w.Port) .Include(w => w.Dns).ToList(); var WebAppList = DbContext.WebApp.Where(w => w.IsFree) .Include(w => w.ServerWebApp).ToList(); var ServiceTypeList = DbContext.ServiceType.Where(s => s.Enable).ToList(); var FollowerList = DbContext.Follower.ToList(); List <SelectItem> Urllist = new List <SelectItem>(); List <SelectItem> AppList = new List <SelectItem>(); List <SelectItem> ServiceList = new List <SelectItem>(); List <SelectItem> FollowerSelectList = new List <SelectItem>(); foreach (var url in WebHookList) { Urllist.Add(new SelectItem { Id = url.Id, Name = url.ToString() }); } foreach (var app in WebAppList) { AppList.Add(new SelectItem { Id = app.Id, Name = app.ToString() }); } foreach (var service in ServiceTypeList) { ServiceList.Add(new SelectItem { Id = service.Id, Name = service.Name }); } foreach (var follower in FollowerList) { FollowerSelectList.Add(new SelectItem { Id = follower.Id, Name = follower.ToString() }); } ViewBag.WebHookUrl = new Microsoft.AspNetCore.Mvc.Rendering.SelectList(Urllist, "Id", "Name", Urllist.FirstOrDefault().Id); ViewBag.WebApp = new Microsoft.AspNetCore.Mvc.Rendering.SelectList(AppList, "Id", "Name", AppList.FirstOrDefault().Id); ViewBag.ServiceType = new Microsoft.AspNetCore.Mvc.Rendering.SelectList(ServiceList, "Id", "Name", ServiceList.FirstOrDefault().Id); ViewBag.Follower = new Microsoft.AspNetCore.Mvc.Rendering.SelectList(FollowerSelectList, "Id", "Name", FollowerSelectList.FirstOrDefault().Id); var bot = new Db.Bot { Service = new Service { DayDuration = 0, ServiceTypeId = ServiceList.FirstOrDefault().Id } }; return(View(bot)); } catch (Exception e) { return(Json(e.Message)); } finally { DbContext.Dispose(); } }
public async Task <IActionResult> Create([FromBody] Db.Bot _bot) { try { HostInfo hostInfo = new HostInfo(); DbContext = new BotMngmntDbContext(); var WebApp = DbContext.WebApp.Where(w => w.Id == _bot.WebAppId).Include(w => w.ServerWebApp).FirstOrDefault(); var WebHookUrl = DbContext.WebHookUrl.Where(w => w.Id == _bot.WebHookUrlId).Include(w => w.Port).Include(w => w.Dns).FirstOrDefault(); var ServiceType = DbContext.ServiceType.Find(_bot.Service.ServiceTypeId); var Follower = DbContext.Follower.Find(_bot.FollowerId); var ProxyServer = DbContext.ProxyServer.Where(p => p.Enable).FirstOrDefault(); if (DbContext.Bot.Where(b => b.Token == _bot.Token).FirstOrDefault() != null) { return(Json("Бот с таким токеном уже существует")); } //Вызываем метод GetMe на сервер телеграм, тем самым проверяем //корректный ли токен мы ввели var User = await TelegramFunction.GetMe(_bot.Token); if (User != null) { _bot.BotName = User.Username; } //Подключаемся к веб приложению и проверяем свободно ли оно hostInfo = WebApp.GetInfo(); if (hostInfo.IsFree) { //Веб приложени свободно токен действителен. Устанавливаем бота string result = await WebApp.Install( new HostInfo { Token = _bot.Token, BotName = _bot.BotName, IsDemo = ServiceType.IsDemo, UrlWebHook = WebHookUrl.ToString(), OwnerChatId = Convert.ToInt32(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 var Info = await TelegramFunction.SetWebHook(_bot.Token, WebHookUrl.Dns.PublicKeyPathOnMainServer(), WebHookUrl.ToString()); if (Info.LastErrorMessage != null && Info.LastErrorMessage != "") { throw new Exception(Info.LastErrorMessage); } } else // Ошибка во время установки бота на вебприложение { throw new Exception(Response.Result); } } else { throw new Exception("Ошибка! Веб приложение " + WebApp.ToString() + " Занято ботом " + hostInfo.BotName); } //Вызываем метод WebHookInfo если все ок то заносим инфу в базу данных //если нет то удаляем бота из веб приложеия и конрфигурационный файл // на прокси сервере } catch (Exception e) { return(Json(e.Message)); } return(Ok()); }
public ServiceInfoMessage(Db.Bot bot, Service service) { Bot = bot; Service = service; }