internal VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false, string apiVersion = null)
        {
            var        stackTrace = new StackTrace();
            MethodBase methodBase = stackTrace.GetFrame(1).GetMethod();
            var        attributes = methodBase.GetCustomAttributes(typeof(ApiVersionAttribute), true);

            if (attributes.Length > 0)
            {
                var version = ((ApiVersionAttribute)attributes[0]).Version;
                parameters.Add("v", version);
            }
            if (!parameters.ContainsKey("v"))
            {
                if (!string.IsNullOrEmpty(apiVersion))
                {
                    parameters.Add("v", apiVersion);
                }
                else
                {
                    //TODO: WARN: раскомментировать после добавления аннотаций ко всем методам
                    //throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters");
                }
            }
            else
            {
                //TODO: WARN: раскомментировать, исправив ошибки в существующем коде
                //throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters");
            }

            return(Call(methodName, parameters, skipAuthorization));
        }
Exemple #2
0
        internal VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false, string apiVersion = null)
        {
            if (!parameters.ContainsKey("v"))
            {
                parameters.Add("v", !string.IsNullOrEmpty(apiVersion) ? apiVersion : VkApiVersion);
            }

            return(Call(methodName, parameters, skipAuthorization));
        }
Exemple #3
0
        public async Task <JToken> CallAsync(Uri uri, VkParameters parameters, CancellationToken cancellationToken = default)
        {
            if (!parameters.ContainsKey("v"))
            {
                parameters.Add("v", _versionManager.Version);
            }

            var response = await _captchaHandler.Perform((sid, key) =>
            {
                parameters.Add("captcha_sid", sid);
                parameters.Add("captcha_key", key);

                return(InvokeAsyncInternal(uri, parameters, cancellationToken).ConfigureAwait(false));
            });

            return(JToken.Parse(response));
        }
Exemple #4
0
        /// <summary>
        /// Базовое обращение к vk.com
        /// </summary>
        /// <param name="vkApi">VkNet Api</param>
        /// <param name="parameters"> Параметры запроса </param>
        /// <param name="server">Сервер запроса</param>
        /// <returns> Ответ от vk.com в формате json </returns>
        /// <exception cref="CaptchaNeededException"> Требуется ввести капчу </exception>
        private static string CallBase(VkApi vkApi, VkParameters parameters, string server)
        {
            if (!parameters.ContainsKey(key: "v"))
            {
                parameters.Add(name: "v", value: vkApi.VkApiVersion.Version);
            }

            if (_logger == null && !_isLoggerNull)
            {
                _logger = ReflectionHelper.GetPrivateField <ILogger>(vkApi, "_logger");
            }
            if (_logger == null)
            {
                _isLoggerNull = true;
            }

            _logger?.Debug(message:
                           $"Вызов GetBotsLongPollHistory, с параметрами {string.Join(separator: ",", values: parameters.Select(selector: x => $"{x.Key}={x.Value}"))}");
Exemple #5
0
        internal VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false, string apiVersion = null)
        {
            if (!parameters.ContainsKey("v"))
            {
                if (!string.IsNullOrEmpty(apiVersion))
                {
                    parameters.Add("v", apiVersion);
                }
                else
                {
                    //TODO: WARN: раскомментировать после добавления аннотаций ко всем методам
                    //throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters");
                }
            }
            else
            {
                //TODO: WARN: раскомментировать, исправив ошибки в существующем коде
                //throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters");
            }

            return(Call(methodName, parameters, skipAuthorization));
        }
