/// <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); } }
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); } }