群成员
Inheritance: QQStranger
Example #1
0
        /// <summary>
        /// 处理群消息
        /// </summary>
        /// <param name="pollData"></param>
        /// <returns></returns>
        public QQNotifyEvent ProcessGroupMsg(JObject pollData)
        {
            // {"retcode":0,"result":[{"poll_type":"group_message",
            // "value":{"msg_id":6175,"from_uin":3924684389,"to_uin":1070772010,"msg_id2":992858,"msg_type":43,"reply_ip":176621921,
            // "group_code":3439321257,"send_uin":1843694270,"seq":875,"time":1365934781,"info_seq":170125666,"content":[["font",{"size":10,"color":"3b3b3b","style":[0,0,0],"name":"\u5FAE\u8F6F\u96C5\u9ED1"}],"eeeeeeeee "]}}]}

            try
            {
                var store = Context.Store;
                var msg = new QQMsg
                {
                    Id = pollData["msg_id"].ToObject<long>(),
                    Id2 = pollData["msg_id2"].ToObject<long>()
                };
                var fromUin = pollData["send_uin"].ToObject<long>();
                var groupCode = pollData["group_code"].ToObject<long>();
                var groupId = pollData["info_seq"].ToObject<long>(); // 真实群号码
                var group = store.GetGroupByCode(groupCode);
                if (group == null)
                {
                    var groupModule = Context.GetModule<GroupModule>(QQModuleType.GROUP);
                    group = new QQGroup
                    {
                        Code = groupCode,
                        Gid = groupId
                    };
                    // put to store
                    store.AddGroup(group);
                    groupModule.GetGroupInfo(group, null);
                }
                if (group.Gid <= 0)
                {
                    group.Gid = groupId;
                }

                msg.ParseContentList(JsonConvert.SerializeObject(pollData["content"]));
                msg.Type = QQMsgType.GROUP_MSG;
                msg.To = Context.Account;
                var ticks = pollData["time"].ToObject<long>() * 1000;
                msg.Date = ticks > DateTime.MaxValue.Ticks ? DateTime.Now : new DateTime(ticks);
                msg.Group = group;
                msg.From = group.GetMemberByUin(fromUin);

                if (msg.From == null)
                {
                    var member = new QQGroupMember { Uin = fromUin };
                    msg.From = member;
                    group.Members.Add(member);
                    // 获取用户信息
                    var userModule = Context.GetModule<UserModule>(QQModuleType.USER);
                    userModule.GetUserInfo(member, null);
                }
                return new QQNotifyEvent(QQNotifyEventType.CHAT_MSG, msg);
            }
            catch (Exception ex)
            {
                return new QQNotifyEvent(QQNotifyEventType.NET_ERROR, ex);
            }
        }
        public override void OnHttpStatusOK(QQHttpResponse response)
        {
            var str = response.GetResponseString();
            var json = JObject.Parse(str);

            if (json["retcode"].ToString() == "0")
            {
                var result = json["result"].ToObject<JObject>();
                var ginfo = result["ginfo"].ToObject<JObject>();
                _group.Memo = ginfo["memo"].ToString();
                _group.Level = ginfo["level"].ToObject<int>();
                var ticks = ginfo["createtime"].ToObject<long>() * 1000;
                _group.CreateTime = ticks > DateTime.MaxValue.Ticks ? DateTime.Now : new DateTime(ticks);

                var members = ginfo["members"].ToObject<JArray>();
                for (var i = 0; i < members.Count; i++)
                {
                    var memjson = members[i].ToObject<JObject>();
                    var member = _group.GetMemberByUin(memjson["muin"].ToObject<long>());
                    if (member == null)
                    {
                        member = new QQGroupMember();
                        _group.Members.Add(member);
                    }
                    member.Uin = memjson["muin"].ToObject<long>();
                    member.Group = _group;
                    //memjson["mflag"]; //TODO ...
                }

                //result/minfo
                var minfos = result["minfo"].ToObject<JArray>();
                foreach (var token in minfos)
                {
                    var minfo = token.ToObject<JObject>();
                    var member = _group.GetMemberByUin(minfo["uin"].ToObject<long>());
                    member.Nickname = minfo["nick"].ToString();
                    member.Province = minfo["province"].ToString();
                    member.Country = minfo["country"].ToString();
                    member.City = minfo["city"].ToString();
                    member.Gender = minfo["gender"].ToString();
                }

                //result/stats
                var stats = result["stats"].ToObject<JArray>();
                for (var i = 0; i < stats.Count; i++)
                {
                    // 下面重新设置最新状态
                    var stat = stats[i].ToObject<JObject>();
                    var member = _group.GetMemberByUin(stat["uin"].ToObject<long>());
                    member.ClientType = QQClientTypeInfo.ValueOfRaw(stat["client_type"].ToObject<int>());
                    member.Status = QQStatus.ValueOfRaw(stat["stat"].ToObject<int>());
                }

                //results/cards
                if (result["cards"] != null)
                {
                    var cards = result["cards"].ToObject<JArray>();
                    for (var i = 0; i < cards.Count; i++)
                    {
                        var card = cards[i].ToObject<JObject>();
                        var member = _group.GetMemberByUin(card["muin"].ToObject<long>());
                        if (card["card"] != null && member != null)
                        {
                            member.Card = card["card"].ToString();
                        }
                    }
                }

                //results/vipinfo
                var vipinfos = result["vipinfo"].ToObject<JArray>();
                for (var i = 0; i < vipinfos.Count; i++)
                {
                    var vipinfo = vipinfos[i].ToObject<JObject>();
                    var member = _group.GetMemberByUin(vipinfo["u"].ToObject<long>());
                    member.VipLevel = vipinfo["vip_level"].ToObject<int>();
                    member.IsVip = (vipinfo["is_vip"].ToString() != "0");
                }

                NotifyActionEvent(QQActionEventType.EvtOK, _group);
            }
            else
            {
                // NotifyActionEvent(QQActionEventType.EVT_ERROR, QQErrorCode.UNEXPECTED_RESPONSE);
                throw new QQException(QQErrorCode.UnexpectedResponse, str);
            }
        }
