public static List <Subscription> GetSubscriptions(SocialNetworkType socialNetworkType)
        {
            List <Subscription> subs = new List <Subscription>();
            var query = Connection.CreateCommand();

            query.CommandText = $"SELECT * FROM subs WHERE social_network = '{socialNetworkType}';";
            try
            {
                var result = query.ExecuteReader();
                while (result.Read())
                {
                    Subscription sub = new Subscription
                    {
                        TgUserId            = result["tg_user_id"].ToString(),
                        SocialNetworkString = result["social_network"].ToString(),
                        ShowLinks           = Boolean.Parse(result["show_links"].ToString()),
                        SubscribedAt        = DateTime.Parse(result["subscribed_at"].ToString()),
                        LastPostId          = result["last_post_id"].ToString(),
                        LastPostAt          = DateTime.Parse(result["last_post_at"].ToString())
                    };
                    subs.Add(sub);
                }
            }
            catch (SqliteException ex)
            {
                Console.WriteLine($"{ex.Message} (sqlite code: {ex.SqliteErrorCode})\n" + ex.StackTrace);
            }

            return(subs);
        }
示例#2
0
        public MainAnswerHelper(BotUserRequest _thisRequest, object _Bot, SocialNetworkType _type, BotUser _botUser, List <MallBotContext> _dbContextes, List <VKApiRequestModel> _Requests = null)
        {
            botUser     = _botUser;
            dbContextes = _dbContextes;
            Requests    = _Requests;
            Bot         = _Bot;
            type        = _type;
            thisRequest = _thisRequest;

            #region Кэшируем
            string CachedItemKey = "MallBotData";
            var    datafromCache = cacher.Get(CachedItemKey);
            if (datafromCache == null)
            {
                datasOfBot = cacher.Update(CachedItemKey, dbContextes);
            }
            else
            {
                datasOfBot = (List <CachedDataModel>)datafromCache;
            }
            #endregion

            texter     = new BotTextHelper(botUser.Locale, type, datasOfBot[0].Texts);
            sender     = new ApiRouter(type, Bot, botUser, Requests);
            dataGetter = new GetDataHelper(datasOfBot);

            if (botUser.NowIs != MallBotWhatIsHappeningNow.SettingCustomer)
            {
                char usersdbID  = botUser.CustomerCompositeID[0];
                var  customerID = int.Parse(botUser.CustomerCompositeID.Remove(0, 1));
                currentCustomer = dataGetter.GetStructuredCustomers(true).FirstOrDefault(x => x.DBaseID == usersdbID).Customers.FirstOrDefault(x => x.CustomerID == customerID); //дает возможность работы в тц не из тестового режима
            }
        }
示例#3
0
 public ApiRouter(SocialNetworkType _type, object _Bot, BaseBotUser _botUser, List <VKApiRequestModel> _Requests = null)
 {
     type     = _type;
     Bot      = _Bot;
     botUser  = _botUser;
     Requests = _Requests;
 }
示例#4
0
        public async Task <ActionResult> AuthorizeResult(SocialNetworkType authorizeType)
        {
            var authenticateResult = await Request.GetOwinContext().Authentication.AuthenticateAsync("ExternalCookie");

            if (authenticateResult != null)
            {
                IEnumerable <Claim> claims = authenticateResult.Identity.Claims;
                var currentClaim           = claims.FirstOrDefault(x => x.Type == authorizeType.ToString());
                if (currentClaim != null)
                {
                    var client = SocialNetworkClientFactory.GetClient(authorizeType, currentClaim.Value);

                    UserInfo userInfo = await client.GetUserInfo();

                    UserDisplayModel displayModel = new UserDisplayModel
                    {
                        SocialNetworkName = userInfo.SocialNetworkName,
                        Name        = userInfo.UserName,
                        Email       = userInfo.Email,
                        AccessToken = currentClaim.Value
                    };

                    return(View(displayModel));
                }
            }

            return(View("Index"));
        }