Exemple #6
0
        public VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false)
        {
            if (!parameters.ContainsKey("v"))
            {
                parameters.Add("v", VkApiVersion);
            }

            string answer = null;

            if (_captchaSolver == null)
            {
                answer = Invoke(methodName, parameters, skipAuthorization);
            }
            else
            {
                var    numberOfRemainingAttemptsToSolveCaptcha = MaxCaptchaRecognitionCount;
                var    numberOfRemainingAttemptsToCall         = MaxCaptchaRecognitionCount + 1;
                long?  captchaSidTemp = null;
                string captchaKeyTemp = null;
                var    callCompleted  = false;

                do
                {
                    try
                    {
                        parameters.Add("captcha_sid", captchaSidTemp);
                        parameters.Add("captcha_key", captchaKeyTemp);
                        numberOfRemainingAttemptsToCall--;
                        answer = Invoke(methodName, parameters, skipAuthorization);

                        callCompleted = true;
                    }
                    catch (CaptchaNeededException captchaNeededException)
                    {
                        // Если мы обрабатываем исключение не первый раз, сообщаем решателю капчи
                        // об ошибке распознавания предыдущей капчи
                        if (numberOfRemainingAttemptsToSolveCaptcha < MaxCaptchaRecognitionCount)
                        {
                            _captchaSolver?.CaptchaIsFalse();
                        }

                        if (numberOfRemainingAttemptsToSolveCaptcha <= 0)
                        {
                            continue;
                        }
                        captchaSidTemp = captchaNeededException.Sid;
                        captchaKeyTemp = _captchaSolver?.Solve(captchaNeededException.Img?.AbsoluteUri);
                        numberOfRemainingAttemptsToSolveCaptcha--;
                    }
                } while (numberOfRemainingAttemptsToCall > 0 && !callCompleted);

                // Повторно выбрасываем исключение, если капча ни разу не была распознана верно
                if (!callCompleted && captchaSidTemp.HasValue)
                {
                    throw new CaptchaNeededException(captchaSidTemp.Value, captchaKeyTemp);
                }
            }

            var json = JObject.Parse(answer);

            var rawResponse = json["response"];

            return(new VkResponse(rawResponse)
            {
                RawJson = answer
            });
        }
Exemple #7
0
	    internal VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false, string apiVersion = null)
	    {
		    if (!parameters.ContainsKey("v"))
		    {
			    if (!string.IsNullOrEmpty(apiVersion))
					parameters.Add("v", apiVersion);
				else
				{
					//TODO: WARN: раскомментировать после добавления аннотаций ко всем методам
					//throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters");
				}
		    }
		    else
		    {
				//TODO: WARN: раскомментировать, исправив ошибки в существующем коде
				//throw new InvalidParameterException("You must use ApiVersionAttribute except adding \"v\" parameter to VkParameters");
		    }

			return Call(methodName, parameters, skipAuthorization);
	    }
Exemple #8
0
        public VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false)
        {
            if (!parameters.ContainsKey("v"))
            {
                parameters.Add("v", VkApiVersion);
            }

            string answer = null;

            if (_captchaSolver == null)
            {
                answer = Invoke(methodName, parameters, skipAuthorization);
            }
            else
            {
                var numberOfRemainingAttemptsToSolveCaptcha = MaxCaptchaRecognitionCount;
                var numberOfRemainingAttemptsToCall = MaxCaptchaRecognitionCount + 1;
                long? captchaSidTemp = null;
                string captchaKeyTemp = null;
                var callCompleted = false;

                do
                {
                    try
                    {
                        parameters.Add("captcha_sid", captchaSidTemp);
                        parameters.Add("captcha_key", captchaKeyTemp);
                        numberOfRemainingAttemptsToCall--;
                        answer = Invoke(methodName, parameters, skipAuthorization);

                        callCompleted = true;
                    }
                    catch (CaptchaNeededException captchaNeededException)
                    {
                        // Если мы обрабатываем исключение не первый раз, сообщаем решателю капчи
                        // об ошибке распознавания предыдущей капчи
                        if (numberOfRemainingAttemptsToSolveCaptcha < MaxCaptchaRecognitionCount)
                        {
                            _captchaSolver?.CaptchaIsFalse();
                        }

                        if (numberOfRemainingAttemptsToSolveCaptcha <= 0)
                        {
                            continue;
                        }
                        captchaSidTemp = captchaNeededException.Sid;
                        captchaKeyTemp = _captchaSolver?.Solve(captchaNeededException.Img?.AbsoluteUri);
                        numberOfRemainingAttemptsToSolveCaptcha--;
                    }
                } while (numberOfRemainingAttemptsToCall > 0 && !callCompleted);

                // Повторно выбрасываем исключение, если капча ни разу не была распознана верно
                if (!callCompleted && captchaSidTemp.HasValue)
                {
                    throw new CaptchaNeededException(captchaSidTemp.Value, captchaKeyTemp);
                }
            }

            var json = JObject.Parse(answer);

            var rawResponse = json["response"];

            return new VkResponse(rawResponse) { RawJson = answer };
        }
Exemple #9
0
        internal VkResponse Call(string methodName, VkParameters parameters, bool skipAuthorization = false, string apiVersion = null)
        {
            if (!parameters.ContainsKey("v"))
            {
                parameters.Add("v", !string.IsNullOrEmpty(apiVersion) ? apiVersion : VkApiVersion);
            }

            return Call(methodName, parameters, skipAuthorization);
        }