Beispiel #1
0
        public UserOrGroup GetListEx(GetListParams @params)
        {
            var parameters = new VkParameters
            {
                { "type", @params.Type },
                { "owner_id", @params.OwnerId },
                { "item_id", @params.ItemId },
                { "page_url", @params.PageUrl },
                { "filter", @params.Filter },
                { "friends_only", @params.FriendsOnly },
                { "extended", true },
                { "offset", @params.Offset },
                { "skip_own", @params.SkipOwn }
            };

            if (@params.FriendsOnly.HasValue && @params.FriendsOnly.Value)
            {
                if (@params.Count <= 100)
                {
                    parameters.Add("count", @params.Count);
                }
            }
            else
            {
                if (@params.Count <= 1000)
                {
                    parameters.Add("count", @params.Count);
                }
            }
            return(_vk.Call("likes.getList", parameters, true));
        }
Beispiel #2
0
        /// <inheritdoc />
        public ReadOnlyCollection <Chat> GetChat(IEnumerable <long> chatIds, ProfileFields fields = null, NameCase nameCase = null)
        {
            var isNoEmpty = chatIds == null || !chatIds.Any();

            if (isNoEmpty)
            {
                throw new ArgumentException(message: "At least one chat ID must be defined", paramName: nameof(chatIds));
            }

            var parameters = new VkParameters
            {
                { "fields", fields },
                { "name_case", nameCase }
            };

            if (chatIds.Count() > 1)
            {
                parameters.Add(name: "chat_ids", collection: chatIds);
            }
            else
            {
                parameters.Add(name: "chat_id", value: chatIds.ElementAt(index: 0));
            }

            var response = _vk.Call(methodName: "messages.getChat", parameters: parameters);

            return(chatIds.Count() > 1
                                ? response.ToReadOnlyCollectionOf <Chat>(selector: c => c)
                                : new ReadOnlyCollection <Chat>(list: new List <Chat> {
                response
            }));
        }
Beispiel #3
0
        public ReadOnlyCollection <Message> Get(
            MessageType type,
            out int totalCount,
            uint?count            = 20,
            uint?offset           = null,
            TimeSpan?timeOffset   = null,
            MessagesFilter?filter = null,
            uint?previewLength    = 0,
            ulong?lastMessageId   = null)
        {
            var parameters = new VkParameters
            {
                { "out", type },
                { "offset", offset },
                { "filters", filter },
                { "preview_length", previewLength },
                { "last_message_id", lastMessageId }
            };

            if (count <= 200)
            {
                parameters.Add("count", count);
            }
            if (timeOffset.HasValue)
            {
                parameters.Add("time_offset", timeOffset.Value.TotalSeconds);
            }
            VkResponse response = _vk.Call("messages.get", parameters);

            totalCount = response["count"];

            return(response["items"].ToReadOnlyCollectionOf <Message>(item => item));
        }
