示例#1
0
        public ReadOnlyCollection<Message> Get(
            MessageType type,
            out int totalCount,
            int? count = null,
            int? offset = null,
            DateTime? 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 },
                                 { "time_offset", timeOffset},
                                 { "filters", filter },
                                 { "preview_length", previewLength },
                                 { "last_message_id", lastMessageId }
                             };

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

            VkResponseArray items = response["items"];
            return items.ToReadOnlyCollectionOf<Message>(item => item);
        }
示例#2
0
		public bool Leave(long groupId)
		{
			var parameters = new VkParameters {
				{ "group_id", groupId }
			};

			return _vk.Call("groups.leave", parameters);
		}
示例#3
0
		public bool IsAppUser(long? userId)
		{
			var parameters = new VkParameters {
				{ "user_id", userId }
			};

			return _vk.Call("users.isAppUser", parameters);
		}
示例#4
0
 public bool AddGroup(ulong groupId)
 {
     var parameters = new VkParameters
     {
         { "group_id", groupId }
     };
     return _vk.Call("fave.addGroup", parameters);
 }
示例#5
0
        public LinkAccessType CheckLink([NotNull] string url)
        {
            VkErrors.ThrowIfNullOrEmpty(() => url);

            var parameters = new VkParameters { {"url", url} };

            return _vk.Call("utils.checkLink", parameters, true);
        }
示例#6
0
        public VkObject ResolveScreenName([NotNull] string screenName)
        {
            VkErrors.ThrowIfNullOrEmpty(() => screenName);

            var parameters = new VkParameters {{"screen_name", screenName}};

            return _vk.Call("utils.resolveScreenName", parameters, true);
        }
示例#7
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);
        }
示例#8
0
 public bool ApproveRequest(ulong groupId, ulong userId)
 {
     var parameters = new VkParameters
     {
         { "group_id", groupId },
         { "user_id", userId }
     };
     return _vk.Call("groups.approveRequest", parameters);
 }
示例#9
0
		public Lyrics GetLyrics(long lyricsId)
		{
			var parameters = new VkParameters
			{
				{ "lyrics_id", lyricsId }
			};

			return _vk.Call("audio.getLyrics", parameters);
		}
示例#10
0
		public long GetCount(long ownerId)
		{
			var parameters = new VkParameters
			{
				{ "owner_id", ownerId }
			};

			return _vk.Call("audio.getCount", parameters);
		}
示例#11
0
		public bool Join(long? groupId, bool? notSure = null)
		{
			var parameters = new VkParameters {
				{ "group_id", groupId },
				{ "not_sure", notSure }
			};

			return _vk.Call("groups.join", parameters);
		}
示例#12
0
        /// <summary>
        /// Добавляет пользователя в черный список.
        /// </summary>
        /// <param name="userId">Идентификатор пользователя, которого нужно добавить в черный список. положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
        /// <returns>
        /// В случае успеха метод вернет <c>true</c>.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/account.banUser" />.
        /// </remarks>
        public bool BanUser(long userId)
        {
            VkErrors.ThrowIfNumberIsNegative(() => userId);
            var parameters = new VkParameters {
                { "user_id", userId }
            };

            return _vk.Call("account.banUser", parameters);
        }
示例#13
0
 public bool AddLink(Url link, string text)
 {
     var parameters = new VkParameters
     {
         { "link", link.Value },
         { "text", text }
     };
     return _vk.Call("fave.addLink", parameters);
 }
示例#14
0
        /// <summary>
        /// Создаёт беседу с несколькими участниками. 
        /// </summary>
        /// <param name="userIds">Идентификаторы пользователей, которых нужно включить в беседу (мультидиалог).</param>
        /// <param name="title">Название беседы.</param>
        /// <returns>После успешного выполнения возвращает идентификатор созданной беседы.</returns>
        /// <remarks>
        /// Для вызова этого метода Ваше приложение должно иметь права с битовой маской, содержащей <see cref="Settings.Messages"/>. 
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/messages.createChat"/>.
        /// </remarks>
        public long CreateChat(IEnumerable<long> userIds, [NotNull] string title)
        {
            if (string.IsNullOrEmpty(title))
                throw new ArgumentException("Title can not be empty or null.", "userIds");

            var parameters = new VkParameters { { "uids", userIds }, { "title", HttpUtility.UrlEncode(title) } };

            return _vk.Call("messages.createChat", parameters);
        }
示例#15
0
        public int Add(long owner_id, long doc_id, string access_key = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => owner_id);
            VkErrors.ThrowIfNumberIsNegative(() => doc_id);

            var parameters = new VkParameters { { "owner_id", owner_id }, { "doc_id", doc_id }, { "access_key", access_key } };

            return _vk.Call("docs.add", parameters);
        }
示例#16
0
 public bool DeleteBan(IEnumerable<ulong> userIds, IEnumerable<ulong> groupIds)
 {
     var parameters = new VkParameters
     {
         { "user_ids", userIds },
         { "group_ids", groupIds }
     };
     return _vk.Call("newsfeed.deleteBan", parameters);
 }
