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