Beispiel #4
0
        public ReadOnlyCollection <long> GetList(GetListParams @params)
        {
            var parameters = new VkParameters
            {
                { "type", @params.Type },
                { "owner_id", @params.OwnerId },
                { "item_id", @params.ItemId },
                { "page_url", @params.PageUrl },
                { "filter", @params.Filter },
                { "friends_only", @params.FriendsOnly },
                { "offset", @params.Offset },
                { "skip_own", @params.SkipOwn }
            };

            if (@params.FriendsOnly.HasValue && @params.FriendsOnly.Value)
            {
                if (@params.Count <= 100)
                {
                    parameters.Add("count", @params.Count);
                }
            }
            else
            {
                if (@params.Count <= 1000)
                {
                    parameters.Add("count", @params.Count);
                }
            }

            VkResponseArray response = _vk.Call("likes.getList", parameters);

            return(response.ToReadOnlyCollectionOf <long>(x => x));
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        public ReadOnlyCollection <Chat> GetChat(IEnumerable <long> chatIds, ProfileFields fields = null, NameCase nameCase = null)
        {
            var isNoEmpty = chatIds == null || !chatIds.Any();

            if (isNoEmpty)
            {
                throw new ArgumentException("At least one chat ID must be defined", "chatIds");
            }
            var parameters = new VkParameters {
                { "fields", fields }, { "name_case", nameCase }
            };

            if (chatIds.Count() > 1)
            {
                parameters.Add("chat_ids", chatIds);
            }
            else
            {
                parameters.Add("chat_id", chatIds.ElementAt(0));
            }
            var response = _vk.Call("messages.getChat", parameters);

            if (chatIds.Count() > 1)
            {
                return(response.ToReadOnlyCollectionOf <Chat>(c => c));
            }
            return(new ReadOnlyCollection <Chat>(new List <Chat> {
                response
            }));
        }
Beispiel #7
0
        /// <summary>
        /// Привести к типу VkParameters.
        /// </summary>
        /// <param name="p"> Параметры. </param>
        /// <returns> </returns>
        public static VkParameters ToVkParameters(LikesGetListParams p)
        {
            var parameters = new VkParameters
            {
                { "type", p.Type }
                , { "owner_id", p.OwnerId }
                , { "item_id", p.ItemId }
                , { "page_url", p.PageUrl }
                , { "filter", p.Filter }
                , { "friends_only", p.FriendsOnly }
                , { "extended", p.Extended }
                , { "offset", p.Offset }
                , { "skip_own", p.SkipOwn }
            };

            if (p.FriendsOnly.HasValue && p.FriendsOnly.Value)
            {
                if (p.Count <= 100)
                {
                    parameters.Add(name: "count", nullableValue: p.Count);
                }
            }
            else
            {
                if (p.Count <= 1000)
                {
                    parameters.Add(name: "count", nullableValue: p.Count);
                }
            }

            return(parameters);
        }
Beispiel #8
0
        /// <summary>
        /// Устанавливает новый статус текущему пользователю. 
        /// </summary>
        /// <param name="text">
        /// Текст статуса, который необходимо установить текущему пользователю. Если параметр 
        /// равен пустой строке, то статус текущего пользователя будет очищен.
        /// </param>
        /// <param name="audio">
        /// Текущая аудиозапись, которую необходимо транслировать в статус, задается в формате oid_aid (
        /// идентификатор владельца и идентификатор аудиозаписи, разделенные знаком подчеркивания). 
        /// Для успешной трансляции необходимо, чтобы она была включена пользователем, в противном случае будет возвращена 
        /// ошибка 221 ("User disabled track name broadcast"). При указании параметра audio параметр text игнорируется.
        /// </param>
        /// <returns>Возвращает true, если статус был успешно установлен, false в противном случае.</returns>
        /// <remarks>
        /// Для вызова этого метода Ваше приложение должно иметь права с битовой маской, содержащей <see cref="Settings.Status"/>. 
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/status.set"/>.
        /// </remarks>
        public bool Set([NotNull] string text, Audio audio = null)
        {
            if (text == null)
                throw new ArgumentNullException("text");

            var parameters = new VkParameters();
            if (audio != null)
                parameters.Add("audio", string.Format("{0}_{1}", audio.OwnerId, audio.Id));
            else
                parameters.Add("text", text);

            return _vk.Call("status.set", parameters);
        }
Beispiel #9
0
        public ReadOnlyCollection <Group> Get(long uid, bool extended = false, GroupsFilters filters = null, GroupsFields fields = null, uint offset = 0, uint count = 1000)
        {
            VkErrors.ThrowIfNumberIsNegative(() => uid);
            var parameters = new VkParameters
            {
                { "user_id", uid },
                { "extended", extended },
                { "filter", filters },
                { "fields", fields },
                { "offset", offset }
            };

            if (count < 1000)
            {
                parameters.Add("count", count);
            }
            var response = _vk.Call("groups.get", parameters);

            // в первой записи количество членов группы для (response["items"])
            if (!extended)
            {
                return(response.ToReadOnlyCollectionOf(id => new Group {
                    Id = id
                }));
            }
            return(response["items"].ToReadOnlyCollectionOf <Group>(r => r));
        }
Beispiel #10
0
        private void EnqueueEventAnswer(
            string eventId,
            long userId,
            long peerId,
            bool haveEventData = false,
            string text        = null,
            MessageEventType messageEventType = null)
        {
            VkParameters vkParameters = new VkParameters
            {
                { "event_id", eventId },
                { "user_id", userId },
                { "peer_id", peerId }
            };

            if (haveEventData)
            {
                vkParameters.Add("event_data",
                                 JsonConvert.SerializeObject(new EventData()
                {
                    Text = text,
                    Type = messageEventType
                })
                                 );
            }

            commandsQueue.Enqueue(new Command(CommandType.SendMessageEventAnswer, vkParameters));
        }
Beispiel #11
0
        public ReadOnlyCollection <Message> GetDialogs(out int totalCount, out int unreadCount, uint count = 20, int?offset = null, bool unread = false, long?startMessageId = null, int?previewLength = null)
        {
            var parameters = new VkParameters
            {
                { "start_message_id", startMessageId },
                { "offset", offset },
                { "unread", unread },
                { "preview_length", previewLength }
            };

            if (count <= 200)
            {
                parameters.Add("count", count);
            }
            VkResponse response = _vk.Call("messages.getDialogs", parameters);

            // При загрузке списка непрочитанных диалогов в параметре count передается значение unreadCount,
            // а значение totalCount не возвращаеться
            totalCount = response["count"];
            VkResponseArray items = response["items"];

            if (unread)
            {
                unreadCount = totalCount;
            }
            else
            {
                unreadCount = response.ContainsKey("unread_dialogs") ? response["unread_dialogs"] : 0;
            }
            return(items.ToReadOnlyCollectionOf <Message>(r => r));
        }
Beispiel #12
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));
        }
Beispiel #13
0
        public void AddNullableBoolean_NullValue()
        {
            var  @params = new VkParameters();
            bool?nbool   = null;

            @params.Add(name: "NullableBoolean", nullableValue: nbool);
            Assert.That(actual: @params, expression: Does.Not.ContainKey(expected: "NullableBoolean"));
        }
Beispiel #14
0
        public void AddNullableBoolean_NullValue()
        {
            var  @params = new VkParameters();
            bool?nbool   = null;

            @params.Add("NullableBoolean", nbool);
            Assert.That(@params, Does.Not.ContainKey("NullableBoolean"));
        }
Beispiel #15
0
        public static void StreamToStatusSync(long audioId, long ownerId, string accessKey = null)
        {
            if (StaticContent.VkApi == null)
            {
                throw new Exception("Пользователь не авторизован");
            }
            var audioString = $"audio{ownerId}_{audioId}";

            audioString = accessKey == null ? audioString : $"{audioString}_{accessKey}";
            var param = new VkParameters();

            param.Add("audio_ids", audioId);
            param.Add("target_ids", StaticContent.UserId);
            param.Add("access_token", StaticContent.VkApi.Token);
            param.Add("v", "5.101");
            var json = StaticContent.VkApi.Invoke("audio.setBroadcast", param);
        }
Beispiel #16
0
        public ReadOnlyCollection <Street> GetStreetsById(params int[] streetIds)
        {
            var parameters = new VkParameters();

            parameters.Add <int>("street_ids", streetIds);

            return(_vk.Call("database.getStreetsById", parameters, true).ToReadOnlyCollectionOf <Street>(x => x));
        }