示例#17
0
		public VkCollection<Market> GetById(IEnumerable<string> itemIds, bool extended = false)
		{
			var parameters = new VkParameters {
				{ "item_ids", itemIds },
				{ "extended", extended }
			};

			return _vk.Call("market.getById", parameters).ToVkCollectionOf<Market>(x => x);
		}
示例#18
0
        public Status Get(long userId, long? groupId = null)
        {
            var parameters = new VkParameters {
                { "user_id", userId },
                { "group_id", groupId }
            };

            return _vk.Call("status.get", parameters);
        }
示例#19
0
        public bool ClearCache(Uri url)
        {
            var parameters = new VkParameters
            {
                { "url", url }
            };

            return _vk.Call("pages.clearCache", parameters);
        }
示例#20
0
 public Link AddLink(ulong groupId, Url link, string text)
 {
     var parameters = new VkParameters
     {
         { "group_id", groupId },
         { "link", link.Value },
         { "text", text }
     };
     return _vk.Call("groups.addLink", parameters);
 }
示例#21
0
文件: WallCategory.cs 项目: vknet/vk
        /// <summary>
        /// Удаляет запись со стены.
        /// </summary>
        /// <param name="ownerId">Идентификатор пользователя или сообщества, на стене которого находится запись. Обратите внимание, идентификатор сообщества в параметре owner_id необходимо указывать со знаком "-" — например, owner_id=-1 соответствует идентификатору сообщества ВКонтакте API (club1)  целое число, по умолчанию идентификатор текущего пользователя (Целое число, по умолчанию идентификатор текущего пользователя).</param>
        /// <param name="postId">Идентификатор записи на стене. положительное число (Положительное число).</param>
        /// <returns>
        /// После успешного выполнения возвращает <c>true</c>.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/wall.delete" />.
        /// </remarks>
        public bool Delete(long? ownerId = null, long? postId = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => postId);
            var parameters = new VkParameters {
                { "owner_id", ownerId },
                { "post_id", postId }
            };

            return _vk.Call("wall.delete", parameters);
        }
示例#22
0
文件: DocsCategory.cs 项目: Bobruk/vk
        public int Delete(long owner_id, long doc_id)
        {
            VkErrors.ThrowIfNumberIsNegative(() => owner_id);
            VkErrors.ThrowIfNumberIsNegative(() => doc_id);

            var parameters = new VkParameters { { "owner_id", doc_id }, { "doc_id", doc_id } };

            VkResponse response = _vk.Call("docs.delete", parameters);
            return response;
        }
示例#23
0
文件: PhotoCategory.cs 项目: vknet/vk
        /// <summary>
        /// Подтверждает отметку на фотографии.
        /// </summary>
        /// <param name="ownerId">Идентификатор пользователя или сообщества, которому принадлежит фотография. Обратите внимание, идентификатор сообщества в параметре owner_id необходимо указывать со знаком "-" — например, owner_id=-1 соответствует идентификатору сообщества ВКонтакте API (club1)  целое число, по умолчанию идентификатор текущего пользователя (Целое число, по умолчанию идентификатор текущего пользователя).</param>
        /// <param name="photoId">Идентификатор фотографии. обязательный параметр (Обязательный параметр).</param>
        /// <param name="tagId">Идентификатор отметки на фотографии. целое число, обязательный параметр (Целое число, обязательный параметр).</param>
        /// <returns>
        /// После успешного выполнения возвращает <c>true</c>.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/photos.confirmTag" />.
        /// </remarks>
        public bool ConfirmTag(ulong photoId, ulong tagId, long? ownerId = null)
        {
            var parameters = new VkParameters {
                { "owner_id", ownerId },
                { "photo_id", photoId },
                { "tag_id", tagId }
            };

            return _vk.Call("photos.confirmTag", parameters);
        }
示例#24
0
        public ReadOnlyCollection<Country> GetCountries(bool needAll = true, string codes = "", int? count = null, int? offset = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => offset);
            VkErrors.ThrowIfNumberIsNegative(() => count);

            var parameters = new VkParameters { { "code", codes }, { "offset", offset }, { "count", count }, { "need_all", needAll } };

            VkResponseArray response = _vk.Call("database.getCountries", parameters, true);
            return response.ToReadOnlyCollectionOf<Country>(x => x);
        }
示例#25
0
 public bool CheckPhone(string phone, long clientId, string clientSecret)
 {
     var parameters = new VkParameters
     {
         { "phone", phone },
         { "client_id", clientId },
         { "client_secret", clientSecret }
     };
     return _vk.Call("auth.checkPhone", parameters);
 }
示例#26
0
		public bool SetNameInMenu([NotNull] string name, long? userId = null)
		{
			VkErrors.ThrowIfNullOrEmpty(() => name);
			var parameters = new VkParameters
			{
				{ "name", name },
				{ "user_id", userId}
			};
			return _vk.Call("account.setNameInMenu", parameters);
		}
