internal static VkDialog FromJson(JToken json) { if (json == null) { throw new Exception("Json can't be null"); } var result = new VkDialog(); if (json["unread"] != null) { result.Unread = (int)json["unread"]; } if (json["message"] != null) { result.Message = VkMessage.FromJson(json["message"]); } return(result); }
public static VkLongPollMessage FromJson(JArray json) { var result = new VkLongPollMessage(); result.Parameters = new Dictionary<string, object>(); var messageType = json[0].Value<string>(); switch (messageType) { //удаление сообщения с указанным local_id case "0": result.Type = VkLongPollMessageType.MessageDelete; result.Parameters.Add("message_id", json[1].Value<string>()); break; //замена флагов сообщения case "1": result.Type = VkLongPollMessageType.MessageUpdate; result.Parameters.Add("message_id", json[1].Value<string>()); result.Parameters.Add("flags", json[2].Value<int>()); break; //установка флагов сообщения case "2": result.Type = VkLongPollMessageType.MessageFlagSet; result.Parameters.Add("message_id", json[1].Value<string>()); result.Parameters.Add("flags", json[2].Value<int>()); if (json.Count > 2) result.Parameters.Add("user_id", json[3].Value<string>()); break; //сброс флагов сообщения case "3": result.Type = VkLongPollMessageType.MessageFlagReset; result.Parameters.Add("message_id", json[1].Value<string>()); result.Parameters.Add("flags", json[2].Value<int>()); if (json.Count > 2) result.Parameters.Add("user_id", json[3].Value<string>()); break; //добавление нового сообщения case "4": result.Type = VkLongPollMessageType.MessageAdd; var m = new VkMessage(); m.Id = json[1].Value<long>(); var flags = json[2].Value<int>(); var uid = json[3].Value<long>(); if (uid >= ChatIdMask) { //беседа result.Parameters.Add("conversation", "1"); m.ChatId = (uid - ChatIdMask); } else { m.UserId = uid; } m.Date = DateTimeExtensions.UnixTimeStampToDateTime(json[4].Value<double>()).ToLocalTime(); m.Title = json[5].Value<string>(); m.Body = json[6].Value<string>(); result.Parameters.Add("message", m); result.Parameters.Add("flags", flags); //TODO forwards & attachments break; //друг стал онлайн case "8": result.Type = VkLongPollMessageType.FriendOnline; result.Parameters.Add("user_id", json[1].Value<string>().Substring(1)); break; //друг стал оффлайн case "9": result.Type = VkLongPollMessageType.FriendOffline; result.Parameters.Add("user_id", json[1].Value<string>().Substring(1)); break; //один из параметров (состав, тема) беседы был изменен case "51": result.Type = VkLongPollMessageType.ConversationChange; result.Parameters.Add("chat_id", json[1].Value<string>()); result.Parameters.Add("self", json[2].Value<string>() == "1"); break; //пользователь начал набирать текст в диалоге case "61": result.Type = VkLongPollMessageType.DialogUserTyping; result.Parameters.Add("user_id", json[1].Value<string>()); break; //пользователь начал набирать текст в беседе case "62": result.Type = VkLongPollMessageType.ConsersationUserTyping; result.Parameters.Add("user_id", json[1].Value<string>()); result.Parameters.Add("chat_id", json[2].Value<string>()); break; default: result.Type = VkLongPollMessageType.Unknown; break; } return result; }
public async Task <VkItemsResponse <VkMessage> > GetById(IEnumerable <long> messageIds, int previewLength = 0) { var parametres = new Dictionary <string, string>(); if (messageIds != null) { parametres.Add("message_ids", string.Join(",", messageIds)); } if (previewLength > 0) { parametres.Add("preview_length", previewLength.ToString()); } _vkontakte.SignMethod(parametres); var response = await VkRequest.GetAsync(VkConst.MethodBase + "messages.getById", parametres); if (response.SelectToken("response.items") != null) { return(new VkItemsResponse <VkMessage>(response["response"]["items"].Select(i => VkMessage.FromJson(i, _vkontakte.ApiVersion)).ToList(), (int)response["response"]["count"])); } return(VkItemsResponse <VkMessage> .Empty); }
public async Task <VkItemsResponse <VkMessage> > GetHistory(long userId, long chatId = 0, int offset = 0, int count = 0, bool rev = false) { var parametres = new Dictionary <string, string>(); if (userId != 0) { parametres.Add("user_id", userId.ToString()); } else { if (chatId != 0) { parametres.Add("chat_id", chatId.ToString()); } else { throw new Exception("User id or chat id must be specified."); } } if (offset > 0) { parametres.Add("offset", offset.ToString()); } if (count > 0) { parametres.Add("count", count.ToString()); } if (rev) { parametres.Add("rev", "1"); } _vkontakte.SignMethod(parametres); var response = await VkRequest.GetAsync(VkConst.MethodBase + "messages.getHistory", parametres); if (response.SelectToken("response.items") != null) { return(new VkItemsResponse <VkMessage>(response["response"]["items"].Select(i => VkMessage.FromJson(i, _vkontakte.ApiVersion)).ToList(), (int)response["response"]["count"])); } return(VkItemsResponse <VkMessage> .Empty); }
public static VkMessage FromJson(JToken json, string apiVersion = null) { if (json == null) { throw new Exception("Json can't be null"); } var result = new VkMessage(); if (json["id"] != null) { result.Id = (long)json["id"]; } if (json["user_id"] != null) { result.UserId = (long)json["user_id"]; } result.Date = DateTimeExtensions.UnixTimeStampToDateTime((long)json["date"]); if (json["read_state"] != null) { result.IsRead = (int)json["read_state"] == 1; } if (json["out"] != null) { result.IsOut = (int)json["out"] == 1; } result.Title = (string)json["title"]; result.Body = (string)json["body"]; if (json["deleted"] != null) { result.IsDeleted = (int)json["deleted"] == 1; } if (json["attachments"] != null) { result.Attachments = VkAttachment.FromJson(json["attachments"]); } if (json["geo"] != null) { result.Geo = VkGeo.FromJson(json["geo"]); } if (json["fwd_messages"] != null) { result.ForwardMessages = new List <VkMessage>(); foreach (var fwdMessage in json["fwd_messages"]) { var message = VkMessage.FromJson(fwdMessage); result.ForwardMessages.Add(message); } } if (json["emoji"] != null) { result.ContainsEmoji = (int)json["emoji"] == 1; } if (json["chat_id"] != null) { result.ChatId = (long)json["chat_id"]; } if (json["chat_active"] != null) { result.ChatUsers = json["chat_active"].Select(t => t.Value <long>()).ToList(); } if (json["users_count"] != null) { result.UsersCount = (int)json["users_count"]; } if (json["admin_id"] != null) { result.AdminId = (long)json["admin_id"]; } if (json["action"] != null) { result.Action = (string)json["action"]; } if (json["action_text"] != null) { result.ActionText = (string)json["action_text"]; } if (json["photo_50"] != null) { result.Photo50 = (string)json["photo_50"]; } if (json["photo_100"] != null) { result.Photo100 = (string)json["photo_100"]; } if (json["photo_200"] != null) { result.Photo200 = (string)json["photo_200"]; } return(result); }
public static VkLongPollMessage FromJson(JArray json) { var result = new VkLongPollMessage(); result.Parameters = new Dictionary <string, object>(); var messageType = json[0].Value <string>(); switch (messageType) { //удаление сообщения с указанным local_id case "0": result.Type = VkLongPollMessageType.MessageDelete; result.Parameters.Add("message_id", json[1].Value <string>()); break; //замена флагов сообщения case "1": result.Type = VkLongPollMessageType.MessageFlagUpdate; result.Parameters.Add("message_id", json[1].Value <string>()); result.Parameters.Add("flags", json[2].Value <VkLongPollMessageFlags>()); break; //установка флагов сообщения case "2": result.Type = VkLongPollMessageType.MessageFlagSet; result.Parameters.Add("message_id", json[1].Value <string>()); result.Parameters.Add("flags", json[2].Value <int>()); if (json.Count > 2) { result.Parameters.Add("user_id", json[3].Value <long>()); } break; //сброс флагов сообщения case "3": result.Type = VkLongPollMessageType.MessageFlagReset; result.Parameters.Add("message_id", json[1].Value <string>()); result.Parameters.Add("flags", json[2].Value <int>()); if (json.Count > 2) { result.Parameters.Add("user_id", json[3].Value <long>()); } break; //добавление нового сообщения case "4": result.Type = VkLongPollMessageType.MessageAdd; var m = new VkMessage(); m.Id = json[1].Value <long>(); var flags = json[2].Value <int>(); var uid = json[3].Value <long>(); if (uid >= ChatIdMask) { //беседа result.Parameters.Add("conversation", "1"); m.ChatId = (uid - ChatIdMask); } else { m.UserId = uid; } m.Date = DateTimeExtensions.UnixTimeStampToDateTime(json[4].Value <double>()).ToLocalTime(); m.Title = json[5].Value <string>(); m.Body = json[6].Value <string>(); result.Parameters.Add("message", m); result.Parameters.Add("flags", flags); if (json[7] != null) { //attachments try { var longPollAttachments = new List <VkLongPollAttachment>(); var dict = json[7].Value <JObject>().Properties().ToDictionary(p => p.Name, p => p.Value.Value <string>()); foreach (var o in dict) { var id = o.Key.Replace("_type", string.Empty); VkLongPollAttachment longPollAttachment = longPollAttachments.FirstOrDefault(a => a.Id == id); if (longPollAttachment == null) { longPollAttachment = new VkLongPollAttachment() { Id = id }; longPollAttachments.Add(longPollAttachment); } if (o.Key.EndsWith("_type")) { longPollAttachment.Type = o.Value; } else { if (o.Key == "geo") //special attachment { longPollAttachment.Type = "geo"; } else if (o.Key == "fwd") { longPollAttachment.Type = "fwd"; } else if (o.Key == "from") { m.UserId = long.Parse(o.Value); } longPollAttachment.Data = o.Value; } } if (longPollAttachments.Count > 0) { m.Attachments = new List <VkAttachment>(longPollAttachments.Count); foreach (var longPollAttachment in longPollAttachments) { if (longPollAttachment.Type == "geo") { //not an attachment for message //requires reverse geocoding m.Geo = new VkGeo(); } else if (longPollAttachment.Id == "fwd_msg_count") { //adding placeholder messages, client app will reload message to get it int count = int.Parse(longPollAttachment.Data); m.ForwardMessages = new List <VkMessage>(); for (int i = 0; i < count; i++) { m.ForwardMessages.Add(new VkMessage()); } } else if (longPollAttachment.Type == "sticker") { var sticker = new VkStickerAttachment(); sticker.ProductId = long.Parse(longPollAttachment.Data); sticker.Photo256 = "http://vk.com/images/stickers/" + sticker.ProductId + "/256.png"; m.Attachments.Add(sticker); } else { var a = longPollAttachment.ToAttachment(); if (a != null) { m.Attachments.Add(a); } else { Debug.WriteLine("Unable to parse attachment " + a); } } } } } catch (Exception ex) { Debug.WriteLine("Unable to parse attachments of LongPollMessage. " + ex); } } break; //друг стал онлайн case "8": result.Type = VkLongPollMessageType.FriendOnline; result.Parameters.Add("user_id", json[1].Value <string>().Substring(1)); break; //друг стал оффлайн case "9": result.Type = VkLongPollMessageType.FriendOffline; result.Parameters.Add("user_id", json[1].Value <string>().Substring(1)); break; //один из параметров (состав, тема) беседы был изменен case "51": result.Type = VkLongPollMessageType.ConversationChange; result.Parameters.Add("chat_id", json[1].Value <string>()); result.Parameters.Add("self", json[2].Value <string>() == "1"); break; //пользователь начал набирать текст в диалоге case "61": result.Type = VkLongPollMessageType.DialogUserTyping; result.Parameters.Add("user_id", json[1].Value <long>()); break; //пользователь начал набирать текст в беседе case "62": result.Type = VkLongPollMessageType.ConsersationUserTyping; result.Parameters.Add("user_id", json[1].Value <long>()); result.Parameters.Add("chat_id", json[2].Value <long>()); break; default: result.Type = VkLongPollMessageType.Unknown; break; } return(result); }
public static VkMessage FromJson(JToken json, string apiVersion = null) { if (json == null) { throw new Exception("Json can't be null"); } var result = new VkMessage(); result.Id = (long)json["id"]; result.UserId = (long)json["user_id"]; result.Date = DateTimeExtensions.UnixTimeStampToDateTime((long)json["date"]); if (json["read_state"] != null) { result.IsRead = (int)json["read_state"] == 1; } if (json["out"] != null) { result.IsOut = (int)json["out"] == 1; } result.Title = (string)json["title"]; result.Body = (string)json["body"]; if (json["deleted"] != null) { result.IsDeleted = (int)json["deleted"] == 1; } if (json["attachments"] != null) { result.Attachments = VkAttachment.FromJson(json["attachments"], apiVersion); } //TODO forward messages if (json["emoji"] != null) { result.ContainsEmoji = (int)json["emoji"] == 1; } if (json["chat_id"] != null) { result.ChatId = (long)json["chat_id"]; } if (json["chat_active"] != null) { result.ChatUsers = json["chat_active"].Select(t => t.Value <long>()).ToList(); } if (json["users_count"] != null) { result.UsersCount = (int)json["users_count"]; } if (json["admin_id"] != null) { result.AdminId = (long)json["admin_id"]; } return(result); }
public async Task <VkItemsResponse <VkMessage> > GetDialogs(int offset = 0, int count = 0, uint previewLength = 0, string userId = null) { if (_vkontakte.AccessToken == null || string.IsNullOrEmpty(_vkontakte.AccessToken.Token) || _vkontakte.AccessToken.HasExpired) { throw new Exception("Access token is not valid."); } var parameters = new Dictionary <string, string>(); if (offset > 0) { parameters.Add("offset", offset.ToString()); } if (count > 0) { parameters.Add("count", count.ToString()); } if (previewLength > 0) { parameters.Add("preview_length", previewLength.ToString()); } if (!string.IsNullOrEmpty(userId)) { parameters.Add("user_id", userId); } _vkontakte.SignMethod(parameters); var response = await new VkRequest(new Uri(VkConst.MethodBase + "messages.getDialogs"), parameters).Execute(); VkErrorProcessor.ProcessError(response); if (response.SelectToken("response.items") != null) { return(new VkItemsResponse <VkMessage>(response["response"]["items"].Select(i => VkMessage.FromJson(i, _vkontakte.ApiVersion)).ToList(), (int)response["response"]["count"])); } return(VkItemsResponse <VkMessage> .Empty); }
public async Task <VkItemsResponse <VkMessage> > GetById(IEnumerable <long> messageIds, int previewLength = 0) { if (_vkontakte.AccessToken == null || string.IsNullOrEmpty(_vkontakte.AccessToken.Token) || _vkontakte.AccessToken.HasExpired) { throw new Exception("Access token is not valid."); } var parametres = new Dictionary <string, string>(); if (messageIds != null) { parametres.Add("message_ids", string.Join(",", messageIds)); } if (previewLength > 0) { parametres.Add("preview_length", previewLength.ToString()); } _vkontakte.SignMethod(parametres); var response = await new VkRequest(new Uri(VkConst.MethodBase + "messages.getById"), parametres).Execute(); VkErrorProcessor.ProcessError(response); if (response.SelectToken("response.items") != null) { return(new VkItemsResponse <VkMessage>(response["response"]["items"].Select(i => VkMessage.FromJson(i, _vkontakte.ApiVersion)).ToList(), (int)response["response"]["count"])); } return(VkItemsResponse <VkMessage> .Empty); }
public async Task <VkItemsResponse <VkMessage> > GetHistory(long userId, long chatId = 0, int offset = 0, int count = 0, bool rev = false) { if (_vkontakte.AccessToken == null || string.IsNullOrEmpty(_vkontakte.AccessToken.Token) || _vkontakte.AccessToken.HasExpired) { throw new Exception("Access token is not valid."); } var parametres = new Dictionary <string, string>(); if (userId != 0) { parametres.Add("user_id", userId.ToString()); } else { if (chatId != 0) { parametres.Add("chat_id", chatId.ToString()); } else { throw new Exception("User id or chat id must be specified."); } } if (offset > 0) { parametres.Add("offset", offset.ToString()); } if (count > 0) { parametres.Add("count", count.ToString()); } if (rev) { parametres.Add("rev", "1"); } _vkontakte.SignMethod(parametres); var response = await new VkRequest(new Uri(VkConst.MethodBase + "messages.getHistory"), parametres).Execute(); VkErrorProcessor.ProcessError(response); if (response.SelectToken("response.items") != null) { return(new VkItemsResponse <VkMessage>(response["response"]["items"].Select(i => VkMessage.FromJson(i, _vkontakte.ApiVersion)).ToList(), (int)response["response"]["count"])); } return(VkItemsResponse <VkMessage> .Empty); }
public static VkLongPollMessage FromJson(JArray json) { var result = new VkLongPollMessage(); result.Parameters = new Dictionary <string, object>(); var messageType = json[0].Value <string>(); switch (messageType) { //удаление сообщения с указанным local_id case "0": result.Type = VkLongPollMessageType.MessageDelete; result.Parameters.Add("message_id", json[1].Value <string>()); break; //замена флагов сообщения case "1": result.Type = VkLongPollMessageType.MessageUpdate; result.Parameters.Add("message_id", json[1].Value <string>()); result.Parameters.Add("flags", json[2].Value <int>()); break; //установка флагов сообщения case "2": result.Type = VkLongPollMessageType.MessageFlagSet; result.Parameters.Add("message_id", json[1].Value <string>()); result.Parameters.Add("flags", json[2].Value <int>()); if (json.Count > 2) { result.Parameters.Add("user_id", json[3].Value <string>()); } break; //сброс флагов сообщения case "3": result.Type = VkLongPollMessageType.MessageFlagReset; result.Parameters.Add("message_id", json[1].Value <string>()); result.Parameters.Add("flags", json[2].Value <int>()); if (json.Count > 2) { result.Parameters.Add("user_id", json[3].Value <string>()); } break; //добавление нового сообщения case "4": result.Type = VkLongPollMessageType.MessageAdd; var m = new VkMessage(); m.Id = json[1].Value <long>(); var flags = json[2].Value <int>(); var uid = json[3].Value <long>(); if (uid >= ChatIdMask) { //беседа result.Parameters.Add("conversation", "1"); m.ChatId = (uid - ChatIdMask); } else { m.UserId = uid; } m.Date = DateTimeExtensions.UnixTimeStampToDateTime(json[4].Value <double>()).ToLocalTime(); m.Title = json[5].Value <string>(); m.Body = json[6].Value <string>(); result.Parameters.Add("message", m); result.Parameters.Add("flags", flags); //TODO forwards & attachments break; //друг стал онлайн case "8": result.Type = VkLongPollMessageType.FriendOnline; result.Parameters.Add("user_id", json[1].Value <string>().Substring(1)); break; //друг стал оффлайн case "9": result.Type = VkLongPollMessageType.FriendOffline; result.Parameters.Add("user_id", json[1].Value <string>().Substring(1)); break; //один из параметров (состав, тема) беседы был изменен case "51": result.Type = VkLongPollMessageType.ConversationChange; result.Parameters.Add("chat_id", json[1].Value <string>()); result.Parameters.Add("self", json[2].Value <string>() == "1"); break; //пользователь начал набирать текст в диалоге case "61": result.Type = VkLongPollMessageType.DialogUserTyping; result.Parameters.Add("user_id", json[1].Value <string>()); break; //пользователь начал набирать текст в беседе case "62": result.Type = VkLongPollMessageType.ConsersationUserTyping; result.Parameters.Add("user_id", json[1].Value <string>()); result.Parameters.Add("chat_id", json[2].Value <string>()); break; default: result.Type = VkLongPollMessageType.Unknown; break; } return(result); }
public static VkMessage FromJson(JToken json, string apiVersion = null) { if (json == null) throw new Exception("Json can't be null"); var result = new VkMessage(); result.Id = (long)json["id"]; result.UserId = (long)json["user_id"]; result.Date = DateTimeExtensions.UnixTimeStampToDateTime((long)json["date"]); if (json["read_state"] != null) result.IsRead = (int)json["read_state"] == 1; if (json["out"] != null) result.IsOut = (int)json["out"] == 1; result.Title = (string)json["title"]; result.Body = (string)json["body"]; if (json["deleted"] != null) result.IsDeleted = (int)json["deleted"] == 1; if (json["attachments"] != null) result.Attachments = VkAttachment.FromJson(json["attachments"], apiVersion); //TODO forward messages if (json["emoji"] != null) result.ContainsEmoji = (int)json["emoji"] == 1; if (json["chat_id"] != null) result.ChatId = (long)json["chat_id"]; if (json["chat_active"] != null) { result.ChatUsers = json["chat_active"].Select(t => t.Value<long>()).ToList(); } if (json["users_count"] != null) result.UsersCount = (int)json["users_count"]; if (json["admin_id"] != null) result.AdminId = (long)json["admin_id"]; return result; }