Beispiel #17
0
        public ReadOnlyCollection <City> GetCitiesById(params int[] cityIds)
        {
            var parameters = new VkParameters();

            parameters.Add <int>("city_ids", cityIds);

            return(_vk.Call("database.getCitiesById", parameters, true).ToReadOnlyCollectionOf <City>(x => x));
        }
Beispiel #18
0
        public ReadOnlyCollection <Country> GetCountriesById(params int[] countryIds)
        {
            var parameters = new VkParameters();

            parameters.Add <int>("country_ids", countryIds);

            return(_vk.Call("database.getCountriesById", parameters, true).ToReadOnlyCollectionOf <Country>(c => c));
        }
Beispiel #19
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));
        }
Beispiel #20
0
        /// <summary>
        /// Перемещает видеозаписи в альбом.
        /// </summary>
        /// <param name="videoIds">Список идентификаторов видеороликов.</param>
        /// <param name="albumId">Идентификатор альбома, в который перемещаются видеозаписи.</param>
        /// <param name="groupId">Идентификатор сообщества, которому принадлежат видеозаписи. Если параметр не указан, то работа
        /// ведется с альбомом текущего пользователя.</param>
        /// <returns>После успешного выполнения возвращает true.</returns>
        /// <remarks>
        /// Для вызова этого метода Ваше приложение должно иметь права с битовой маской, содержащей <see cref="Settings.Video"/>.
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/video.moveToAlbum"/>.
        /// </remarks>
        public bool MoveToAlbum(IEnumerable <long> videoIds, long albumId, long?groupId = null)
        {
            if (videoIds == null)
            {
                throw new ArgumentNullException("videoIds", "Не указаны идентификаторы видеозаписей.");
            }

            VkErrors.ThrowIfNumberIsNegative(() => albumId);

            var parameters = new VkParameters {
                { "album_id", albumId }, { "group_id", groupId }
            };

            parameters.Add("video_ids", videoIds);
            parameters.Add("v", _vk.ApiVersion);

            return(_vk.Call("video.moveToAlbum", parameters));
        }
Beispiel #21
0
        /// <summary>
        /// Редактирует существующий список друзей текущего пользователя.
        /// </summary>
        /// <param name="listId">идентификатор списка друзей</param>
        /// <param name="name">название списка друзей</param>
        /// <param name="userIds">идентификаторы пользователей, включенных в список</param>
        /// <param name="addUserIds">идентификаторы пользователей, которых необходимо добавить в список. (в случае если не передан user_ids) </param>
        /// <param name="deleteUserIds">идентификаторы пользователей, которых необходимо изъять из списка. (в случае если не передан user_ids) </param>
        /// <returns>После успешного выполнения возвращает true.</returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/friends.editList"/>.
        /// </remarks>
        public bool EditList(long listId, string name = null, IEnumerable <long> userIds = null, IEnumerable <long> addUserIds = null, IEnumerable <long> deleteUserIds = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => listId);

            var parameters = new VkParameters
            {
                { "name", name },
                { "list_id", listId }
            };

            parameters.Add("user_ids", userIds);
            parameters.Add("add_user_ids", addUserIds);
            parameters.Add("delete_user_ids", deleteUserIds);

            VkResponse response = _vk.Call("friends.editList", parameters);

            return(response);
        }
Beispiel #22
0
        public async static Task <long> ToLibrary(long audioId, string accessKey = null)
        {
            if (StaticContent.VkApi == null)
            {
                throw new Exception("Пользователь не авторизован");
            }
            var param = new VkParameters();

            param.Add("audio_id", audioId);
            param.Add("owner_id", StaticContent.UserId);
            if (accessKey != null)
            {
                param.Add("access_key", accessKey);
            }
            var id = await StaticContent.VkApi.CallAsync <long>("audio.add", param);

            //var id = await StaticContent.VkApi.Audio.AddAsync(audioId, StaticContent.UserId);
            return(id);
        }
        /// <summary>
        /// Устанавливает новый статус текущему пользователю.
        /// </summary>
        /// <param name="text">
        /// Текст статуса, который необходимо установить текущему пользователю. Если параметр
        /// равен пустой строке, то статус текущего пользователя будет очищен.
        /// </param>
        /// <param name="audio">
        /// Текущая аудиозапись, которую необходимо транслировать в статус, задается в формате oid_aid (
        /// идентификатор владельца и идентификатор аудиозаписи, разделенные знаком подчеркивания).
        /// Для успешной трансляции необходимо, чтобы она была включена пользователем, в противном случае будет возвращена
        /// ошибка 221 ("User disabled track name broadcast"). При указании параметра audio параметр text игнорируется.
        /// </param>
        /// <returns>Возвращает true, если статус был успешно установлен, false в противном случае.</returns>
        /// <remarks>
        /// Для вызова этого метода Ваше приложение должно иметь права с битовой маской, содержащей <see cref="Settings.Status"/>.
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/status.set"/>.
        /// </remarks>
        public bool Set([NotNull] string text, Audio audio = null)
        {
            if (text == null)
            {
                throw new ArgumentNullException("text");
            }

            var parameters = new VkParameters();

            if (audio != null)
            {
                parameters.Add("audio", string.Format("{0}_{1}", audio.OwnerId, audio.Id));
            }
            else
            {
                parameters.Add("text", text);
            }

            return(_vk.Call("status.set", parameters));
        }