示例#5
0
 public AnswerWithPhotoHelper(SocialNetworkType _type, FindedInformation _answer, ApiRouter _sender, BotUser _botUser, BotTextHelper _texter, CachedDataModel _dataOfBot)
 {
     answer    = _answer;
     sender    = _sender;
     botUser   = _botUser;
     texter    = _texter;
     type      = _type;
     dataOfBot = _dataOfBot;
 }
        protected virtual IActionResult SocialLogin(SocialLoginRequest socialLoginRequest)
        {
            if (socialLoginRequest == null)
            {
                return(BadRequest());
            }

            var loginResponse = UserBusiness.SocialLogin(SocialNetworkType.Get(socialLoginRequest.SocialNetworkType), socialLoginRequest.Email, socialLoginRequest.Token, socialLoginRequest.RequestedToBeAdvisor);

            return(Ok(new { logged = !loginResponse.PendingConfirmation, jwt = GenerateToken(socialLoginRequest.Email.ToLower().Trim()), data = loginResponse }));
        }
示例#7
0
 public void InsertNewLogin(int userId, decimal?aucAmount, SocialNetworkType socialNetworkType)
 {
     InsertActionAsync(new DomainObjects.Account.Action()
     {
         CreationDate = Data.GetDateTimeNow(),
         UserId       = userId,
         Type         = ActionType.NewLogin.Value,
         AucAmount    = aucAmount,
         Ip           = LoggedIp,
         Message      = socialNetworkType?.GetDescription()
     });
 }
示例#8
0
        public async Task <IHttpActionResult> GetSocialNetworkType(int id)
        {
            SocialNetworkType socialNetworkType = await db.SocialNetworkTypes.FindAsync(id);

            if (socialNetworkType == null)
            {
                ModelState.AddModelError("Message", "Social Network type not found!");
                return(BadRequest(ModelState));
            }

            return(Ok(socialNetworkType));
        }
示例#9
0
        private SocialUser GetSocialUser(SocialNetworkType socialNetworkType, string accessToken)
        {
            SocialUser socialUser = null;

            if (socialNetworkType == SocialNetworkType.Facebook)
            {
                socialUser = FacebookBusiness.GetSocialUser(accessToken);
            }
            else if (socialNetworkType == SocialNetworkType.Google)
            {
                socialUser = GoogleBusiness.GetSocialUser(accessToken);
            }
            return(socialUser);
        }
示例#10
0
        public async Task <IHttpActionResult> DeleteSocialNetworkType(int socialTypeId)
        {
            SocialNetworkType socialNetworkType = await db.SocialNetworkTypes.FindAsync(socialTypeId);

            if (socialNetworkType == null)
            {
                ModelState.AddModelError("Message", "Social Network type not found!");
                return(BadRequest(ModelState));
            }

            db.SocialNetworkTypes.Remove(socialNetworkType);
            await db.SaveChangesAsync();

            return(Ok(socialNetworkType));
        }
        public async Task AddSocialNetworkAccountAsync(int organizationId, SocialNetworkType socialNetworkType, string url, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();
            if (organizationId <= 0)
            {
                throw new ArgumentException(nameof(organizationId));
            }

            await _organizationRepository.AddSocialNetworkAccountAsync(new OrganizationSocialNetworkUrlEntity
            {
                OrganizationId = organizationId,
                Type           = socialNetworkType,
                Url            = url
            }, cancellationToken);
        }
示例#12
0
        private static ISocialNetworkClient FindClient(SocialNetworkType clientType, string token)
        {
            ISocialNetworkClient client;

            var types = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.Namespace == NamespaceClients).ToList();
            var type  = types.FirstOrDefault(x => x.Name == $"{clientType.ToString()}{ClientTypePostfix}");

            if (type != null)
            {
                client = (ISocialNetworkClient)Activator.CreateInstance(type, token);
            }
            else
            {
                throw new SocialNetworkException("Specific client was not found in namespace SocialNetworkClient.Clients");
            }

            return(client);
        }
