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);
            }
        }
示例#8
0
        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();
            }
        }
示例#9
0
        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());
        }
示例#10
0
 public ServiceInfoMessage(Db.Bot bot, Service service)
 {
     Bot     = bot;
     Service = service;
 }