Beispiel #24
0
        public async static Task StreamToStatus(long audioId, long ownerId, string accessKey = null)
        {
            if (StaticContent.VkApi == null)
            {
                throw new Exception("Пользователь не авторизован");
            }
            var audioString = $"audio{ownerId}_{audioId}";

            audioString = accessKey == null ? audioString : $"{audioString}_{accessKey}";
            var param = new VkParameters();

            param.Add("audio_ids", audioId);
            param.Add("target_ids", StaticContent.UserId);
            param.Add("access_token", StaticContent.VkApi.Token);
            param.Add("v", "5.101");
            var json = await StaticContent.VkApi.InvokeAsync("audio.setBroadcast", param);

            //var b =json + "a";
            // var ab = await StaticContent.VkApi.CallAsync<List<long>>("audio.setBroadcast", param);
        }
Beispiel #25
0
        public void AddNullableBoolean_FalseValue()
        {
            var  @params = new VkParameters();
            bool?nbool   = false;

            @params.Add("NullableBoolean", nbool);
            Assert.That(@params, Does.ContainKey("NullableBoolean"));
            var val = @params["NullableBoolean"];

            Assert.That(val, Is.EqualTo("0"));
        }
Beispiel #26
0
        public void AddNullableBoolean_FalseValue()
        {
            var  @params = new VkParameters();
            bool?nbool   = false;

            @params.Add(name: "NullableBoolean", nullableValue: nbool);
            Assert.That(actual: @params, expression: Does.ContainKey(expected: "NullableBoolean"));
            var val = @params[key : "NullableBoolean"];

            Assert.That(actual: val, expression: Is.EqualTo(expected: "0"));
        }
Beispiel #27
0
        public bool DeleteDialog(long id, bool isChat, uint?offset = null, uint?count = null)
        {
            var parameters = new VkParameters {
                { isChat ? "chat_id" : "uid", id }, { "offset", offset }
            };

            if (count <= 10000)
            {
                parameters.Add("count", count);
            }
            return(_vk.Call("messages.deleteDialog", parameters));
        }
Beispiel #28
0
        public ReadOnlyCollection<User> Get([NotNull] IEnumerable<long> userIds, ProfileFields fields = null, NameCase nameCase = null)
        {
            if (userIds == null)
                throw new ArgumentNullException("userIds");

            var parameters = new VkParameters { { "fields", fields }, { "name_case", nameCase } };
            parameters.Add("user_ids", userIds);

            VkResponseArray response = _vk.Call("users.get", parameters);

            return response.ToReadOnlyCollectionOf<User>(x => x);
        }
Beispiel #29
0
        public async static Task <IList <IAudioFile> > GetTracks(long playlistId, long ownerId = 0, string key = null)
        {
            var param = new VkParameters();

            param.Add("playlist_id", playlistId);
            param.Add("owner_id", ownerId);
            param.Add("access_key", key);
            var music = await StaticContent.VkApi.CallAsync <VkCollection <Audio> >("audio.get", param);

            //var music = ownerId == 0 ? await StaticContent.VkApi.Audio.GetAsync(new VkNet.Model.RequestParams.AudioGetParams() { PlaylistId = playlistId }):
            //    await StaticContent.VkApi.Audio.GetAsync(new VkNet.Model.RequestParams.AudioGetParams() { PlaylistId = playlistId, OwnerId = ownerId});

            IList <IAudioFile> tracks = new List <IAudioFile>();

            foreach (var track in music)
            {
                tracks.Add(track.ToIAudioFile());
            }

            return(tracks);
        }
