Example #1
0
        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);
        }
Example #2
0
        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;
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #12
0
        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;
        }