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

688 lines
24 KiB
C#
Raw Normal View History

2022-09-20 03:10:29 +00:00

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("本协议暂时不支持该方法"); }
2022-11-12 08:55:55 +00:00
/// <summary>
/// 发送Xml卡片消息
/// </summary>
/// <param name="username"></param>
/// <param name="xml"></param>
public virtual void SendCardXml(string username, string xml) { throw new Exception("本协议暂时不支持该方法"); }
2022-09-20 03:10:29 +00:00
/// <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!"); }
}
}