Beispiel #30
0
        public void EyeInit()
        {
            var webClient = new WebClient() { Encoding = Encoding.UTF8};
            var param = new VkParameters() { };
            param.Add("group_id", groupId);
            param.Add("access_token", data);

            dynamic responseLongPoll = JObject.Parse(vkApi.Call("groups.getLongPollServer", param).RawJson);
            string json = string.Empty;
            string url = string.Empty;

            while (true)
            {
                try
                {
                    url = string.Format("{0}?act=a_check&key={1}&ts={2}&wait=25&mode=2&version=3",
                                        responseLongPoll.response.server.ToString(),
                                        responseLongPoll.response.key.ToString(),
                                        json != string.Empty ? JObject.Parse(json)["ts"].ToString() : responseLongPoll.response.ts.ToString());
                    json = webClient.DownloadString(url);

                    var col = JObject.Parse(json)["updates"].ToList();
                    foreach (var item in col)
                    {
                        if (item["type"].ToString() == "message_new")
                        {
                            fromId = item["object"]["message"]["from_id"].ToString();
                            peerId = item["object"]["message"]["peer_id"].ToString();
                            //id = item["object"]["message"]["id"].ToString();
                            message = item["object"]["message"]["text"].ToString();

                            if (long.Parse(peerId) > 2000000000)
                                log.Print($"[{DateTime.Now:HH:mm}] Новое сообщение из беседы от ({WhoIs(long.Parse(fromId))}) {item["object"]["message"]["text"]}", ConsoleColor.White);
                            else
                                log.Print($"[{DateTime.Now:HH:mm}] Новое сообщение от ({WhoIs(long.Parse(fromId))}) {item["object"]["message"]["text"]}", ConsoleColor.White);

                            CheckCommands(message);
                        }
                    }
                }
Beispiel #31
0
		public void GetApiUrl_IntArray()
		{
			var arr = new[] { 1, 65 };

			var parameters = new VkParameters();
			parameters.Add<int>("country_ids", arr);

			const string expected = "https://api.vk.com/method/database.getCountriesById?country_ids=1,65&access_token=token";

			var url = Api.GetApiUrl("database.getCountriesById", parameters);

			Assert.That(url, Is.EqualTo(expected));
		}
        public ReadOnlyCollection <Chat> GetChat(IEnumerable <long> chatIds, ProfileFields fields = null, Enums.SafetyEnums.NameCase nameCase = null)
        {
            if (chatIds == null || chatIds.Count <long>() == 0)
            {
                throw new ArgumentException("At least one chat ID must be defined", "chatIds");
            }

            var parameters = new VkParameters {
                { "fields", fields }, { "name_case", nameCase }
            };

            if (chatIds.Count <long>() > 1)
            {
                string ids = "";
                foreach (long chatId in chatIds)
                {
                    ids += chatId.ToString() + ',';
                }
                parameters.Add("chat_ids", ids.Remove(ids.Length - 1, 1));
            }
            else
            {
                parameters.Add("chat_id", chatIds.ElementAt(0));
            }

            var response = _vk.Call("messages.getChat", parameters);

            if (chatIds.Count <long>() > 1)
            {
                return(response.ToReadOnlyCollectionOf <Chat>(c => c));
            }
            else
            {
                return(new ReadOnlyCollection <Chat>(new List <Chat> {
                    response
                }));
            }
        }
Beispiel #33
0
        public ReadOnlyCollection<User> SearchAdvanced(out int itemsCount, Sex sex, int age_from, ProfileFields fields = null, int count = 20, int offset = 0)
        {
           
            var parameters = new VkParameters { { "q", "" }, { "fields", fields }, { "count", count }, {"sort", 1}, {"country", 1}, {"sex",sex}
            ,{"age_from", age_from}, {"online", 1}, {"has_photo", 1}};
            if (offset > 0)
                parameters.Add("offset", offset);

            VkResponseArray response = _vk.Call("users.search", parameters);

            itemsCount = response[0];

            return response.Skip(1).ToReadOnlyCollectionOf<User>(r => r);
        }
Beispiel #34
0
        /// <summary>
        /// Редактирует списки друзей для выбранного друга.
        /// </summary>
        /// <param name="userId">идентификатор пользователя (из числа друзей), для которого необходимо отредактировать списки друзей</param>
        /// <param name="listIds">идентификаторы списков друзей, в которые нужно добавить пользователя</param>
        /// <returns>После успешного выполнения возвращает true.</returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/friends.edit"/>.
        /// </remarks>
        public bool Edit(long userId, IEnumerable <long> listIds)
        {
            VkErrors.ThrowIfNumberIsNegative(() => userId);

            var parameters = new VkParameters {
                { "user_id", userId }
            };

            parameters.Add("list_ids", listIds);

            VkResponse response = _vk.Call("friends.edit", parameters);

            return(response);
        }
Beispiel #35
0
        public ReadOnlyCollection<User> Search([NotNull] string query, out int itemsCount, ProfileFields fields = null, int count = 20, int offset = 0)
        {
            if (string.IsNullOrEmpty(query))
                throw new ArgumentException("Query can not be null or empty.");

            var parameters = new VkParameters { { "q", query }, { "fields", fields }, { "count", count } };
            if (offset > 0)
                parameters.Add("offset", offset);

            VkResponseArray response = _vk.Call("users.search", parameters);

            itemsCount = response[0];

            return response.Skip(1).ToReadOnlyCollectionOf<User>(r => r);
        }
Beispiel #36
0
		private ReadOnlyCollection<StatsPeriod> Get(DateTime dateFrom, DateTime? dateTo = null, long? groupId = null, long? appId = null)
		{
			var parameters = new VkParameters
			{
				{ "group_id", groupId },
				{ "app_id", appId },
				{ "date_from", dateFrom.ToString("yyyy-MM-dd") }
			};
			if (dateTo != null)
			{
				parameters.Add("date_to", dateTo.Value.ToString("yyyy-MM-dd"));
			}
			var result = _vk.Call("stats.get", parameters);
			return result.ToReadOnlyCollectionOf<StatsPeriod>(x => x);
		}
Beispiel #37
0
        /// <summary>
        /// Добавляет пользователя в черный список группы.
        /// </summary>
        /// <param name="groupId">Идентификатор группы.</param>
        /// <param name="userId">Идентификатор пользователя, которого нужно добавить в черный список.</param>
        /// <param name="endDate">Дата завершения срока действия бана. Если параметр не указан пользователь будет заблокирован навсегда.</param>
        /// <param name="reason">Причина бана <see cref="BanReason"/>.</param>
        /// <param name="comment">Текст комментария к бану.</param>
        /// <param name="commentVisible">true – текст комментария будет отображаться пользователю. false – текст комментария не доступен 
        /// пользователю (по умолчанию).</param>
        /// <returns>После успешного выполнения возвращает true.</returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/groups.banUser"/>.
        /// </remarks>
        public bool BanUser(long groupId, long userId, DateTime? endDate = null, BanReason? reason = null,
            string comment = "", bool commentVisible = false)
        {
            VkErrors.ThrowIfNumberIsNegative(() => groupId);
            VkErrors.ThrowIfNumberIsNegative(() => userId);

            var parameters = new VkParameters
                {
                    {"group_id", groupId},
                    {"user_id", userId},
                    {"end_date", endDate},
                    {"comment", comment},
                    {"comment_visible", commentVisible}
                };
            parameters.Add("reason", reason);

            return _vk.Call("groups.banUser", parameters);
        }
Beispiel #38
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);
	    }