示例#27
0
        /// <summary>
        /// Устанавливает новый статус текущему пользователю. 
        /// </summary>
        /// <param name="text">
        /// Текст статуса, который необходимо установить текущему пользователю. Если параметр 
        /// равен пустой строке, то статус текущего пользователя будет очищен.
        /// </param>
        /// <param name="groupId"> Идентификатор сообщества, в котором будет установлен статус. По умолчанию статус устанавливается текущему пользователю. </param>
        /// <returns>Возвращает true, если статус был успешно установлен, false в противном случае.</returns>
        /// <remarks>
        /// Для вызова этого метода Ваше приложение должно иметь права с битовой маской, содержащей <see cref="Settings.Status"/>. 
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/status.set"/>.
        /// </remarks>
        public bool Set(string text, long? groupId = null)
        {
            var parameters = new VkParameters
            {
                { "text", text },
                { "group_id", groupId }
            };

            return _vk.Call("status.set", parameters);
        }
示例#28
0
        public VkObject ResolveScreenName([NotNull] string screenName)
        {
            VkErrors.ThrowIfNullOrEmpty(() => screenName);

            var parameters = new VkParameters {{"screen_name", screenName}};

            VkResponse response = _vk.Call("utils.resolveScreenName", parameters, true);

            if (response == null) return null;
            return response;
        }
示例#29
0
文件: PhotoCategory.cs 项目: vknet/vk
        /// <summary>
        /// Позволяет скопировать фотографию в альбом "Сохраненные фотографии".
        /// </summary>
        /// <param name="ownerId">Идентификатор владельца фотографии целое число, обязательный параметр (Целое число, обязательный параметр).</param>
        /// <param name="photoId">Индентификатор фотографии положительное число, обязательный параметр (Положительное число, обязательный параметр).</param>
        /// <param name="accessKey">Специальный код доступа для приватных фотографий строка (Строка).</param>
        /// <returns>
        /// Возвращает идентификатор созданной фотографии.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/photos.copy" />.
        /// </remarks>
        public long Copy(long ownerId, ulong photoId, string accessKey = null)
        {
            var parameters = new VkParameters
            {
                {"owner_id", ownerId},
                {"photo_id", photoId},
                {"access_key", accessKey}
            };

            return _vk.Call("photos.copy", parameters);
        }
示例#30
0
文件: AuthCategory.cs 项目: vknet/vk
        /// <summary>
        /// Проверяет правильность введённого номера.
        /// </summary>
        /// <param name="phone">Номер телефона регистрируемого пользователя. строка, обязательный параметр (Строка, обязательный параметр).</param>
        /// <param name="clientId">Идентификатор Вашего приложения. целое число (Целое число).</param>
        /// <param name="clientSecret">Секретный ключ приложения, доступный в разделе редактирования приложения. строка, обязательный параметр (Строка, обязательный параметр).</param>
        /// <param name="authByPhone">Флаг, может принимать значения 1 или 0 (Флаг, может принимать значения 1 или 0).</param>
        /// <returns>
        /// В случае, если номер пользователя является правильным, будет возвращён <c>true</c>.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/auth.checkPhone" />.
        /// </remarks>
        public bool CheckPhone(string phone, string clientSecret, long? clientId = null, bool? authByPhone = null)
        {
            var parameters = new VkParameters {
                { "phone", phone },
                { "client_id", clientId },
                { "client_secret", clientSecret },
                { "auth_by_phone", authByPhone }
            };

            return _vk.Call("auth.checkPhone", parameters);
        }
示例#31
0
        /// <summary>
        /// Привести к типу VkParameters.
        /// </summary>
        /// <param name="p">Параметры.</param>
        /// <returns></returns>
        public static VkParameters ToVkParameters(WallGetCommentsParams p)
        {
            var parameters = new VkParameters
            {
                { "owner_id", p.OwnerId },
                { "post_id", p.PostId },
                { "need_likes", p.NeedLikes },
                { "start_comment_id", p.StartCommentId },
                { "offset", p.Offset },
                { "count", p.Count },
                { "sort", p.Sort },
                { "preview_length", p.PreviewLength },
                { "extended", p.Extended },
                { "fields", p.Fields }
            };

            return(parameters);
        }
示例#32
0
        public async Task <ReadOnlyCollection <User> > GetAsync([NotNull] IEnumerable <string> screenNames, ProfileFields fields = null, NameCase nameCase = null)
        {
            if (screenNames == null)
            {
                throw new ArgumentNullException("screenNames");
            }

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

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

            return(response.ToReadOnlyCollectionOf <User>(x => x));
        }
示例#33
0
        public VkCollection <University> GetUniversities(int countryId, int cityId, string query = "", int?count = null, int?offset = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => countryId);
            VkErrors.ThrowIfNumberIsNegative(() => cityId);
            VkErrors.ThrowIfNumberIsNegative(() => count);
            VkErrors.ThrowIfNumberIsNegative(() => offset);

            var parameters = new VkParameters
            {
                { "q", query },
                { "country_id", countryId },
                { "city_id", cityId },
                { "offset", offset },
                { "count", count }
            };

            return(_vk.Call("database.getUniversities", parameters, true).ToVkCollectionOf <University>(x => x));
        }
