Пример #1
0
        /// <summary>
        /// 消息同步操作
        /// </summary>
        /// <param name="service">The service.</param>
        /// <param name="m">The m.</param>
        private void SyncMsgHandle(WXService service, JObject m)
        {
            //用户退出或任务停止时
            if (MyUserInfo.currentUserId == 0)
            {
                return;
            }

            //自己发消息时,from为自己的id,否则为群id
            string from = m["FromUserName"].ToString();
            //不是自己发消息时,to为自己的id,否则为群id
            string to = m["ToUserName"].ToString();

            //判断发送方不是本人,且目标是群聊
            if (_me.UserName == to && from.Contains("@@"))
            {
                string msgid   = m["MsgId"].ToString();
                string content = m["Content"].ToString();
                int    msgtype = 0;
                int.TryParse(m["MsgType"].ToString(), out msgtype);

                //获取当前群信息
                WXUser user = mainForm.contact_all.Find((WXUser obj) => { return(obj.UserName == from); });
                if (user == null)
                {
                    return;
                }


                //获取发送者标识id;
                int    idx         = content.IndexOf(":");
                string msgSendUser = content.Substring(0, idx);

                if (string.IsNullOrEmpty(MyUserInfo.filterUserGroups))
                {
                    MyUserInfo.filterUserGroups = "";
                }

                if (mainForm.listenForm != null)
                {
                    var groups = mainForm.listenForm.ListenWeChatData;
                    if (groups != null && groups.Exists(item => { return(item.UserName == user.UserName); }))
                    {
                        string nickName = string.Empty, messageContent = string.Empty;
                        switch (msgtype)
                        {
                        case (int)WxMsgType.文本消息:
                        {
                            messageContent = content.Substring(idx + 1);
                            //获取当前发送方的昵称
                            nickName = GetCurrentMessageUserNickName(service, msgSendUser, user.UserName);

                            if (MyUserInfo.currentUserId == 0)
                            {
                                return;
                            }

                            bool isExist = MyUserInfo.filterUserGroups.Contains("[" + nickName + "]");
                            //是否过滤当前用户操作
                            if (!string.IsNullOrEmpty(nickName) && !isExist)
                            {
                                mainForm.listenForm.SetWxMessageData(user, msgSendUser, nickName, messageContent, null);
                            }
                        }
                        break;

                        case (int)WxMsgType.图片消息:
                        {
                            //获取当前发送方的昵称
                            nickName = GetCurrentMessageUserNickName(service, msgSendUser, user.UserName);
                            bool isExist = MyUserInfo.filterUserGroups.Contains("[" + nickName + "]");
                            //是否过滤当前用户操作
                            if (!string.IsNullOrEmpty(nickName) && !isExist)
                            {
                                byte[] buffer = service.GetMsgImage(msgid);
                                if (buffer != null)
                                {
                                    mainForm.listenForm.SetWxMessageData(user, msgSendUser, nickName, "发了一张图片", buffer);
                                }
                            }
                        }
                        break;

                        case (int)WxMsgType.分享链接:
                        case (int)WxMsgType.共享名片:
                        case (int)WxMsgType.系统消息:

                            break;

                        default:
                            break;
                        }
                    }
                }
            }
        }