示例#13
0
        public LoginResponse SocialLogin(SocialNetworkType socialNetworkType, string email, string accessToken, bool requestedToBeAdvisor)
        {
            BaseEmailValidation(email);
            EmailValidation(email);
            SocialUser socialUser = GetSocialUser(socialNetworkType, accessToken);

            ValidateSocialUser(socialUser, email);

            var user = GetForLoginByEmail(email);

            if (user != null)
            {
                return(SocialLogin(user, socialNetworkType));
            }
            else
            {
                return(SocialRegister(email, requestedToBeAdvisor, socialNetworkType));
            }
        }
示例#14
0
        private LoginResponse SocialLogin(User user, SocialNetworkType socialNetworkType)
        {
            if (!user.ConfirmationDate.HasValue)
            {
                user.ConfirmationDate = Data.GetDateTimeNow();
                Data.Update(user);
            }
            bool hasInvestment = GetUserHasInvestment(user);

            ActionBusiness.InsertNewLogin(user.Id, null, socialNetworkType);

            return(new LoginResponse()
            {
                Id = user.Id,
                Email = user.Email,
                PendingConfirmation = !user.ConfirmationDate.HasValue,
                IsAdvisor = IsValidAdvisor(user),
                AdvisorName = UserBusiness.GetAdvisorName(user),
                ProfileUrlGuid = UserBusiness.GetProfileUrlGuid(user),
                HasInvestment = hasInvestment
            });
        }
示例#15
0
        public async Task <int> AnalyseBadRequest(BotUser botUser, SocialNetworkType type, object bot, List <BotText> botTexts, List <VKApiRequestModel> Requests = null)
        {
            var texter = new BotTextHelper(botUser.Locale, type, botTexts);
            var sender = new ApiRouter(type, bot, botUser, Requests);

            switch (botUser.NowIs)
            {
            case MallBotWhatIsHappeningNow.SettingCustomer:
                return(await sender.SendText(texter.GetMessage("%badrequest1%")));

            case MallBotWhatIsHappeningNow.SearchingOrganization:
                return(await sender.SendText(texter.GetMessage("%badrequest2%")));

            case MallBotWhatIsHappeningNow.SearchingWay:
                return(await sender.SendText(texter.GetMessage("%badrequest3%")));

            case MallBotWhatIsHappeningNow.GettingAllOrganizations:
                return(await sender.SendText(texter.GetMessage("%badrequest4%")));

            default:
                return(0);
            }
        }
示例#16
0
        public async Task <IHttpActionResult> PostSocialNetworkType([FromBody] SocialNetworkType socialNetworkType)
        {
            if (!ModelState.IsValid)
            {
                ModelState.AddModelError("Message", "The social network type details are not valid!");
                return(BadRequest(ModelState));
            }

            try
            {
                db.SocialNetworkTypes.Add(socialNetworkType);
                await db.SaveChangesAsync();

                SocialNetworkType lastpc = await db.SocialNetworkTypes.OrderByDescending(pc => pc.socialTypeId).FirstAsync();

                return(Ok <SocialNetworkType>(lastpc));;
            }
            catch (System.Exception)
            {
                ModelState.AddModelError("Message", "Error during saving your social network type!");
                return(BadRequest(ModelState));
            }
        }
示例#17
0
        public async Task <IHttpActionResult> PutSocialNetworkType(int socialTypeId, SocialNetworkType socialNetworkType)
        {
            if (!ModelState.IsValid)
            {
                ModelState.AddModelError("Message", "The social network type details are not valid!");
                return(BadRequest(ModelState));
            }

            if (socialTypeId != socialNetworkType.socialTypeId)
            {
                ModelState.AddModelError("Message", "The social network type id is not valid!");
                return(BadRequest(ModelState));
            }

            db.Entry(socialNetworkType).State = EntityState.Modified;

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!SocialNetworkTypeExists(socialTypeId))
                {
                    ModelState.AddModelError("Message", "Social Network type not found!");
                    return(BadRequest(ModelState));
                }
                else
                {
                    throw;
                }
            }

            SocialNetworkType recspps = await db.SocialNetworkTypes.Where(cor => cor.socialTypeId == socialTypeId).FirstAsync();

            return(Ok <SocialNetworkType>(recspps));
        }
