Beispiel #1
0
        /// <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 IActionResult SaveAndSend(string Text)
        {
            try
            {
                DbContext = new BotMngmntDbContext();
                if (Insert(Text).Id > 0)
                {
                    var BotToken = DbContext.BotInfo.LastOrDefault().Token;

                    var Followers = DbContext.Follower.ToList();

                    foreach (var follower in Followers)
                    {
                        System.Threading.Thread.Sleep(300);
                        TelegramFunction.SendTextMessage(Text, Convert.ToInt32(follower.ChatId), BotToken);
                    }
                    return(Json("Сохранено"));
                }

                else
                {
                    return(Json("Ошибка"));
                }
            }

            catch (Exception e)
            {
                return(Json(e.Message));
            }

            finally
            {
                if (DbContext != null)
                {
                    DbContext.Dispose();
                }
            }
        }
Beispiel #3
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());
        }