示例#34
0
        public ReadOnlyCollection <Group> GetSubscriptions(long?userId = null, int?count = null, int?offset = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => userId);
            VkErrors.ThrowIfNumberIsNegative(() => count);
            VkErrors.ThrowIfNumberIsNegative(() => offset);

            var parameters = new VkParameters
            {
                { "user_id", userId },
                { "extended", true },
                { "offset", offset },
                { "count", count }
            };

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

            return(response.ToReadOnlyCollectionOf <Group>(x => x));
        }
示例#35
0
        /// <summary>
        /// Привести к типу VkParameters.
        /// </summary>
        /// <param name="p">Параметры.</param>
        /// <returns></returns>
        public static VkParameters ToVkParameters(PhotoEditParams p)
        {
            var parameters = new VkParameters
            {
                { "owner_id", p.OwnerId },
                { "photo_id", p.PhotoId },
                { "caption", WebUtilityHelper.UrlEncode(p.Caption) },
                { "latitude", p.Latitude },
                { "longitude", p.Longitude },
                { "place_str", p.PlaceStr },
                { "foursquare_id", p.FoursquareId },
                { "delete_place", p.DeletePlace },
                { "captcha_sid", p.CaptchaSid },
                { "captcha_key", p.CaptchaKey }
            };

            return(parameters);
        }
示例#36
0
        public ReadOnlyCollection <User> Get([NotNull] IEnumerable <long> userIds, ProfileFields fields = null, NameCase nameCase = null, bool skipAuthorization = true)
        {
            if (userIds == null)
            {
                throw new ArgumentNullException("userIds");
            }

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

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

            return(response.ToReadOnlyCollectionOf <User>(x => x));
        }
示例#37
0
        /// <summary>
        /// Возвращает список аудиозаписей из раздела "Популярное".
        /// </summary>
        /// <param name="onlyEng">
        /// 1 – возвращать только зарубежные аудиозаписи. 0 – возвращать все аудиозаписи.
        /// (по умолчанию)
        /// флаг, может принимать значения 1 или 0 (Флаг, может принимать значения 1 или
        /// 0).
        /// </param>
        /// <param name="genre">
        /// Идентификатор жанра из списка жанров. положительное число
        /// (Положительное число).
        /// </param>
        /// <param name="offset">
        /// Смещение, необходимое для выборки определенного подмножества аудиозаписей.
        /// положительное число
        /// (Положительное число).
        /// </param>
        /// <param name="count">
        /// Количество возвращаемых аудиозаписей. положительное число, максимальное
        /// значение 1000, по умолчанию
        /// 100 (Положительное число, максимальное значение 1000, по умолчанию 100).
        /// </param>
        /// <returns>
        /// После успешного выполнения возвращает список объектов audio. Обратите внимание,
        /// что ссылки на аудиозаписи привязаны
        /// к ip адресу.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте http://vk.com/dev/audio.getPopular
        /// </remarks>
        public ReadOnlyCollection <Audio> GetPopular(bool onlyEng = false, AudioGenre?genre = null, uint?count = null, uint?offset = null)
        {
            var parameters = new VkParameters
            {
                { "only_eng", onlyEng }
                , { "genre_id", genre }
                , { "offset", offset }
            };

            if (count <= 1000)
            {
                parameters.Add(name: "count", nullableValue: count);
            }

            VkResponseArray response = _vk.Call(methodName: "audio.getPopular", parameters: parameters);

            return(response.ToReadOnlyCollectionOf <Audio>(selector: x => x));
        }
示例#38
0
        public Audio Save(string response, string artist = null, string title = null)
        {
            VkErrors.ThrowIfNullOrEmpty(() => response);
            var responseJson = JObject.Parse(response);
            var server       = responseJson["server"].ToString();
            var hash         = responseJson["hash"].ToString();
            var audio        = responseJson["audio"].ToString();
            var parameters   = new VkParameters
            {
                { "server", server },
                { "audio", HttpUtility.UrlEncode(audio) },
                { "hash", hash },
                { "artist", artist },
                { "title", title }
            };

            return(_vk.Call("audio.save", parameters));
        }
示例#39
0
        public async static Task <Models.Music.BlockInfo.Block> GetById(string id, long count = 100, long offset = 0)
        {
            var parameters = new VkParameters();

            parameters.Add("count", count);
            parameters.Add("extended", 1);
            parameters.Add("block_id", id);
            parameters.Add("https", 1);
            parameters.Add("start_from", "");
            parameters.Add("lang", "ru");
            parameters.Add("access_token", StaticContent.VkApi.Token);
            parameters.Add("v", "5.103");
            var json = await StaticContent.VkApi.InvokeAsync("audio.getCatalogBlockById", parameters);

            var blockModel = JsonConvert.DeserializeObject <Response <Models.Music.BlockInfo.ResponseItem> >(json);

            return(blockModel.response.Block);
        }