示例#18
0
        private LoginResponse SocialRegister(string email, bool requestedToBeAdvisor, SocialNetworkType socialNetworkType)
        {
            var user = SetNewUser(email, null, null, true);

            Data.Insert(user);

            ActionBusiness.InsertNewLogin(user.Id, null, socialNetworkType);
            return(new LoginResponse()
            {
                Id = user.Id,
                Email = user.Email,
                HasInvestment = false,
                PendingConfirmation = false,
                IsAdvisor = false,
                RequestedToBeAdvisor = requestedToBeAdvisor
            });
        }
示例#19
0
 public static List <Subscription> GetSubscriptions(SocialNetworkType socialNetworkType)
 {
     throw new NotImplementedException();
 }
示例#20
0
 public static List <Subscription> GetSubscriptions(SocialNetworkType socialNetworkType)
 {
     return(SqliteConnections.GetSubscriptions(socialNetworkType));
 }
示例#21
0
 public static ISocialNetworkClient GetClient(SocialNetworkType clientType, string token)
 {
     return(FindClient(clientType, token));
 }
示例#22
0
        /// <summary>
        /// Выполение команд, предназначенных разработчикам
        /// </summary>
        /// <param name="thisQuery"></param>
        /// <param name="type"></param>
        /// <param name="Bot"></param>
        /// <param name="botUser"></param>
        /// <param name="trimmedLoweredQuery"></param>
        /// <param name="DataOfBot"></param>
        /// <param name="Requests"></param>
        /// <returns></returns>
        public async Task <int> doDevelopersCommands(/*logging*/ BotUserQuery thisQuery /*where*/, SocialNetworkType type, object Bot, /*data*/ string trimmedLoweredQuery, CachedDataModel DataOfBot, /*other*/ List <VKApiRequestModel> Requests = null)
        {
            var sendHelper = new ApiRouter(type, Bot, botUser, Requests);

            try
            {
                var  cmndHelper            = new CommandAnswerHelper();
                bool ThisCommandIsNotExist = true;

                if (trimmedLoweredQuery.Contains("route"))
                {
                    ThisCommandIsNotExist = false;
                    int floornumder = 0;
                    switch (cmndHelper.RouteAnalise(trimmedLoweredQuery, DataOfBot, out floornumder))
                    {
                    case 1:
                        var dh = new DrawHelper(new MallHelpers.Models.CachedDataModel(), null, null);
                        //var result = dh.DrawAllWaysAndAllShops(DataOfBot, floornumder);
                        //await sendHelper.BotSendPhoto(result.Bmp);
                        break;

                    case 2:
                        await sendHelper.SendText("Этажа с таким номером нет в выбранном вами торговом центре. /place");

                        break;

                    case 3:
                        await sendHelper.SendText("Синтаксическая ошибка. Используйте /testfunc_route_=номер этажа=");

                        break;
                    }
                }

                if (ThisCommandIsNotExist)
                {
                    await sendHelper.SendText("Такой команды нет. Доступные команды: \\r\\n\\r\\n/testfunc_route_1 - где 1 - любой номер этажа");
                }
            }
            catch
            {
                await sendHelper.SendText("testfunc_функция_параметр  !!!");
            }
            return(1);
        }