Beispiel #39
0
        public bool MoveToAlbum(IEnumerable<long> videoIds, long albumId, long? groupId = null)
        {
            if (videoIds == null)
                throw new ArgumentNullException("videoIds", "Не указаны идентификаторы видеозаписей.");

            VkErrors.ThrowIfNumberIsNegative(() => albumId);

            var parameters = new VkParameters { { "album_id", albumId }, { "group_id", groupId } };
            parameters.Add("video_ids", videoIds);

            return _vk.Call("video.moveToAlbum", parameters);
        }
Beispiel #40
0
        private long[] getGroups(ulong uid, bool extended = false, GroupsFilters filters = null, GroupsFields fields = null, uint offset = 0, uint count = 1000)
        {
            var parameters = new VkParameters {
                { "uid", uid },
                { "extended", extended },
                { "filter", filters },
                { "fields", fields },
                { "offset", offset }
            };
            if (count < 1000) {
                parameters.Add("count", count);
            }

            string answer = vkapi.Invoke("groups.get", parameters, false);
            JObject json = JObject.Parse(answer);
            JArray rawResponse = json["response"] as JArray;

            return rawResponse.Select(jv => (long)jv).ToArray();
        }
Beispiel #41
0
 public ReadOnlyCollection<Group> Get(ulong uid, bool extended = false, GroupsFilters filters = null, GroupsFields fields = null, uint offset = 0, uint count = 1000)
 {
     var parameters = new VkParameters
     {
         { "uid", uid },
         { "extended", extended },
         { "filter", filters },
         { "fields", fields },
         { "offset", offset }
     };
     if (count < 1000)
     {
         parameters.Add("count", count);
     }
     var response = _vk.Call("groups.get", parameters);
     // в первой записи количество членов группы для (response["items"])
     return !extended ? response.ToReadOnlyCollectionOf(id => new Group { Id = id }) : response["items"].ToReadOnlyCollectionOf<Group>(r => r);
 }
Beispiel #42
0
        /// <summary>
        /// Транслирует аудиозапись в статус пользователю или сообществу.
        /// </summary>
        /// <param name="audio">Идентификатор аудиозаписи, которая будет отображаться в статусе, в формате owner_id_audio_id. Например, 1_190442705. 
        /// Если параметр не указан, аудиостатус указанных сообществ и пользователя будет удален.</param>
        /// <param name="targetIds">Перечисленные через запятую идентификаторы сообществ и пользователя, которым будет транслироваться аудиозапись. 
        /// Идентификаторы сообществ должны быть заданы в формате "-gid", где gid - идентификатор сообщества. Например, 1,-34384434. По умолчанию аудиозапись 
        /// транслируется текущему пользователю.</param>
        /// <returns>В случае успешного выполнения возвращает массив идентификаторов сообществ и пользователя, которым был установлен или удален аудиостатус.</returns>
        public ReadOnlyCollection<long> SetBroadcast(string audio, IEnumerable<long> targetIds)
        {
            VkErrors.ThrowIfNullOrEmpty(() => audio);

            var parameters = new VkParameters
                {
                    {"audio", audio}
                };
            parameters.Add("target_ids", targetIds);

            VkResponseArray response = _vk.Call("audio.setBroadcast", parameters);

            return response.ToReadOnlyCollectionOf<long>(x => x);
        }
Beispiel #43
0
 public NewsSuggestions GetSuggestedSources(int offset, int count = 20, bool shuffle = false, UsersFields fields = null)
 {
     var parameters = new VkParameters
     {
         { "offset", offset },
         { "shuffle", shuffle },
         { "fields", fields }
     };
     if (count <= 1000)
     {
         parameters.Add("count", count);
     }
     return _vk.Call("newsfeed.getSuggestedSources", parameters);
 }
Beispiel #44
0
		public ReadOnlyCollection<Chat> GetChat(IEnumerable<long> chatIds, ProfileFields fields = null, NameCase nameCase = null)
		{
			var isNoEmpty = chatIds == null || !chatIds.Any();
			if (isNoEmpty)
			{
				throw new ArgumentException("At least one chat ID must be defined", "chatIds");
			}
			var parameters = new VkParameters { { "fields", fields }, { "name_case", nameCase } };
			if (chatIds.Count() > 1)
			{
				parameters.Add("chat_ids", chatIds);
			} else
			{
				parameters.Add("chat_id", chatIds.ElementAt(0));
			}
			var response = _vk.Call("messages.getChat", parameters);

			if (chatIds.Count() > 1)
			{
				return response.ToReadOnlyCollectionOf<Chat>(c => c);
			}
			return new ReadOnlyCollection<Chat>(new List<Chat> { response });
		}
Beispiel #45
0
        public ReadOnlyCollection<City> GetCitiesById(params int[] cityIds)
        {
            var parameters = new VkParameters();
            parameters.Add<int>("city_ids", cityIds);

            VkResponseArray response = _vk.Call("database.getCitiesById", parameters, true);
            return response.ToReadOnlyCollectionOf<City>(x => x);
        }
Beispiel #46
0
        public ReadOnlyCollection<Street> GetStreetsById(params int[] streetIds)
        {
            var parameters = new VkParameters();
            parameters.Add<int>("street_ids", streetIds);

            VkResponseArray response = _vk.Call("database.getStreetsById", parameters, true);
            return response.ToReadOnlyCollectionOf<Street>(x => x);
        }
Beispiel #47
0
        public ReadOnlyCollection<Country> GetCountriesById(params int[] countryIds)
        {
            var parameters = new VkParameters();
            parameters.Add<int>("country_ids", countryIds);

            VkResponseArray response = _vk.Call("database.getCountriesById", parameters, true);

            return response.ToReadOnlyCollectionOf<Country>(c => c);
        }
