private void backgroundWorkerSync_ProgressChanged(object sender, ProgressChangedEventArgs e) { //MsgHandle handle = new MsgHandle(); string state = e.UserState as string; if (string.IsNullOrEmpty(state)) { AddMsgList msg = e.UserState as AddMsgList; if (msg != null) { LogOut(string.Format("消息类型:{0},FromUserName:{1},ToUserName:{2},消息内容:{3},\r\n NotifyUserName:{4},时间:{5}", msg.MsgType, msg.FromUserName, msg.ToUserName, msg.Content, msg.StatusNotifyUserName, DateTime.Now)); MsgHandle handle = new MsgHandle(); int msgType = msg.MsgType; switch (msgType) { case (int)MsgTypeEnum.系统消息: handle.InitWxUser(msg); break; case (int)MsgTypeEnum.加好友: if (buyService.HaveUser(Global.robot.Id, msg.RecommendInfo.NickName)) { var result = protocol.VerifyUser(msg.RecommendInfo.UserName, msg.RecommendInfo.Ticket, Global.robot.Cookie, Global.robot.CookieStr); LogOut("加好友" + result.ErrMsg); //加完好友之后增加到机器人的好友表中 //wx_friend friend = new wx_friend(); //friend.UserName = msg.RecommendInfo.UserName; //friend.NickName = msg.RecommendInfo.NickName; //friend.AttrStatus = msg.RecommendInfo.AttrStatus; //ContactService service = new ContactService(); //service.AddContent(friend); Global.robot.Contact = protocol.GetContact(Global.robot.Cookie, Global.robot.CookieStr).MemberList.ToList(); Task.Run(() => { protocol.StatusNotify(Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); }); //发送消息 protocol.SendMsg("请输入验证码,如未购买,请访问", msg.RecommendInfo.UserName, 1, Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); } break; case (int)MsgTypeEnum.群通知: //好友已添加,被拉进群 if (msg.FromUserName.StartsWith("@@")) { //拉进群 //初始化 //拉别人进群也会有此通知 //判断群id是否存在,不存在初始化 var user = Global.robot.WxUserList.Where(u => u.UserName == msg.FromUserName).FirstOrDefault(); if (user == null) { protocol.StatusNotify(Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); } //protocol.SendMsg("群绑定成功,机器人开始为您服务", msg.FromUserName, 1, Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); } else { //好友 } break; default: if (msg.FromUserName.StartsWith("@@") && msg.ToUserName.StartsWith("@")) { //群消息对个人 string fromAlias = WechatCommon.GetTrueId(msg.FromUserName); bool isBind = buyService.IsBind(fromAlias); string content = msg.Content; if (isBind) { //聊天记录 wx_group_chat chat = new wx_group_chat(); chat.Createtime = DateTime.Now; chat.MsgType = msg.MsgType; chat.GroupUserName = msg.FromUserName; chat.GroupId = WechatCommon.GetTrueId(msg.FromUserName); if (content.StartsWith("@")) { int startIndex = content.IndexOf(':'); string fromUserName = content.Substring(0, startIndex); chat.SendAlias = WechatCommon.GetTrueId(fromUserName); chat.SendUserName = fromUserName; chat.Content = content.Substring(startIndex + 6); chat.SendNickName = WechatCommon.GetNickNameFromGroup(msg.FromUserName, fromUserName); chat.SendAttrStatus = WechatCommon.GetAttrStatusFromGroup(msg.FromUserName, fromUserName); } else { chat.Content = content; } msgService.InsertMsg(chat); } //判断是否是开通群空间 if (content.StartsWith("@")) { int startIndex = content.IndexOf(':'); string fromUserName = content.Substring(0, startIndex); string sendAlias = WechatCommon.GetTrueId(fromUserName); string message = content.Substring(startIndex + 6); string[] c = message.Split(' '); if (c != null && c.Length == 2) { if (c[0] == "@" + Global.robot.NickName && c[1] == "开通群空间") { //判断已经开通的群无法再次开通 if (!isBind) { int recordId = buyService.GetBuyRecordId(Global.robot.Id, sendAlias); if (recordId > 0) { int result = buyService.BindGroup(recordId, fromAlias); if (result > 0) { protocol.SendMsg("群绑定成功,机器人开始为您服务", msg.FromUserName, 1, Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); //群空间开通功能,捞取人员信息存入数据库等操作 var groupInfo = Global.robot.GroupInfo.Where(n => n.UserName == msg.FromUserName).FirstOrDefault(); if (groupInfo == null) { BatchGetContactResult contactResult = protocol.BatchGetContact(new List <string>() { msg.FromUserName }, Global.robot.Cookie, Global.robot.CookieStr); if (contactResult != null) { groupInfo = contactResult.ContactList[0]; } } //存数据库 Task.Run(() => { GroupService groupService = new GroupService(); groupService.SyncGroup(groupInfo); }); } else { protocol.SendMsg("群绑定失败", msg.FromUserName, 1, Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); } } } else { protocol.SendMsg("群已经被绑定", msg.FromUserName, 1, Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); } } } } } else if (msg.FromUserName.StartsWith("@") && msg.ToUserName.StartsWith("@@")) { //个人发群消息 } else if (msg.FromUserName.StartsWith("@") && msg.ToUserName.StartsWith("@")) { //个人对个人 if (msg.ToUserName == Global.robot.UserName) { //判断内容是否跟验证码符合 string nickName = Global.robot.Contact.Where(n => n.UserName == msg.FromUserName).Select(n => n.NickName).FirstOrDefault(); int recordId = buyService.VaildCode(Global.robot.Id, nickName, msg.Content); if (recordId > 0) { //绑定成功 string alias = WechatCommon.GetTrueId(msg.FromUserName); if (buyService.UseCode(recordId, alias) > 0) { protocol.SendMsg("验证成功,请添加到群中", msg.FromUserName, 1, Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); } else { protocol.SendMsg("验证失败,请重新输入", msg.FromUserName, 1, Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); } } else { protocol.SendMsg("验证码错误,如未购买,请访问", msg.FromUserName, 1, Global.robot.Cookie, Global.robot.CookieStr, Global.robot.UserName); } } } break; } //if (msg.MsgType == (int)MsgTypeEnum.加好友) //{ // //加好友 // var result = protocol.VerifyUser(msg.RecommendInfo.UserName, msg.RecommendInfo.Ticket, Global.robot.Cookie, Global.robot.CookieStr); // LogOut("加好友" + result.ErrMsg); //} //else if (msg.MsgType == (int)MsgTypeEnum.系统消息&&msg.ToUserName.StartsWith("@@")) //{ // //群 // //protocol.SendMsg("欢迎加入群聊天", msg.ToUserName, 1, Global.robot.Cookie, Global.robot.CookieStr,Global.robot.UserName); // //string html = protocol.BatchGetContact(msg.ToUserName, Global.robot.Cookie, Global.robot.CookieStr); //} } } else if (state == "1100") { LogOut("拉取消息请求超时,请重新登录" + DateTime.Now); syncRun = false; } else if (state == "正常") { LogOut("0正常捞取" + DateTime.Now); } else { LogOut(state + "未知异常,请重新登录" + DateTime.Now); syncRun = false; } }
/// <summary> /// 初始化微信用户关系映射 /// </summary> public void InitWxUser(AddMsgList msg) { string content = msg.Content; string statusNotifyUserName = msg.StatusNotifyUserName; if (!string.IsNullOrEmpty(content)) { Regex reg = new Regex("<br/><op id='\\d'><br/>"); Match m = reg.Match(content); if (m.Value == "<br/><op id='4'><br/>") { List <WxUser> wxUserList = new List <WxUser>(); List <string> IdList = GetId(content); List <string> userNameList = GetUserName(statusNotifyUserName); #region 初始化微信用户关系 if (IdList.Count == userNameList.Count) { for (int i = 0; i < IdList.Count; i++) { WxUser user = new WxUser(); user.Id = IdList[i]; user.UserName = userNameList[i]; wxUserList.Add(user); } Global.robot.WxUserList = wxUserList; } else { throw new Exception("数据不完整"); } #endregion WechatProtocol protocol = new WechatProtocol(); List <string> chatRoomIds = userNameList.Where(n => n.StartsWith("@@")).ToList(); var groupInfo = protocol.BatchGetContact(chatRoomIds, Global.robot.Cookie, Global.robot.CookieStr).ContactList; Global.robot.GroupInfo = groupInfo; /* * WechatProtocol protocol = new WechatProtocol(); * #region 同步机器人信息 * RobotService robotService = new RobotService(); * * wx_robot robot = robotService.GetRobot(Global.robot.Id); * robot.Alias = WechatCommon.GetTrueId(Global.robot.UserName); * Global.robot.Alias = robot.Alias; * List<string> contact = new List<string>(); * contact.Add(Global.robot.UserName); * var robotInfo = protocol.BatchGetContact(contact, Global.robot.Cookie, Global.robot.CookieStr); * var c = robotInfo.ContactList.FirstOrDefault(); * if (c != null) * { * robot.Nickname = c.NickName; * robot.Sex = c.Sex; * robot.City = c.City; * robot.Province = c.Province; * robot.Headimgurl = c.HeadImgUrl; * robot.Updatetime = DateTime.Now; * robot.MemberCount = c.MemberCount; * robot.Signature = c.Signature; * robot.AttrStatus = c.AttrStatus; * robot.Status = c.Statues; * } * * * robotService.UpdateRobot(robot); * #endregion * * #region 用户群同步 * List<string> chatRoomIds = userNameList.Where(n => n.StartsWith("@@")).ToList(); * var groupInfo = protocol.BatchGetContact(chatRoomIds, Global.robot.Cookie, Global.robot.CookieStr).ContactList; * foreach (var group in groupInfo) * { * group.Alias = WechatCommon.GetTrueId(group.UserName); * } * * Global.robot.GroupInfo = groupInfo; * //同步数据到数据库 * GroupService service = new GroupService(); * service.SyncGroup(Global.robot.GroupInfo); * #endregion * #region 群里面用户信息同步 * * //foreach (var group in Global.robot.GroupInfo) * //{ * // string groupId = WechatCommon.GetTrueId(group.UserName); * // service.SyncGroupMember(group.MemberList, groupId, group.UserName); * * * //} * * * #endregion */ } } }