示例#40
0
        /// <summary>
        /// Редактирует запись на стене.
        /// </summary>
        /// <param name="postId">Идентификатор записи, которую необходимо отредактировать.</param>
        /// <param name="ownerId">Идентификатор пользователя или сообщества, на стене которого опубликована запись.</param>
        /// <param name="friendsOnly">Доступна ли запись только друзьям (по умолчанию - доступна всем).</param>
        /// <param name="message">Тескт сообщения. Обязательное поле, если список <paramref name="mediaAttachments"/> не задан или пуст.</param>
        /// <param name="mediaAttachments">Список приложенных к записи объектов.
        /// Обязательно наличие хотя бы одного элемента в списке, если <paramref name="message"/> не задано.
        /// Свойства <see cref="MediaAttachment.Id"/> и <see cref="MediaAttachment.OwnerId"/> обязательно должны быть заданы. </param>
        /// <param name="url">Ссылка на внешнюю страницу. В строке может содержаться только одна ссылка.</param>
        /// <param name="services">Список сервисов или сайтов, на которые необходимо экспортировать запись, в случае если пользователь настроил соответствующую опцию.
        ///  Например, twitter, facebook</param>
        /// <param name="signed">Добавляется ли подпись (имя опубликовавшего) к записи в группе, если запись сделана от имени группы.</param>
        /// <param name="publishDate">Дата публикации записи. Если параметр не указан, отложенная запись будет опубликована.
        /// Параметр учитывается только при редактировании отложенной записи.</param>
        /// <param name="lat">Географическая широта отметки, заданная в градусах (от -90 до 90).</param>
        /// <param name="long">Географическая долгота отметки, заданная в градусах (от -180 до 180).</param>
        /// <param name="placeId">Идентификатор места, в котором отмечен пользователь (положительное число).</param>
        /// <returns>Результат выполнения редактирования.</returns>
        /// <remarks>
        /// Для вызова этого метода Ваше приложение должно иметь права с битовой маской, содержащей <see cref="Settings.Wall"/>.
        /// Страница документации ВКонтакте <see href="http://vk.com/dev/wall.edit"/>.
        /// </remarks>
        public bool Edit(long postId, long?ownerId = null, bool friendsOnly = false,
                         string message            = null, IEnumerable <MediaAttachment> mediaAttachments = null, string url = null,
                         string services           = null, bool signed = false, DateTime?publishDate = null,
                         double?lat = null, double? @long              = null, long?placeId          = null)
        {
            if (string.IsNullOrEmpty(message) && (mediaAttachments == null || !mediaAttachments.Any()) && string.IsNullOrEmpty(url))
            {
                throw new ArgumentException("Message and attachments cannot be null or empty at the same time.");
            }
            VkErrors.ThrowIfNumberIsNegative(() => placeId);
            VkErrors.ThrowIfNumberIsNegative(() => postId);
            if (lat.HasValue && (Math.Abs(lat.Value) > 90))
            {
                throw new ArgumentOutOfRangeException("lat", lat, "lat must be at range from -90 to 90");
            }
            if (@long.HasValue && (Math.Abs(@long.Value) > 180))
            {
                throw new ArgumentOutOfRangeException("long", @long, "long must be at range from -90 to 90");
            }

            var attachments = mediaAttachments.JoinNonEmpty();

            if (!string.IsNullOrEmpty(url))
            {
                attachments += (attachments.Length > 0 ? "," : string.Empty) + url;
            }

            var parameters = new VkParameters
            {
                { "post_id", postId },
                { "owner_id", ownerId },
                { "friends_only", friendsOnly },
                { "message", message },
                { "attachments", attachments },
                { "services", services },
                { "signed", signed },
                { "publish_date", publishDate },
                { "lat", lat },
                { "long", @long },
                { "place_id", placeId }
            };

            return(_vk.Call("wall.edit", parameters));
        }
示例#41
0
        /// <inheritdoc />
        public ReadOnlyCollection <GroupMember> IsMember(string groupId
                                                         , long?userId
                                                         , IEnumerable <long> userIds
                                                         , bool?extended
                                                         , bool skipAuthorization = false)
        {
            if (userId.HasValue)
            {
                if (userIds != null)
                {
                    if (userIds.Any(predicate: id => id < 1))
                    {
                        throw new ArgumentException(message: "Идентификатор пользователя должен быть больше 0");
                    }

                    var tempList = userIds.ToList();
                    tempList.Add(item: userId.Value);
                    userIds = tempList;
                }
                else
                {
                    if (userId.Value < 1)
                    {
                        throw new ArgumentException(message: "Идентификатор пользователя должен быть больше 0");
                    }

                    userIds = new List <long>
                    {
                        userId.Value
                    };
                }
            }

            var parameters = new VkParameters
            {
                { "group_id", groupId }
                , { "user_ids", userIds }
                , { "extended", Convert.ToInt32(value: extended) }
            };

            var result = _vk.Call(methodName: "groups.isMember", parameters: parameters, skipAuthorization: skipAuthorization);

            return(result.ToReadOnlyCollectionOf <GroupMember>(selector: x => x));
        }