Beispiel #48
0
        public ReadOnlyCollection<Chat> GetChat(IEnumerable<long> chatIds, ProfileFields fields = null, Enums.SafetyEnums.NameCase nameCase = null)
        {
            if (chatIds == null || chatIds.Count<long>() == 0)
                throw new ArgumentException("At least one chat ID must be defined", "chatIds");

            var parameters = new VkParameters { { "fields", fields }, { "name_case", nameCase } };
            if (chatIds.Count<long>() > 1)
            {
                string ids = "";
                foreach (long chatId in chatIds)
                    ids += chatId.ToString() + ',';
                parameters.Add("chat_ids", ids.Remove(ids.Length - 1, 1));
            }
            else
                parameters.Add("chat_id", chatIds.ElementAt(0));

            var response = _vk.Call("messages.getChat", parameters);

            if (chatIds.Count<long>() > 1)
                return response.ToReadOnlyCollectionOf<Chat>(c => c);
            else
                return new ReadOnlyCollection<Chat>(new List<Chat> { response });
        }
Beispiel #49
0
        /// <summary>
        /// Создает список друзей, который будет использоваться при отправке пользователем приглашений в приложение.
        /// </summary>
        /// <param name="type">Tип создаваемого списка друзей.</param>
        /// <param name="extended">Параметр, определяющий необходимость возвращать расширенную информацию о пользователях.
        /// 0 — возвращаются только идентификаторы;
        /// 1 — будут дополнительно возвращены имя и фамилия. флаг, может принимать значения 1 или 0, по умолчанию 0 (Флаг, может принимать значения 1 или 0, по умолчанию 0).</param>
        /// <param name="count">Количество пользователей в создаваемом списке.</param>
        /// <param name="offset">Смещение относительно первого пользователя для выборки определенного подмножества.</param>
        /// <param name="fields">Список дополнительных полей профилей, которые необходимо вернуть. См. подробное описание.</param>
        /// <returns>
        /// После успешного выполнения возвращает список пользователей.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/apps.getFriendsList" />.
        /// </remarks>
        public VkCollection<User> GetFriendsList(AppRequestType type, bool? extended = null, long? count = null, long? offset = null, UsersFields fields = null)
        {
            var parameters = new VkParameters
            {
                { "extended", extended },
                { "offset", offset },
                { "type", type },
                { "fields", fields }
            };

            if (count <= 5000)
            {
                parameters.Add("count", count);
            }

            return _vk.Call("apps.getFriendsList", parameters).ToVkCollectionOf<User>(x => x);
        }
Beispiel #50
0
        /// <summary>
        /// Привести к типу VkParameters.
        /// </summary>
        /// <param name="p">Параметры.</param>
        /// <returns></returns>
        internal static VkParameters ToVkParameters(NewsFeedSearchParams p)
        {
            var parameters = new VkParameters
            {
                { "q", p.Query },
                { "extended", p.Extended },
                { "latitude", p.Latitude },
                { "longitude", p.Longitude },
                { "start_time", p.StartTime },
                { "end_time", p.EndTime },
                { "start_from", p.StartFrom },
                { "fields", p.Fields }
            };
            if (p.Count <= 200)
            {
                parameters.Add("count", p.Count);
            }

            return parameters;
        }
Beispiel #51
0
 public ReadOnlyCollection<Mention> GetMentions(out int total, long ownerId = 0, DateTime? startTime = null, DateTime? endTime = null, ulong offset = 0, ulong count = 20)
 {
     var parameters = new VkParameters
     {
         { "owner_id", ownerId },
         { "start_time", startTime },
         { "end_time", endTime },
         { "offset", offset }
     };
     if (count <= 50)
     {
         parameters.Add("count", count);
     }
     var response = _vk.Call("newsfeed.getMentions", parameters);
     total = response["count"];
     return response["items"].ToReadOnlyCollectionOf<Mention>(x => x);
 }
Beispiel #52
0
        /// <summary>
        /// Редактирует списки друзей для выбранного друга.
        /// </summary>
        /// <param name="userId">идентификатор пользователя (из числа друзей), для которого необходимо отредактировать списки друзей</param>
        /// <param name="listIds">идентификаторы списков друзей, в которые нужно добавить пользователя</param>
        /// <returns>После успешного выполнения возвращает true.</returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/friends.edit"/>.
        /// </remarks>
        public bool Edit(long userId, IEnumerable<long> listIds)
        {
            VkErrors.ThrowIfNumberIsNegative(() => userId);

            var parameters = new VkParameters { { "user_id", userId } };
            parameters.Add("list_ids", listIds);

            VkResponse response = _vk.Call("friends.edit", parameters);

            return response;
        }
Beispiel #53
0
		public ReadOnlyCollection<User> GetFriendsList(out long totalCount, AppRequestType type, bool? extended = null, long? count = null, long? offset = null, UsersFields fields = null)
		{
			var parameters = new VkParameters
			{
				{ "extended", extended },
				{ "offset", offset },
				{ "type", type },
				{ "fields", fields }
			};
			if (count <= 5000)
			{
				parameters.Add("count", count);
			}
			var result = _vk.Call("apps.getFriendsList", parameters);
			totalCount = result["count"];
			return result["items"].ToReadOnlyCollectionOf<User>(x => fields == null ? new User {Id = x} : x);
		}
