using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using Newtonsoft.Json.Linq; using PCRobot.Entitys; using PCRobot.Pack; using PCRobot.Utils; namespace PCRobot.PCWechat.Routine { /// /// 个人微信基类 /// public abstract class WechatRoutineBase : WechatBase { /// /// 是否初始化 /// internal static bool IsInstall { get; set; } public WechatRoutineBase(WechatUser User) : base(User) { } #region 发送操作 ///// ///// 发送小程序 - 接收到的小程序消息id ///// ///// 接收者的微信 ///// 发送 //public abstract void SendProgramMessage(string username, string msgid); /// /// 发送Xml(自己拼接Xml)【发送操作】 /// /// 发给谁 /// Xml消息 /// 自定义来源 public abstract void SendXml(string username, string xml, string customSource = "Window wechat"); /// /// 发送名片XML原始消息[可用于检验僵尸粉] /// /// /// public abstract void SendCardXml(string username, string xml); /// /// 发送引用消息 /// /// 发送给谁 /// 发送的内容 /// 消息的类型 /// 引用的内容 /// 引用的消息id /// 引用的用户账号 /// 引用的账号昵称 /// public abstract void SendQuoteMessage(string username, string replyMess, WechatMsgType messageType, string quoteMess, string quoteMsgid, string quoteUsername, string quoteUsernick); /// /// 发送链接(卡片) /// /// 接收者的账号 /// 链接标题 /// 链接描述 /// 链接地址 /// 链接图片URL /// 自定义来源 public abstract void SendLinkMessage(string username, string title, string desc, string url, string imageUrl, string customSource); #endregion #region 群操作 /// /// 邀请用户进群(40人以下,不用用户同意)【群操作】 /// /// 群ID /// 被邀请的用户账号集 /// public abstract void InviteMemberToGroup_40Down(string groupid, string[] usernames); /// /// 邀请用户进群(40人以上,需要用户同意)【群操作】 /// /// 群ID /// 被邀请的用户账号集 public abstract void InviteMemberToGroup_40Up(string groupid, string[] usernames); /// /// 修改自己在所群里的昵称【群操作】 /// /// 群ID /// 新昵称 /// public abstract void ModifyGroupMyNick(string groupid, string newNick); /// /// 自动同意进群邀请 /// /// 0是取消自动,1自动 /// public abstract void AutoAcceptGroup(bool isAuto); /// /// 是否显示群成员昵称【群操作】 /// /// 群ID /// 0不显示,1显示 /// public abstract void ModifyGroupShowNick(string groupid, bool isShow); /// /// 群[保存到/移除]通讯录【群操作】 /// /// 群ID /// 0移出通讯录,1保存到通讯录 /// public abstract void SaveGroupToContact(string groupid, bool status); public abstract void GetGroupsNotInMember(); /// /// 检测僵尸粉 /// public abstract void CheckZombiz(); ///// ///// 获取群用户邀请 ///// ///// 群ID //public abstract Dictionary GetGroupMemberInvite(string groupid); #endregion #region 转发消息操作 /// /// 转发任意类型消息【转发消息操作】 /// /// 接收者的账号 /// 转发的msgid public abstract void ForwardAny(string username, string msgid); #endregion #region 获取收藏列表 ///// ///// 获取收藏列表【收藏消息类】 ///// //public abstract Task> GetCollects(); ///// ///// 发送收藏【收藏消息类】 ///// ///// 接收者的账号 ///// 收藏列表中local_id的值 ///// //public abstract void SendCollect(string username, string local_id); ///// ///// 添加收藏【收藏消息类】 ///// ///// 接收到的消息ID ///// //public abstract void AddCollect(string msgid); #endregion #region 语音处理类 /// /// 语音消息转文本【语音处理类】 /// /// 接收到的消息id /// public abstract string TransVoice(string msgid); #endregion #region 群和好友操作 /// /// 开启/关闭消息免打扰【群和好友操作】 /// /// 好友账号或群ID /// 0是关闭,1是开启 /// public abstract void ModifyRecvNotify(string username, bool status); /// /// 置顶/取消置顶聊天【群和好友操作】 /// /// 好友账号或群ID /// 0是关闭,1是开启 /// public abstract void ModifyChatTop(string username, bool status); #endregion #region 公众号操作类 /// /// 关注公众号【公众号操作类】 /// /// 公众号账号 /// 添加来源,可为空 /// public abstract void AddPublicUser(string username, string source_type = ""); #endregion #region 好友操作 /// /// 添加好友【好友操作】 /// /// 用户账号 /// 备注 /// 来源 /// 6:好友验证,这里可加之前加过的人; /// 14:群聊,加群好友必须是群聊 /// 17:名片分享,username需要传v1数据 /// /// 来自哪个群,可空 /// public abstract void AddFriend(string username, string remark, int source_type, string groupid); ///// ///// 删除好友【好友操作】 ///// ///// 删除用户的账号 ///// //public abstract void DeleteFriend(string username); ///// ///// 接受加好友请求【好友操作】 ///// ///// xml消息中encryptusername ///// xml消息中ticket ///// xml消息中scene ///// //public abstract Task AcceptFriend(string username, string encryptusername, string ticket, string scene); /// /// 接受好友转账【好友操作】 /// /// xml消息中transferid /// public abstract void AcceptFriendTransfer(string data); /// /// 退回好友转账【好友操作】 /// /// xml消息中transferid /// public abstract void RefuseFriendTransfer(string transferid); /// /// 接受好友的进群邀请【好友操作】 /// /// 邀请人的账号 /// 邀请的链接 /// public abstract void AcceptFriendInviteToGroup(string username, string inviteUrl); /// /// 单向加好友(当不需要验证时)【好友操作】 /// /// 要加的好友账号 /// public abstract void AddOnewayFriend(string username); #endregion #region 基础消息 /// /// 获取所有用户信息【基础消息】 /// /// public abstract Task> GetFriendInfos(); ///// ///// 获取所有公众号信息【基础消息】 ///// ///// //public abstract Task> GetPublicInfos(); /// /// 网络获取个人信息【基础消息】 /// /// 要刷新信息的用户账号 /// public abstract Task UpdateFriendInfo(string username); /// /// 网络获取群成员信息【基础消息】 /// /// 群ID /// public abstract void UpdateGroupMemberInfo(string groupid); #endregion #region 无痕清粉类 /// /// 检测僵尸粉 /// 0 正常状态(不是僵尸粉) /// 1 检测为僵尸粉(对方把我拉黑了) /// 2 检测为僵尸粉(对方把我从他的好友列表中删除了) /// 3 检测为僵尸粉(原因未知, 如遇到3请反馈给我) /// /// 要检测的用户账号 /// public abstract Task CheckZombie(string username); #endregion #region 自动处理类 /// /// 自动同意加好友申请 /// /// 0是取消自动,1自动 /// public abstract void AutoAcceptFriend(bool isAuto); /// /// 自动接受好友转账 /// /// 0是取消自动,1自动 /// public abstract void AutoAcceptFriendTransfer(bool isAuto); /// /// 自动加好友分享的名片 /// /// 0是取消自动,1自动 /// public abstract void AutoAcceptCard(bool isAuto); #endregion #region 解密文件类 /// /// 解密微信加密的图片(.dat) /// /// 微信加密图片路径(.dat) /// 解密后的文件路径(.jpg) public abstract void DecryptImage(string src_file, string dest_file); #endregion #region 浏览器类 /// /// 打开内置的浏览器 /// /// 要打开的地址 public abstract void OpenBrowser(string url); #endregion #region 界面相关类 /// /// 获取未读取消息数量 /// /// public abstract Task GetUnReadMsgCount(); /// /// 设置消息为已读 /// /// 用户账号 public abstract void SetMsgReaded(string username); /// /// 打开好友的聊天窗口(切换当前会话) /// /// 用户账号 public abstract void ToChatWindow(string username); /// /// 清理历史聊天记录 /// public abstract void ClearChatHistoryMsg(); #endregion #region 防撤回类 /// /// 开启/关闭防撤回功能 /// /// 1是开启防撤回,0是关闭 /// public abstract void DisableRevoke(bool status); #endregion #region 二维码识别类 ///// ///// 微信二维码识别接口(小程序码,普通二维码) ///// ///// 二维码图片地址 ///// //public abstract Task ScanQrCode(string file); #endregion 特殊接口类 #region 特殊接口类 ///// ///// 通过手机号/微信号/QQ号查询任意微信号信息 ///// ///// 搜索的内容 ///// //public abstract Task SearchContact(string search); /// /// 添加搜索到的用户 /// /// 搜索到的信息v1 /// 搜索到的信息v2 /// 添加好友附加内容 /// 来源通过微信号搜索添加是3,手机号是15 /// public abstract void AddSearchContact(string v1, string v2, string remark, int source_type); /// /// 用户账号查询详细信息 /// /// 要查询的用户账号(wxid) /// public abstract void GerFriendDetails(string username); /// /// 检查Url在微信中是否有效 /// /// 要检查的url地址 /// public abstract void CheckUrlStatus(string url); #endregion #region 朋友圈类 /// /// 发送服务端_浏览朋友圈 /// /// /// /// public abstract void Ser_GetCircles(string max_id = "0", string username = ""); /// /// 浏览朋友圈 /// /// 首页传0,后续的最后一个朋友圈的object_id /// 查看某个用户朋友圈,可为空 /// public abstract Task GetCircles(string max_id = "0", string username = ""); /// /// 朋友圈点赞 /// /// 朋友圈的object_id /// public abstract void CircleLink(string object_id); /// /// 朋友圈评论 /// /// 朋友圈的object_id /// 评论内容 /// public abstract void CircleComment(string object_id, string content); /// /// 朋友圈上传本地图片 /// /// public abstract void CircleUpLoadImage(string imgData); /// /// 发朋友圈 /// /// 朋友圈xml /// public abstract void SendCircle(string object_desc); #endregion /// /// 小程序自动授权登录 /// /// 小程序id public abstract void AutoAuthMiniAPPLogin(string appid); public string FindNick(string wxid) { try { if (string.IsNullOrWhiteSpace(wxid)) return string.Empty; if (wxid.IsQun())//为群账号,就获取群昵称 { if (!User.Groups.ContainsKey(wxid)) { var ggi = this.GetGroupInfos().Result;//获取群信息 if (ggi != null && ggi.Count != 0) { if (ggi.ContainsKey(wxid)) return (ggi[wxid] as GroupInfo).nickname; } } if (User.Groups.ContainsKey(wxid)) { if (string.IsNullOrWhiteSpace(User.Groups[wxid].nickname)) { var ggi = this.GetGroupInfos().Result;//获取群信息 if (ggi != null && ggi.Count != 0) { if (ggi.ContainsKey(wxid)) return (ggi[wxid] as GroupInfo).nickname; } } return User.Groups[wxid].nickname; } } else { if (!User.Friends.ContainsKey(wxid)) { var friend = GetFriendInfo(wxid).Result; if (friend != null) return friend.nickname; } var ftmp = User.Friends.FirstOrDefault(f => f.Key == wxid).Value; if (ftmp != null) return ftmp.nickname; } } catch (Exception ex) { } return string.Empty; } /// /// 获取群成员昵称 /// /// 群号 /// 需要查找的用户账号 /// public string FindNick(string group, string wxid) { try { if (string.IsNullOrWhiteSpace(wxid)) return string.Empty; var ftmp = User.Friends.FirstOrDefault(f => f.Key == wxid).Value; if (ftmp != null)//如果好友列表中存在就直接读取 return ftmp.nickname; else { if (string.IsNullOrWhiteSpace(group)) return string.Empty; var gtmp = User.Groups.FirstOrDefault(f => f.Key == group).Value; if (gtmp == null) { var gInfo = this.GetGroupMemberInfo(group).Result; //if (gInfo != null && gInfo.FriendDic != null && gInfo.FriendDic.ContainsKey(wxid)) if (gInfo != null) { var g = gInfo as GroupInfo; if (g != null && g.friends != null && g.friends.Count != 0) { ftmp = g.friends.FirstOrDefault(f => f.wxid == wxid); if (ftmp != null) { return ftmp.nickname; } } } } gtmp = User.Groups.FirstOrDefault(f => f.Key == group).Value; if (gtmp != null) { var friendDic = gtmp.friends; if (friendDic != null) { ftmp = friendDic.FirstOrDefault(f => f.wxid == wxid); if (ftmp != null) return ftmp.nickname; } } } } catch (Exception ex) { } return string.Empty; } } }