示例#23
0
        /// <summary>
        /// Выполнить задачу
        /// </summary>
        /// <param name="activeTaskText">Текст активной задачи</param>
        /// <param name="socialNetworkType">Тип социальной сети</param>
        /// <returns>True - Задача не выполнена, иначе false</returns>
        protected bool ExecuteTask(string activeTaskText, SocialNetworkType socialNetworkType)
        {
            SwitchToLastTab();

            bool isError = false;

            switch (activeTaskText)
            {
            case "Подписаться на":
            {
                if (_instagramManager.IsFoundPage())
                {
                    isError = true;
                    break;
                }

                _instagramManager.Subscribe();
                break;
            }

            case "Поставить лайк на пост":
            {
                if (_instagramManager.IsFoundPage())
                {
                    isError = true;
                    break;
                }

                _instagramManager.PutLike();
                break;
            }

            case "Подписаться на сообщество":
            {
                if (_vkManager.IsPrivateGroup() || _vkManager.IsBlockedCommunity())
                {
                    isError = true;
                    break;
                }

                _vkManager.JoinToComunity();
                break;
            }

            case "Поставить лайк и репост":
            {
                if (!_vkManager.IsPostFound())
                {
                    isError = true;
                    break;
                }

                _vkManager.PutLike();
                _vkManager.MakeRepost();
                break;
            }

            default:
            {
                isError = true;

                if (socialNetworkType == SocialNetworkType.Instagram)
                {
                    _logManager.SendToEmail(activeTaskText, "ExecuteTasksInInstagram()", GetUrlPage(), "Новая задача для сервиса V-Like");
                    break;
                }

                _logManager.SendToEmail(activeTaskText, "ExecuteTasksInVkontakte()", GetUrlPage(), "Новая задача для сервиса V-Like");
            }
            break;
            }

            if (isError)
            {
                CloseCurrentTabAndSwitchToAnother();
                SkipActiveTask();
                RefreshPage();
            }

            return(isError);
        }
示例#24
0
        /// <summary>
        /// Добавление пользователя в базу
        /// </summary>
        /// <param name="type"></param>
        /// <param name="Bot"></param>
        /// <param name="recepientID"></param>
        /// <param name="first_name"></param>
        /// <param name="last_name"></param>
        /// <returns></returns>
        public MallBotContext AddBotUser(SocialNetworkType type, object Bot, string recepientID, string first_name = "", string last_name = "")
        {
            try
            {
                var btusr = new BotUser();

                byte   sex    = 0;
                string bdate  = "";
                string locale = "ru_RU";
                VK     vk     = null;

                FacebookApiHelper facebook = null;

                if (type == SocialNetworkType.VK)
                {
                    //Запрашиваем данные о юзере в vk
                    vk = (VK)Bot;
                    var obj = AsyncHelper.RunSync(() => vk.GetUsersInformation(ulong.Parse(recepientID)));
                    if (obj.ToString()[0] == '¡')
                    {
                        Logging.Logger.Error("VK. GetUsersInformation", obj.ToString());
                    }
                    else
                    {
                        var VKuser = (VKResponceUser)obj;

                        sex        = VKuser.response[0].sex;
                        first_name = VKuser.response[0].first_name;
                        last_name  = VKuser.response[0].last_name;
                        bdate      = VKuser.response[0].bdate;
                    }
                    btusr.BotUserVKID = recepientID;
                }

                if (type == SocialNetworkType.Telegram)
                {
                    btusr.BotUserTelegramID = recepientID;
                }

                if (type == SocialNetworkType.Facebook)
                {
                    facebook = (FacebookApiHelper)Bot;

                    object obj = AsyncHelper.RunSync(() => facebook.GetUsersInformation(recepientID.ToString()));
                    if (obj.ToString()[0] == '¡')
                    {
                        Logging.Logger.Error("Facebook. GetUsersInformation", obj.ToString());
                    }
                    else
                    {
                        var facebookUser = (FacebookUser)obj;
                        if (facebookUser.gender == "male")
                        {
                            sex = 2;
                        }
                        else
                        {
                            sex = 1;
                        }
                        first_name = facebookUser.first_name;
                        last_name  = facebookUser.last_name;

                        if (facebookUser.locale != "ru_RU")
                        {
                            locale = "en_EN";
                        }
                    }
                    btusr.BotUserFacebookID = recepientID;
                }

                btusr.LevelTutorial = 0;

                if (sex != 0)
                {
                    btusr.Male = sex.ToString();
                }

                if (!string.IsNullOrWhiteSpace(first_name) || !string.IsNullOrWhiteSpace(last_name))
                {
                    btusr.Name = first_name + " " + last_name;
                }

                if (!string.IsNullOrWhiteSpace(bdate))
                {
                    string[] data = bdate.Split('.');
                    if (data.Count() == 3)
                    {
                        btusr.DateOfBirth = new DateTime(int.Parse(data[2]), int.Parse(data[1]), int.Parse(data[0]));
                    }
                    else if (data.Count() == 2)
                    {
                        btusr.DateOfBirth = new DateTime(2096, int.Parse(data[1]), int.Parse(data[0]));
                    }
                }

                btusr.Locale              = locale;
                btusr.IsTestMode          = 0;
                btusr.NowIs               = MallBotWhatIsHappeningNow.SettingCustomer;
                btusr.CustomerCompositeID = "newuser";
                btusr.LastActivityDate    = DateTime.Now;

                BotUser.Add(btusr);
                SaveChanges();

                return(this);
            }
            catch (Exception exc)
            {
                Logging.Logger.Error(exc);
                return(this);
            }
        }