Beispiel #54
0
        /// <summary>
        /// Редактирует существующий список друзей текущего пользователя.
        /// </summary>
        /// <param name="listId">идентификатор списка друзей</param>
        /// <param name="name">название списка друзей</param>
        /// <param name="userIds">идентификаторы пользователей, включенных в список</param>
        /// <param name="addUserIds">идентификаторы пользователей, которых необходимо добавить в список. (в случае если не передан user_ids) </param>
        /// <param name="deleteUserIds">идентификаторы пользователей, которых необходимо изъять из списка. (в случае если не передан user_ids) </param>
        /// <returns>После успешного выполнения возвращает true.</returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/friends.editList"/>.
        /// </remarks>
        public bool EditList(long listId, string name = null, IEnumerable<long> userIds = null, IEnumerable<long> addUserIds = null, IEnumerable<long> deleteUserIds = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => listId);

            var parameters = new VkParameters
                {
                    {"name", name},
                    {"list_id", listId}
                };
            parameters.Add("user_ids", userIds);
            parameters.Add("add_user_ids", addUserIds);
            parameters.Add("delete_user_ids", deleteUserIds);

            VkResponse response = _vk.Call("friends.editList", parameters);

            return response;
        }
Beispiel #55
0
        /// <summary>
        /// Перемещает аудиозаписи в альбом.
        /// </summary>
        /// <param name="albumId">идентификатор альбома, в который нужно переместить аудиозаписи</param>
        /// <param name="audioIds">идентификаторы аудиозаписей, которые требуется переместить</param>
        /// <param name="groupId">идентификатор сообщества, в котором размещены аудиозаписи. Если параметр не указан, работа ведется с аудиозаписями текущего пользователя</param>
        /// <returns>После успешного выполнения возвращает true</returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/audio.moveToAlbum"/>.
        /// </remarks>
        public bool MoveToAlbum(long albumId, IEnumerable<long> audioIds, long? groupId = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => albumId);
            VkErrors.ThrowIfNumberIsNegative(() => groupId);

            var parameters = new VkParameters
                {
                    {"album_id", albumId},
                    {"group_id", groupId}
                };
            parameters.Add("audio_ids", audioIds);

            VkResponse response = _vk.Call("audio.moveToAlbum", parameters);

            return response;
        }
Beispiel #56
0
        /// <summary>
        /// Создает новый список друзей у текущего пользователя.
        /// </summary>
        /// <param name="name">Название создаваемого списка друзей.</param>
        /// <param name="userIds">Идентификаторы пользователей, которых необходимо поместить в созданный список.</param>
        /// <returns>После успешного выполнения возвращает идентификатор созданного списка друзей.</returns>
        /// <remarks>
        /// Для вызова этого метода Ваше приложение должно иметь права с битовой маской, содержащей <see cref="Settings.Friends"/>.
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/friends.addList"/>.
        /// </remarks>
        public long AddList(string name, IEnumerable<long> userIds)
        {
            VkErrors.ThrowIfNullOrEmpty(() => name);

            var parameters = new VkParameters
                {
                    {"name", name}
                };
            parameters.Add("user_ids", userIds);

            VkResponse response = _vk.Call("friends.addList", parameters);

            return response["lid"];
        }
Beispiel #57
0
        public ReadOnlyCollection<ulong> GetMembers(string gid, out int totalCount, uint? count = null, uint? offset = null, GroupsSort sort = null, GroupsFields fields = null, GroupsFilters filters = null)
        {
            var parameters = new VkParameters
            {
                { "gid", gid },
                { "offset", offset },
                { "sort", sort },
                { "fields", fields },
                { "filter", filters }
            };

            if (count.HasValue && count.Value > 0 && count.Value < 1000)
            {
                parameters.Add("count", count);
            }

            var response = _vk.Call("groups.getMembers", parameters, true);

            totalCount = response["count"];

            VkResponseArray users = response["users"];
            return users.ToReadOnlyCollectionOf<ulong>(x => x);
        }
Beispiel #58
0
		public bool DeleteDialog(long userId, bool isChat, long? peerId = null, uint? offset = null, uint? count = null)
		{
			var parameters = new VkParameters
			{
				{ isChat ? "chat_id" : "user_id", userId },
				{ "offset", offset },
				{ "peer_id", peerId }
			};
			if (count <= 10000)
			{
				parameters.Add("count", count);
			}
			return _vk.Call("messages.deleteDialog", parameters);
		}
Beispiel #59
0
        public ReadOnlyCollection<Message> Get(
            MessageType type,
            out int totalCount,
            int? count = null,
            int? offset = null,
            TimeSpan? timeOffset = null,
            MessagesFilter? filter = null,
            int? previewLength = null,
            long? lastMessageId = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => count);
            VkErrors.ThrowIfNumberIsNegative(() => offset);
            VkErrors.ThrowIfNumberIsNegative(() => previewLength);
            VkErrors.ThrowIfNumberIsNegative(() => lastMessageId);

            var parameters = new VkParameters
                             {
                                 { "out", type },
                                 { "offset", offset },
                                 { "count", count },
                                 { "filters", filter },
                                 { "preview_length", previewLength },
                                 { "last_message_id", lastMessageId }
                             };
            if (timeOffset.HasValue)
                parameters.Add("time_offset", timeOffset.Value.TotalSeconds);

            VkResponse response = _vk.Call("messages.get", parameters);
            totalCount = response["count"];

            return response["items"].ToReadOnlyCollectionOf<Message>(item => item);
        }
Beispiel #60
0
		public bool SetSilenceMode([NotNull] string token, int? time = null, int? chatID = null, int? userID = null, bool? sound = null)
		{
			VkErrors.ThrowIfNullOrEmpty(() => token);

			var parameters = new VkParameters
							{
								{"token", token},
								{"time", time},
								{"chat_id", chatID},
								{"user_id", userID}
							};
			if(sound.HasValue)
				parameters.Add("sound", sound.Value);  // Cause Add(string, bool?) deletes parameter whem bool? value equals to false.

			return _vk.Call("account.setSilenceMode", parameters);
		}