示例#42
0
        /// <inheritdoc />
        public VkCollection <User> GetInvitedUsers(long groupId
                                                   , long?offset        = null
                                                   , long?count         = null
                                                   , UsersFields fields = null
                                                   , NameCase nameCase  = null)
        {
            VkErrors.ThrowIfNumberIsNegative(expr: () => groupId);

            var parameters = new VkParameters
            {
                { "group_id", groupId }
                , { "offset", offset }
                , { "count", count }
                , { "fields", fields }
                , { "name_case", nameCase }
            };

            return(_vk.Call(methodName: "groups.getInvitedUsers", parameters: parameters).ToVkCollectionOf <User>(selector: x => x));
        }
示例#43
0
        public ReadOnlyCollection <Mention> GetMentions(out int total, long ownerId = 0, ulong?startTime = null, ulong?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));
        }
        /// <summary>
        /// Привести к типу VkParameters.
        /// </summary>
        /// <param name="p"> Параметры. </param>
        /// <returns> </returns>
        public static VkParameters ToVkParameters(AppGetCatalogParams p)
        {
            var parameters = new VkParameters
            {
                { "sort", p.Sort }
                , { "offset", p.Offset }
                , { "count", p.Count }
                , { "platform", p.Platform }
                , { "extended", p.Extended }
                , { "return_friends", p.ReturnFriends }
                , { "fields", p.Fields }
                , { "name_case", p.NameCase }
                , { "q", p.Query }
                , { "genre_id", p.GenreId }
                , { "filter", p.Filter }
            };

            return(parameters);
        }
示例#45
0
        public ReadOnlyCollection <Video> GetUserVideos(long userId, int?count = null, int?offset = null)
        {
            // throw new NotImplementedException("Метод некорректно работает на самом сервере вконтакте");

            VkErrors.ThrowIfNumberIsNegative(() => userId);
            VkErrors.ThrowIfNumberIsNegative(() => count);
            VkErrors.ThrowIfNumberIsNegative(() => offset);

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

            VkResponseArray response = _vk.Call("video.getUserVideos", parameters);

            return(response.ToReadOnlyCollectionOf <Video>(x => x));
        }
示例#46
0
        public VkCollection <City> GetCities(int countryId, int?regionId = null, string query = "", bool?needAll = false, int?count = null, int?offset = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => countryId);
            VkErrors.ThrowIfNumberIsNegative(() => regionId);
            VkErrors.ThrowIfNumberIsNegative(() => count);
            VkErrors.ThrowIfNumberIsNegative(() => offset);

            var parameters = new VkParameters
            {
                { "country_id", countryId },
                { "region_id", regionId },
                { "q", query },
                { "need_all", needAll },
                { "offset", offset },
                { "count", count }
            };

            return(_vk.Call("database.getCities", parameters, true).ToVkCollectionOf <City>(x => x));
        }
示例#47
0
        public SearchDialogsResponse SearchDialogs([NotNull] string query, ProfileFields fields = null, uint limit = 20)
        {
            if (string.IsNullOrEmpty(query))
            {
                throw new ArgumentException("Query can not be null or empty.", "query");
            }
            var parameters = new VkParameters
            {
                { "q", query },
                { "fields", fields },
                { "limit", limit }
            };

            VkResponseArray response = _vk.Call("messages.searchDialogs", parameters);

            var result = new SearchDialogsResponse();

            foreach (var record in response)
            {
                string type = record["type"];
                switch (type)
                {
                case "profile":
                {
                    result.Users.Add(record);
                    break;
                }

                case "chat":
                {
                    result.Chats.Add(record);
                    break;
                }

                case "email":
                {
                    // TODO: Add email support.
                    continue;
                }
                }
            }
            return(result);
        }