Example #3
0
        public override void OnHttpStatusOK(QQHttpResponse response)
        {
            JObject json = JObject.Parse(response.GetResponseString());
            if (json["retcode"].ToString() == "0")
            {
                json = json["result"].ToObject<JObject>();
                JObject ginfo = json["ginfo"].ToObject<JObject>();
                group.Memo = ginfo["memo"].ToString();
                group.Level = ginfo["level"].ToObject<int>();
                group.CreateTime = new DateTime(ginfo["createtime"].ToObject<int>());

                JArray members = ginfo["members"].ToObject<JArray>();
                for (int i = 0; i < members.Count; i++)
                {
                    JObject memjson = members[i].ToObject<JObject>();
                    QQGroupMember member = group.GetMemberByUin(memjson["muin"].ToObject<long>());
                    if (member == null)
                    {
                        member = new QQGroupMember();
                        group.Members.Add(member);
                    }
                    member.Uin = memjson["muin"].ToObject<long>();
                    member.Group = group;
                    //memjson["mflag"]; //TODO ...
                }

                //result/minfo
                JArray minfos = json["minfo"].ToObject<JArray>();
                for (int i = 0; i < minfos.Count; i++)
                {
                    JObject minfo = minfos[i].ToObject<JObject>();
                    QQGroupMember member = group.GetMemberByUin(minfo["uin"].ToObject<int>());
                    member.Nickname = minfo["nick"].ToString();
                    member.Province = minfo["province"].ToString();
                    member.Country = minfo["country"].ToString();
                    member.City = minfo["city"].ToString();
                    member.Gender = minfo["gender"].ToString();
                }

                //result/stats
                JArray stats = json["stats"].ToObject<JArray>();
                for (int i = 0; i < stats.Count; i++)
                {
                    // 下面重新设置最新状态
                    JObject stat = stats[i].ToObject<JObject>();
                    QQGroupMember member = group.GetMemberByUin(stat["uin"].ToObject<long>());
                    member.ClientType = QQClientType.ValueOfRaw(stat["client_type"].ToObject<int>());
                    member.Status = QQStatus.ValueOfRaw(stat["stat"].ToObject<int>());
                }

                //results/cards
                if (json["cards"] != null)
                {
                    JArray cards = json["cards"].ToObject<JArray>();
                    for (int i = 0; i < cards.Count; i++)
                    {
                        JObject card = cards[i].ToObject<JObject>();
                        QQGroupMember member = group.GetMemberByUin(card["muin"].ToObject<long>());
                        if (card["card"] != null && member != null)
                        {
                            member.Card = card["card"].ToString();
                        }
                    }
                }

                //results/vipinfo
                JArray vipinfos = json["vipinfo"].ToObject<JArray>();
                for (int i = 0; i < vipinfos.Count; i++)
                {
                    JObject vipinfo = vipinfos[i].ToObject<JObject>();
                    QQGroupMember member = group.GetMemberByUin(vipinfo["u"].ToObject<long>());
                    member.VipLevel = vipinfo["vip_level"].ToObject<int>();
                    member.IsVip = (vipinfo["is_vip"].ToString() != "0");
                }

                NotifyActionEvent(QQActionEventType.EVT_OK, group);
            }
            else
            {
                NotifyActionEvent(QQActionEventType.EVT_ERROR, QQErrorCode.UNEXPECTED_RESPONSE);
            }
        }