示例#25
0
        /// <summary>
        /// Выполение команд, предназначенных для детальной работы с Тогрговыми Центрами
        /// </summary>
        /// <param name="thisQuery"></param>
        /// <param name="type"></param>
        /// <param name="Bot"></param>
        /// <param name="botUser"></param>
        /// <param name="trimmedLoweredQuery"></param>
        /// <param name="DataOfBot"></param>
        /// <param name="Requests"></param>
        /// <returns></returns>
        public async Task <Customer> doSetSettingsAboutMallsCommands(/*logging*/ BotUserQuery thisQuery /*where*/, SocialNetworkType type, object Bot, /*data*/ string trimmedLoweredQuery, MallBotContext dbMainContext, /*other*/ List <VKApiRequestModel> Requests = null)
        {
            var sendHelper = new ApiRouter(type, Bot, botUser, Requests);

            try
            {
                if (trimmedLoweredQuery.Contains("starttestmode"))
                {
                    botUser.IsTestMode          = 1;
                    botUser.CustomerCompositeID = "empty";
                    botUser.ModifiedDate        = DateTime.Now;
                    dbMainContext.SaveChanges();

                    await sendHelper.SendText(textHelper.GetMessage("%starttestmode%"));

                    return(null);
                }

                if (trimmedLoweredQuery.Contains("endtestmode"))
                {
                    botUser.IsTestMode          = 0;
                    botUser.CustomerCompositeID = "empty";
                    botUser.ModifiedDate        = DateTime.Now;
                    dbMainContext.SaveChanges();

                    await sendHelper.SendText(textHelper.GetMessage("%endtestmode%"));

                    return(null);
                }

                if (trimmedLoweredQuery.Contains("place"))
                {
                    var      cmndHelper   = new CommandAnswerHelper();
                    Customer thisCustomer = null;
                    switch (cmndHelper.PlaceAnalise(trimmedLoweredQuery, out thisCustomer))
                    {
                    case 1:
                        botUser.CustomerCompositeID = trimmedLoweredQuery.Split('_')[2].ToUpper();
                        botUser.ModifiedDate        = DateTime.Now;
                        dbMainContext.SaveChanges();
                        await sendHelper.SendText($"Ура! Вы выбрали «{thisCustomer.Name}»");

                        return(thisCustomer);

                    case 2:
                        await sendHelper.SendText("Торгового центра с таким ключом не существует!");

                        return(null);

                    case 3:
                        await sendHelper.SendText("Синтаксическая ошибка. Используйте /mallset_place_=id= \\r\\nгде =id= - составной ключ. Например, /mallset_place_A1");

                        return(null);

                    case 4:
                        await sendHelper.SendText("Ошибка приложения. Попробуйте выполнить команду еще раз");

                        return(null);
                    }
                    return(null);
                }

                await sendHelper.SendText("Такой команды нет. Доступные команды: \\r\\n\\r\\n/mallset_starttestmode \\r\\n/mallset_endtestmode");

                return(null);
            }
            catch
            {
                await sendHelper.SendText("mallset_функция  !!!");

                return(null); // ошибка
            }
        }