示例#48
0
        public ReadOnlyCollection <User> GetFriendsListEx(out int totalCount, AppRequestType type, int count = 20, int offset = 0, UsersFields fields = null)
        {
            var parameters = new VkParameters
            {
                { "extended", true },
                { "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 => x));
        }
示例#49
0
        public ReadOnlyCollection <Audio> GetRecommendations(long?userId = null, int?count = null, int?offset = null, bool shuffle = true, string targetAudio = "")
        {
            VkErrors.ThrowIfNumberIsNegative(() => userId);
            VkErrors.ThrowIfNumberIsNegative(() => offset);
            VkErrors.ThrowIfNumberIsNegative(() => count);

            var parameters = new VkParameters
            {
                { "target_audio", targetAudio },
                { "user_id", userId },
                { "offset", offset },
                { "count", count },
                { "shuffle", shuffle }
            };

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

            return(response.ToReadOnlyCollectionOf <Audio>(x => x));
        }
示例#50
0
        public VkCollection <User> GetFollowers(long?userId = null, int?count = null, int?offset = null, ProfileFields fields = null, NameCase nameCase = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => userId);
            VkErrors.ThrowIfNumberIsNegative(() => count);
            VkErrors.ThrowIfNumberIsNegative(() => offset);

            var parameters = new VkParameters
            {
                { "user_id", userId },
                { "offset", offset },
                { "count", count },
                { "fields", fields },
                { "name_case", nameCase }
            };

            return(_vk.Call("users.getFollowers", parameters).ToVkCollectionOf(x => x.ContainsKey("id") ? x : new User {
                Id = x
            }));
        }
示例#51
0
        public int GetExtended(long ownerId, out ReadOnlyCollection <Post> wallPosts, out ReadOnlyCollection <User> profiles, out ReadOnlyCollection <Group> groups, int?count = null, int?offset = null, WallFilter filter = WallFilter.All)
        {
            VkErrors.ThrowIfNumberIsNegative(() => count);
            VkErrors.ThrowIfNumberIsNegative(() => offset);
            if (filter == WallFilter.Suggests && ownerId >= 0)
            {
                throw new ArgumentException("OwnerID must be negative in case filter equal to Suggests", "ownerId");
            }

            var parameters = new VkParameters {
                { "owner_id", ownerId }, { "count", count }, { "offset", offset }, { "filter", filter.ToString().ToLowerInvariant() }, { "extended", 1 }
            };
            var response = _vk.Call("wall.get", parameters);

            wallPosts = response["items"].ToReadOnlyCollectionOf <Post>(r => r);
            profiles  = response["profiles"].ToReadOnlyCollectionOf <User>(r => r);
            groups    = response["groups"].ToReadOnlyCollectionOf <Group>(r => r);
            return(response["count"]);
        }
示例#52
0
        public VkCollection <Country> GetCountries(bool?needAll = null
                                                   , IEnumerable <Iso3166> codes = null
                                                   , int?count  = null
                                                   , int?offset = null)
        {
            VkErrors.ThrowIfNumberIsNegative(expr: () => offset);
            VkErrors.ThrowIfNumberIsNegative(expr: () => count);

            var parameters = new VkParameters
            {
                { "code", codes }
                , { "offset", offset }
                , { "count", count }
                , { "need_all", needAll }
            };

            return(_vk.Call(methodName: "database.getCountries", parameters: parameters, skipAuthorization: true)
                   .ToVkCollectionOf <Country>(selector: x => x));
        }
示例#53
0
        public ReadOnlyCollection <Photo> GetProfile(long?ownerId = null, IEnumerable <long> photoIds = null, bool?rev = null, bool?extended = null, string feedType = null, DateTime?feed = null, bool?photoSizes = null, ulong?count = null, ulong?offset = null)
        {
            var parameters = new VkParameters
            {
                { "owner_id", ownerId },
                { "photo_ids", photoIds },
                { "rev", rev },
                { "extended", extended },
                { "feed_type", feedType },
                { "feed", feed },
                { "photo_sizes", photoSizes },
                { "count", count },
                { "offset", offset }
            };

            VkResponseArray response = _vk.Call("photos.getProfile", parameters);

            return(response.ToReadOnlyCollectionOf <Photo>(x => x));
        }
示例#54
0
        /// <summary>
        /// Привести к типу VkParameters.
        /// </summary>
        /// <param name="p">Параметры.</param>
        /// <returns></returns>
        public static VkParameters ToVkParameters(AuthSignupParams p)
        {
            var parameters = new VkParameters
            {
                { "first_name", p.FirstName },
                { "last_name", p.LastName },
                { "birthday", p.Birthday },
                { "client_id", p.ClientId },
                { "client_secret", p.ClientSecret },
                { "phone", p.Phone },
                { "password", p.Password },
                { "test_mode", p.TestMode },
                { "voice", p.Voice },
                { "sex", p.Sex },
                { "sid", p.Sid }
            };

            return(parameters);
        }
示例#55
0
        /// <summary>
        /// Привести к типу VkParameters.
        /// </summary>
        /// <param name="p"> Параметры. </param>
        /// <returns> </returns>
        public static VkParameters ToVkParameters(PostAdsStealthParams p)
        {
            var parameters = new VkParameters
            {
                { "owner_id", p.OwnerId }
                , { "message", p.Message }
                , { "attachments", p.Attachments }
                , { "signed", p.Signed }
                , { "lat", p.Lat }
                , { "long", p.Long }
                , { "place_id", p.PlaceId }
                , { "link_title", p.LinkTitle }
                , { "link_image", p.LinkImage }
                , { "guid", p.Guid }
                , { "link_button", p.LinkButton }
            };

            return(parameters);
        }
示例#56
0
        private async Task <AuthorizationResult> BaseAuthAsync()
        {
            try
            {
                var parameters = new VkParameters
                {
                    { "grant_type", "password" },
                    { "client_id", "2274003" },
                    { "client_secret", "hHbZxrka2uZ6jB1inYsH" },
                    { "2fa_supported", _apiAuthParams.TwoFactorSupported ?? true },
                    { "force_sms", _apiAuthParams.ForceSms },
                    { "username", _apiAuthParams.Login },
                    { "password", _apiAuthParams.Password },
                    { "code", _apiAuthParams.Code },
                    { "scope", "all" },
                    { "device_id", RandomString.Generate(16) }
                };

                return(await _vkApiInvoker.CallAsync <AuthorizationResult>(new Uri("https://oauth.vk.com/token"), parameters).ConfigureAwait(false));
            }
            catch (VkAuthException exception)
            {
                switch (exception.AuthError.Error)
                {
                case "need_validation":
                    _logger?.LogDebug("Требуется ввести код двухфакторной авторизации");

                    if (_apiAuthParams.TwoFactorAuthorization == null)
                    {
                        throw new
                              InvalidOperationException($"Two-factor authorization required, but {nameof(_apiAuthParams.TwoFactorAuthorization)} callback is null. Set {nameof(_apiAuthParams.TwoFactorAuthorization)} callback to handle two-factor authorization.");
                    }

                    var result = _apiAuthParams.TwoFactorAuthorization();
                    _apiAuthParams.Code = result;

                    return(await BaseAuthAsync().ConfigureAwait(false));

                default:
                    throw;
                }
            }
        }
示例#57
0
        /// <summary>
        /// Привести к типу VkParameters.
        /// </summary>
        /// <param name="p">Параметры.</param>
        /// <returns></returns>
        public static VkParameters ToVkParameters(VideoSaveParams p)
        {
            var parameters = new VkParameters
            {
                { "name", p.Name },
                { "description", p.Description },
                { "is_private", p.IsPrivate },
                { "wallpost", p.Wallpost },
                { "link", p.Link },
                { "group_id", p.GroupId },
                { "album_id", p.AlbumId },
                { "privacy_view", p.PrivacyView },
                { "privacy_comment", p.PrivacyComment },
                { "no_comments", p.NoComments },
                { "repeat", p.Repeat }
            };

            return(parameters);
        }
示例#58
0
        /// <summary>
        /// Привести к типу VkParameters.
        /// </summary>
        /// <param name="p">Параметры.</param>
        /// <returns></returns>
        public static VkParameters ToVkParameters(VideoSearchParams p)
        {
            var parameters = new VkParameters
            {
                { "q", p.Query },
                { "sort", p.Sort },
                { "hd", p.Hd },
                { "adult", p.Adult },
                { "filters", p.Filters },
                { "search_own", p.SearchOwn },
                { "offset", p.Offset },
                { "longer", p.Longer },
                { "shorter", p.Shorter },
                { "count", p.Count },
                { "extended", p.Extended }
            };

            return(parameters);
        }
示例#59
0
        /// <summary>
        /// Привести к типу VkParameters.
        /// </summary>
        /// <param name="p">Параметры.</param>
        /// <returns></returns>
        internal static VkParameters ToVkParameters(WallEditParams p)
        {
            var parameters = new VkParameters
            {
                { "owner_id", p.OwnerId },
                { "post_id", p.PostId },
                { "friends_only", p.FriendsOnly },
                { "message", p.Message },
                { "attachments", p.Attachments },
                { "services", p.Services },
                { "signed", p.Signed },
                { "publish_date", p.PublishDate },
                { "lat", p.Lat },
                { "long", p.Long },
                { "place_id", p.PlaceId }
            };

            return(parameters);
        }
示例#60
0
        /// <summary>
        /// Редактирует существующий список друзей текущего пользователя.
        /// </summary>
        /// <param name="name"> Название списка друзей. строка (Строка). </param>
        /// <param name="listId">
        /// Идентификатор списка друзей. положительное число, обязательный параметр
        /// (Положительное число,
        /// обязательный параметр).
        /// </param>
        /// <param name="userIds">
        /// Идентификаторы пользователей, включенных в список. список положительных чисел,
        /// разделенных
        /// запятыми (Список положительных чисел, разделенных запятыми).
        /// </param>
        /// <param name="addUserIds">
        /// Идентификаторы пользователей, которых необходимо добавить в список. (в случае
        /// если не передан
        /// user_ids) список положительных чисел, разделенных запятыми (Список
        /// положительных чисел, разделенных запятыми).
        /// </param>
        /// <param name="deleteUserIds">
        /// Идентификаторы пользователей, которых необходимо изъять из списка. (в случае
        /// если не
        /// передан user_ids) список положительных чисел, разделенных запятыми (Список
        /// положительных чисел, разделенных
        /// запятыми).
        /// </param>
        /// <returns>
        /// После успешного выполнения возвращает 1.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте 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(expr: () => listId);

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

            return(_vk.Call(methodName: "friends.editList", parameters: parameters));
        }