/// <summary> /// Добавляем бота в бд /// </summary> /// <param name="Token"></param> /// <returns></returns> private async Task <IActionResult> InstertBot(string Token) { try { var Getme = await TelegramFunction.GetMe(Token); BotConnectFunction = new BotConnectFunction(); var bot = BotConnectFunction.AddBot(Getme, Token, base.FollowerId); if (bot != null) { return(await SendServiceTypeList(bot.Id)); } else { return(OkResult); } } catch (Exception e) { if (e.Message.Contains("token")) { await SendMessage(new BotMessage { TextMessage = "Ошибка! Не верный токен" }); } return(await SendTextMessageAndForceReply("Создайте бота с помощью @Botfather и пришлите Токен доступа", EnterBotTokenForce)); } finally { if (BotConnectFunction != null) { BotConnectFunction.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()); }