old_flsystem/类库/Chat.Framework/WXSdk/Implement/WeixinBase.cs

681 lines
24 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Chat.Framework.PCRobotSDK;
using Chat.Framework.WXSdk.Events;
using Chat.Framework.WXSdk.IPAD;
using Google.Protobuf;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WechatProto;
namespace Chat.Framework.WXSdk.Implement
{
/// <summary>
/// 朋友圈评论类型
/// </summary>
public enum CircleCommentType : int
{
= 2,
= 1
}
/// <summary>
/// 微信类型
/// </summary>
public enum WeixinType
{
Grpc微信 = 1,
Hook微信 = 2,
QYHook微信 = 3
}
/// <summary>
/// 协议类型
/// </summary>
public enum LoginDeviceType : int
{
= 0,
Ipad = 1,
Mac = 3,
Windows = 5,
QQBrowser = 7
}
/// <summary>
/// 协议操作类型
/// </summary>
public enum EditContactsType
{
= 2051,
= 2,
= 71,
= 7,
= 7,
= 15,
= 7,
= 2055,
= 7
}
/// <summary>
/// 标签
/// </summary>
public class Lable
{
/// <summary>
/// 标签名称
/// </summary>
public string LabelName { get; set; }
/// <summary>
/// 标签ID
/// </summary>
public string LabelID { get; set; }
}
/// <summary>
/// 微信基础用户
/// </summary>
public class WeixinBaseUser
{
/// <summary>
/// 机器人登录时间
/// </summary>
public DateTime LoginTime { get; private set; }
private long _uin;
private string _nick;
private string _username;
/// <summary>
/// Uin
/// </summary>
public long Uin
{
get
{
if (this.User != null) return this.User.Uin;
else return _uin;
}
}
/// <summary>
/// 机器人昵称
/// </summary>
public string Nick
{
get
{
if (this.User != null) return Encoding.UTF8.GetString(this.User.Nickname.ToArray());
else return _nick;
}
}
/// <summary>
/// 机器人微信id
/// </summary>
public string Username
{
get
{
if (this.User != null) return this.User.Userame;
else return _username;
}
}
public string Data
{
get
{
var _data = this.User.ToByteArray();
return Util.HexToStr(_data);
}
}
internal User User { get; set; }
public WeixinBaseUser()
{
this.LoginTime = DateTime.Now;
}
public WeixinBaseUser(User user)
{
this.User = user;
this.LoginTime = DateTime.Now;
}
public WeixinBaseUser(string data)
{
var temp = Util.StrToHex(data);
this.User = new User();
this.User.MergeFrom(temp);
this.LoginTime = DateTime.Now;
}
public WeixinBaseUser(string username, string nick, long uin = -1)
{
this._username = username;
this._uin = uin;
this._nick = nick;
}
}
/// <summary>
/// 微信基类
/// </summary>
public class WeixinBase : IDisposable
{
/// <summary>
/// 好友列表
/// </summary>
public Dictionary<string, Friend> Friends { get; internal set; }
/// <summary>
/// 用户
/// </summary>
public WeixinBaseUser User { get; set; }
/// <summary>
/// 微信类型
/// </summary>
public WeixinType WeixinType { get; set; }
/// <summary>
/// 微信号
/// </summary>
public string WeixinHao { get; internal set; }
/// <summary>
/// 启动微信
/// </summary>
public virtual void ShowLogin() { }
/// <summary>
/// 退出微信
/// </summary>
public virtual void LoginOut() { }
/// <summary>
/// 退出微信
/// </summary>
/// <param name="message">退出说明</param>
public virtual void LoginOut(string message) { }
/// <summary>
/// 微信状态
/// </summary>
public WxStatus Status { get; set; }
/// <summary>
/// 微信状态改变
/// </summary>
/// <param name="status">状态</param>
/// <param name="e">微信修改状态事件,可为空</param>
/// <param name="is_next">无用</param>
public virtual void ChangeStatus(WxStatus status, WXChangeStatus e = null, bool is_next = true)
{
if (this.Status == status) return;
this.Status = status;
if (e == null)
{
ChatClient.Events.OnEvent(new WXChangeStatus(this));
}
else
{
e.Status = status;
ChatClient.Events.OnEvent(e);
}
if (this.Status == WxStatus.线)
{
LogHelper.GetSingleObj().Debug("", $"微信状态改变:{this.User.Nick}({this.WeixinHao})");
ChatClient.UpdateWXClient(this);
}
}
/// <summary>
/// 重新连接微信
/// </summary>
/// <param name="nextLogin">连接数次</param>
public virtual void ResetConnection(int next = 3) { }
/// <summary>
/// 获得联系人信息
/// </summary>
/// <param name="wxid">用户账号</param>
/// <param name="refresh">时候刷新</param>
/// <returns></returns>
public virtual Friend GetContact(string wxid, bool refresh = false) { return null; }
/// <summary>
/// 发送消息
/// </summary>
/// <param name="username">接收者账号</param>
/// <param name="message">发送的消息</param>
/// <param name="atUsername">艾特用户</param>
public virtual Task<bool> SendMessage(string username, string message, string atUsername = "") { return null; }
/// <summary>
/// 发送小程序
/// </summary>
/// <param name="username">发送给谁</param>
/// <param name="ghid">小程序ID</param>
/// <param name="wxid">所有者wxid</param>
/// <param name="name">小程序名称</param>
/// <param name="title">小程序分享的标题</param>
/// <param name="enterpoint">入口点</param>
/// <param name="headimg">小程序图标</param>
/// <param name="image_key1">缩略图key1</param>
/// <param name="image_key2">缩略图key2</param>
/// <param name="image_key3">缩略图key3</param>
/// <param name="image_size">缩略图大小</param>
public virtual void SendProgramMessage(string username, string ghid, string wxid, string name, string title, string enterpoint, string headimg, string image_key1, string image_key2, string image_key3, string image_size) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 刷新通讯录信息(获取好友列表)
/// </summary>
public virtual void RefreshContact(Action<WXClientImpl_IPAD> method = null) { }
/// <summary>
/// 同意添加我为好友
/// </summary>
/// <param name="token">收到添加好友信息token信息</param>
/// <returns></returns>
public virtual string AgreeAddMe(string token) { return string.Empty; }
/// <summary>
/// 发送图片
/// </summary>
/// <param name="img">图片byte[]</param>
/// <param name="username">接收者账号</param>
public virtual void SendImage(byte[] img, string username) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 分析事件
/// </summary>
/// <param name="obj"></param>
public virtual void Receive(object obj) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 发送卡片消息
/// </summary>
/// <param name="username">接收者账号</param>
/// <param name="friendwxid">卡片用户账号</param>
public virtual void SendCard(string username, string friendwxid) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 获取群成员,不支持pc
/// </summary>
/// <param name="groupid">群id</param>
/// <param name="flag">是否刷新</param>
/// <returns></returns>
public virtual GroupMember[] GetMembers(string groupid, bool flag = false) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 获取群用户信息
/// </summary>
/// <param name="groupid">群</param>
/// <param name="wxid">用户账号</param>
/// <returns></returns>
public virtual GroupMember GetMember(string groupid, string wxid) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 获取群用户信息带刷新
/// </summary>
/// <param name="groupid">群</param>
/// <param name="wxid">用户账号</param>
/// <param name="flush">刷新</param>
/// <returns></returns>
public virtual GroupMember GetMember(string groupid, string wxid, bool flush = false) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 发送图片
/// </summary>
/// <param name="username">接收者账号</param>
/// <param name="address">图片地址</param>
public virtual void SendImage(string username, string address) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 搜索关键词
/// </summary>
/// <param name="keyword">关键词</param>
/// <returns></returns>
public virtual Dictionary<string, object> SerchKeyword(string keyword) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 关注公众号
/// </summary>
/// <param name="username">公众号账号</param>
/// <returns></returns>
public virtual bool FocusWechat(string username) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 发送语音
/// </summary>
/// <param name="username">接收者账号</param>
/// <param name="url">连接</param>
public virtual void SendVoice(string username, string url) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 获得联系人二维码
/// </summary>
/// <param name="Refresh">刷新</param>
/// <returns></returns>
public virtual Bitmap GetRobotQRcode(bool Refresh = false) { return null; }
/// <summary>
/// 验证支付
/// </summary>
/// <param name="code">code</param>
/// <param name="isHongbao">isHongbao</param>
/// <param name="reqKey">reqKey</param>
/// <param name="bank">bank</param>
/// <param name="token">token</param>
/// <param name="pass">pass</param>
/// <returns></returns>
public virtual void SnsVerify(string code, bool isHongbao, string reqKey, BankCar bank, string token, string pass) { throw new Exception("本协议暂时不支持该方法"); }
/// <summary>
/// 下载图片
/// </summary>
/// <param name="msgid">消息id</param>
/// <param name="fromUsername">账号</param>
/// <param name="datatotalength">长度</param>
/// <returns></returns>
public virtual string DownlowdImage(int msgid, string fromUsername, int datatotalength) { return string.Empty; }
/// <summary>
/// 秒发CDN消息
/// </summary>
/// <param name="tousername">接收者账号</param>
/// <param name="cdnurl">cdnurl</param>
/// <param name="aeskey">aeskey</param>
/// <param name="type">type</param>
public virtual void SendCDNInfo(string tousername, string cdnurl, string aeskey, CDNType type) { }
/// <summary>
/// 发送CDN图片
/// </summary>
/// <param name="tousername">接收者账号</param>
/// <param name="data">图片cdn</param>
public virtual void SendCDNImage(string tousername, string data) { }
/// <summary>
/// 发送CDN视频
/// </summary>
/// <param name="tousername">接收者账号</param>
/// <param name="cdnurl">cdnurl</param>
/// <param name="aeskey">aeskey</param>
public virtual void SendCDNVideo(string tousername, string cdnurl, string aeskey) { }
/// <summary>
/// 发送红包
/// </summary>
/// <param name="toUsername">接收者账号</param>
/// <param name="content">content</param>
/// <param name="TotalAmount">TotalAmount</param>
/// <param name="password">password</param>
/// <param name="count">count</param>
/// <param name="type">type</param>
/// <param name="bank">bank</param>
/// <param name="param">param</param>
/// <returns></returns>
public virtual string SendPay(string toUsername, string content, int TotalAmount, string password, int count, PayType type, BankCar bank = null, Dictionary<string, object> param = null) { return string.Empty; }
/// <summary>
/// 获得好友列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public virtual List<T> FindFriends<T>()
{
return null;
}
/// <summary>
/// 获取朋友圈
/// </summary>
/// <returns></returns>
public virtual List<Dictionary<string, object>> FindCircles() { throw new Exception("此协议不支持,FindCircles!"); }
/// <summary>
/// 获取群列表(不包含群成员)
/// </summary>
/// <returns></returns>
public virtual List<Friend> GetGroupsNotInMember() { return null; }
/// <summary>
/// 检测URL在微信中是否有效
/// </summary>
/// <param name="url">url</param>
/// <returns>0可以访问 -x 负值代表不能访问</returns>
public virtual bool CheckUrl(string url) { throw new Exception("此协议不支持,CheckUrl!"); }
/// <summary>
/// 打开内置浏览器
/// </summary>
/// <param name="url">url</param>
/// <returns></returns>
public virtual void OpenUrl(string url) { throw new Exception("此协议不支持,OpenUrl!"); }
/// <summary>
/// 清理历史聊天记录
/// </summary>
/// <returns></returns>
public virtual void ClearChatHistoryMsg() { throw new Exception("此协议不支持,ClearChatHistoryMsg!"); }
/// <summary>
/// 设置会话已读
/// </summary>
public virtual void SetSessionReadedMsg(string wxid) { throw new Exception("此协议不支持,SetSessionReadedMsg!"); }
/// <summary>
/// 修改群聊名称
/// </summary>
/// <param name="new_name">新的群名</param>
/// <param name="groupId">群id</param>
public virtual void SetRoomName(string new_name, string groupId) { throw new Exception("此协议不支持,SetRoomName!"); }
/// <summary>
/// 修改群公告(可用于@全体)
/// </summary>
/// <param name="notice">新公告</param>
/// <param name="groupId">群聊wxid</param>
public virtual void SetRoomNotice(string notice, string groupId) { throw new Exception("此协议不支持,SetRoomNotice!"); }
/// <summary>
/// 设置自己在群中昵称
/// </summary>
/// <param name="nickname">要设置的昵称</param>
/// <param name="groupId">需要设置的群id</param>
public virtual void ModRoomMyName(string nickname, string groupId) { throw new Exception("此协议不支持,ModRoomMyName!"); }
/// <summary>
/// 设置是否显示群成员昵称
/// </summary>
/// <param name="status">true为开启</param>
/// <param name="groupId">要显示得到群</param>
public virtual void SetRoomShowMemeberName(bool status, string groupId) { throw new Exception("此协议不支持,SetRoomShowMemeberName!"); }
/// <summary>
/// 修改群聊名称
/// </summary>
/// <param name="newnick">新名称</param>
/// <param name="groupId">群号</param>
public virtual void ModRoomName(string newnick, string groupId) { throw new Exception("此协议不支持,ModRoomName!"); }
/// <summary>
/// 是否消息免打扰
/// </summary>
/// <param name="status">true为开启</param>
/// <param name="wxid">wxid</param>
public virtual void SetRecvNotify(bool status, string wxid) { throw new Exception("此协议不支持,SetRecvNotify!"); }
/// <summary>
/// 创建群聊
/// </summary>
/// <param name="members">用户账号用英文逗号分隔</param>
public virtual string CreateChatRoom(string members) { throw new Exception("此协议不支持,CreateChatRoom!"); }
/// <summary>
/// 创建群
/// </summary>
/// <param name="wxids">用户账号3个或者以上</param>
public virtual string CreateChatRoom(string[] wxids) { throw new Exception("此协议不支持,CreateChatRoom!"); }
/// <summary>
/// 添加群用户
/// </summary>
/// <param name="groupid">群号</param>
/// <param name="members">用户wxid多个用户逗号分隔</param>
public virtual void AddChatRoomMember(string groupid, string members) { throw new Exception("此协议不支持,AddChatRoomMember!"); }
/// <summary>
/// 添加群用户_40人以下
/// </summary>
/// <param name="groupid">群id</param>
/// <param name="members">用户账号多个用英文逗号分隔</param>
public virtual void AddChatRoomMember_40Down(string groupid, string members) { throw new Exception("此协议不支持,AddChatRoomMember!"); }
/// <summary>
/// 关注公众号
/// </summary>
/// <param name="wxid">公众号wxid</param>
public virtual void AddPublicUser(string wxid) { throw new Exception("此协议不支持,AddPublicUser!"); }
/// <summary>
/// 开启/关闭防撤回功能
/// </summary>
/// <param name="status">1是开启防撤回0是关闭</param>
public virtual void SetDisableRevoke(bool status) { throw new Exception("此协议不支持,SetDisableRevoke!"); }
/// <summary>
/// 发表朋友圈
/// </summary>
/// <param name="msg">内容-需要携带至少一张图片,例如:[图片=路径]</param>
/// <returns></returns>
public virtual string SendCircle(string msg) { throw new Exception("此协议不支持,SendCircle!"); }
/// <summary>
/// 发表评论
/// </summary>
/// <param name="username">发送的微信ID</param>
/// <param name="circleId">朋友圈的ID</param>
/// <param name="content">发送的内容</param>
/// <returns></returns>
public virtual void SendCircleComment(string username, string circleId, string content) { throw new Exception("此协议不支持,SendCircleComment!"); }
/// <summary>
/// 点赞
/// </summary>
/// <param name="username">账号</param>
/// <param name="circleId">朋友圈id</param>
public virtual void SendCirclePraise(string username, string circleId) { throw new Exception("此协议不支持,SendCirclePraise!"); }
/// <summary>
/// 获取朋友圈
/// </summary>
/// <param name="username">微信ID</param>
/// <param name="firstPageMd5">页码</param>
/// <param name="MaxId">页码ID</param>
/// <returns></returns>
public virtual List<Dictionary<string, object>> FindCircle(string username, string firstPageMd5 = "", long MaxId = 0) { throw new Exception("此协议不支持,FindCircle!"); }
/// <summary>
/// 自动授权登录小程序
/// </summary>
/// <param name="appid">appid</param>
public virtual string AutoAuthMiniAPPLogin(string appid) { throw new Exception("此协议不支持,AutoAuthMiniAPPLogin!"); }
private static LogHelper log = new LogHelper();
/// <summary>
/// 写出日志
/// </summary>
/// <param name="msg">内容</param>
/// <param name="debug">是否为debug</param>
public void WriteLog(string msg, bool debug = false)
{
ChatClient.Events.OnEvent(new WXWriteLog(this) { IsDebug = debug, Message = msg });
}
/// <summary>
/// 编辑用户信息
/// </summary>
/// <param name="username">操作用户</param>
/// <param name="type">操作类型</param>
/// <param name="remark">如果Type=备注,为空表示取消备注,不为空表示备注所填写内容</param>
public virtual void EditContacts(string username, EditContactsType type, string remark = "") { }
/// <summary>
/// 删除朋友
/// </summary>
/// <param name="username">用户wxid</param>
/// <returns></returns>
public virtual string DeleteFriend(string username) { return null; }
/// <summary>
/// 邀请入群
/// </summary>
/// <param name="username">用户wxid</param>
/// <param name="groupId">群id</param>
/// <returns></returns>
public virtual string InviteIntoGroup(string username, string groupId) { return null; }
/// <summary>
/// 删除群用户
/// </summary>
/// <param name="username">用户账号</param>
/// <param name="groupId">群id</param>
/// <returns></returns>
public virtual string DeleteGroupMember(string username, string groupId) { return null; }
public void Dispose()
{
}
public virtual Dictionary<string, object> GetBalance() { return null; }
/// <summary>
/// 领取转账
/// </summary>
/// <param name="Invalidtime">收到转账中的Invalidtime</param>
/// <param name="Transferid">收到转账中的Transferid</param>
/// <param name="FromUsername">收到转账中的FromUsername</param>
/// <returns></returns>
public virtual int TenPayTransferConfirm(string Invalidtime, string Transferid, string FromUsername) { return -1; }
/// <summary>
/// 获取标签组
/// </summary>
/// <param name="refresh">是否刷新标签组</param>
/// <returns></returns>
public virtual List<Lable> GetLabelList(bool refresh = false) { throw new Exception("此协议不支持,GetTagList!"); }
/// <summary>
/// 添加标签
/// </summary>
/// <param name="TagName">标签名称</param>
/// <returns></returns>
public virtual bool AddLabel(string TagName) { throw new Exception("此协议不支持,AddTag!"); }
/// <summary>
/// 批量修改标签
/// </summary>
/// <param name="Users">用户信息</param>
/// <param name="Lable">标签组</param>
/// <returns></returns>
public virtual bool EditUserLabel(string[] Users, List<Lable> Lable) { throw new Exception("此协议不支持,ModifyUserTag!"); }
///// <summary>
///// 获取PC微信登录二维码
///// </summary>
///// <returns></returns>
//public virtual RemoteLoginCode GetLoginCode() { throw new Exception("此协议不支持,GetLoginCode!"); }
}
}