old_flsystem/PCRobot/PCWechat/Wechat_Xiaoxie_QY - 3.1.10....

2456 lines
136 KiB
C#
Raw Permalink 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 CsharpHttpHelper;
using Newtonsoft.Json;
using NM_WeChat;
using PCRobot.Entitys;
using PCRobot.Pack;
using PCRobot.Properties;
using PCRobot.Utils;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using System.Web.Caching;
using System.Windows.Forms;
namespace PCRobot.PCWechat
{
/*
接口文档https://www.showdoc.cc/WxWorkNewHook?page_id=3846144660177490
/////密码784615627.
*/
public class Wechat_Xiaoxie_QY : BaseApi
{
#region
public delegate void AcceptCallbackFunc(uint dwClientId);
public delegate void RecvCallbackFunc(uint dwClientId, IntPtr intPtr, uint dwSize);
public delegate void CloseCallbackFunc(uint dwClientId);
private static AcceptCallbackFunc m_AcceptCallbackFunc;
private static RecvCallbackFunc m_RecvCallbackFunc;
private static CloseCallbackFunc m_CloseCallbackFunc;
// 引入DLL导出函数
//[DllImport("Bin\\WeChatServer_QY.dll")]
[DllImport("Bin\\WxWorkLoader.dll")]
public static extern bool InitWxWorkSocket(AcceptCallbackFunc acceptCallback,
RecvCallbackFunc recvCallback, CloseCallbackFunc closeCallback);
[DllImport("Bin\\WxWorkLoader.dll")]
public static extern uint InjectWxWork(byte[] strDllPath, byte[] strWxWorkExePath);
[DllImport("Bin\\WxWorkLoader.dll")]
public static extern uint InjectWxWorkMultiOpen(byte[] strDllPath, byte[] strWxWorkExePath);
[DllImport("Bin\\WxWorkLoader.dll")]
public static extern bool SendWxWorkData(uint dwClienId, byte[] strJsonData);
[DllImport("Bin\\WxWorkLoader.dll")]
public static extern bool DestroyWxWork();
[DllImport("Bin\\WxWorkLoader.dll")]
public static extern uint InjectWxWorkPid(int dwPid, byte[] strDllPath);
[DllImport("Bin\\WxWorkLoader.dll")]
public static extern bool UseUtf8();
[DllImport("Bin\\WxWorkLoader.dll")]
public static extern bool GetUserWxWorkVersion(StringBuilder v);
[DllImport("Bin\\WxWorkLoader.dll", EntryPoint = "SendWxWorkData")]
public static extern bool _SendWxWorkData(uint dwClienId, byte[] strJsonData);
public bool SendWxWorkData(uint dwClienId, string strJsonData)
{
var ss = User.DwClientId;
if (WechatClient.IsDebug)
LogHelper.GetSingleObj().Debug("_调试发送_", $"{dwClienId} -> {strJsonData} - {User != null} - 微信id:{User?.Wxid}");
if (User != null && !string.IsNullOrEmpty(User.Wxid))
{
var json = HttpExtend.JsonToDictionary(strJsonData);
var type = json["type"].ToString();
MsgType msgType;
if (!Enum.TryParse(type, out msgType))
{
if (WechatClient.IsDebug)
LogHelper.GetSingleObj().Debug("调试发送@转换失败", $"{dwClienId} -> type{type}");
return false;
}
switch (msgType)
{
//截取发送消息 - 为是否是辅助输入提供判断
case MsgType.MT_SEND_TEXT_MSG:// 发送文本消息
case MsgType.MT_SEND_IMAGE_MSG:// 发送图片消息
case MsgType.MT_SEND_FILE_MSG:// 发送文件消息
case MsgType.MT_SEND_FOLDER_MSG:// 发送目录消息
case MsgType.MT_SEND_LINK_MSG:// 发送链接消息
//case MsgType.MT_SEND_PERSON_CARD_MSG:// 发送个人名片
case MsgType.MT_SEND_VIDEO_MSG:// 发送视频
{
json = json["data"] as Dictionary<string, object>;
string conversation_id = json["conversation_id"].ToString();
var to_wxid = conversation_id;
if (conversation_id.StartsWith("S:"))//私人消息处理一下,群消息不用管
{
to_wxid = conversation_id.Replace($"S:{User.Wxid}_", "");
}
string message = string.Empty;
if (json.ContainsKey("content")) message = json["content"].ToString();
else if (json.ContainsKey("card_wxid")) message = json["card_wxid"].ToString();
else if (json.ContainsKey("file")) message = json["file"].ToString();
//else if (json.ContainsKey("user_id")) message = json["user_id"].ToString();
if (!string.IsNullOrEmpty(message))
{
Common.SetCache(User.Wxid, to_wxid, message);
}
}
break;
}
}
return _SendWxWorkData(dwClienId, Encoding.UTF8.GetBytes(strJsonData));
}
static string DllPath = HttpExtend.MapFile($"WxWorkHelper_{Version}.dll", "Bin");
//private const string Version = "3.0.27.2701";
//private const string PcMd5 = "DE820FFBA84BC8E4C89A9C4857420BB7";//3.0.27.2701
//private const string Version = "3.1.1.3001";
//private const string PcMd5 = "7EBF31BC0617397614E72907260B2A15";//3.1.1.3001
private const string Version = "3.1.10.3010";
private const string PcMd5 = "5E7DF89ECC5FC04F1ECB96C1EE72F17E";//3.1.10.3010
public override string GetVersion()
{
return Version;
}
public Wechat_Xiaoxie_QY(WechatUser User) : base(User) { }
public static void Install()
{
if (IsQYInstall) return;
try
{
m_AcceptCallbackFunc = WxAcceptCallback;
m_RecvCallbackFunc = WxRecvCallback;
m_CloseCallbackFunc = WxCloseCallback;
UseUtf8();
// 初始化Callback
InitWxWorkSocket(m_AcceptCallbackFunc, m_RecvCallbackFunc, m_CloseCallbackFunc);
StringBuilder sb = new StringBuilder();
var path1 = HttpExtend.MapPath("WXWork");
var path2 = HttpExtend.MapPath("WXWork\\" + Version);
InitPc();
}
catch (Exception)
{
}
finally
{
IsQYInstall = true;
}
}
/// <summary>
/// 是否替换
/// </summary>
private static bool IsReplace = false;
/// <summary>
/// pj文件需要杀死进程,并替换文件
/// </summary>
public static void PJFileReplace()
{
if (IsReplace) return;
IsReplace = true;
try
{
KillPc();
var path2 = HttpExtend.MapPath("WXWork\\" + Version);
var fixName = HttpExtend.MapFile("Fix2.dll", path2);
var msimgName = HttpExtend.MapFile("msimg32.dll", path2);
//if (!Environment.Is64BitOperatingSystem)
//{
// #region 32位系统
// //Util.WriteResource(fixName, Resources.Fix2_QY_32);
// //Util.WriteResource(msimgName, Resources.msimg32_QY_32);
// #endregion
//}
//else
//{
// #region 64位系统
// Util.WriteResource(fixName, Resources.Fix2_QY);
// Util.WriteResource(msimgName, Resources.msimg32_QY);
// #endregion
//}
//Util.WriteResource(fixName, Resources.Fix2_QY);
//Util.WriteResource(msimgName, Resources.msimg32_QY);
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 杀死注入 pc
/// </summary>
/// <param name="isInject"></param>
private static void KillPc(bool isInject = false)
{
Process[] MyProcesses = Process.GetProcesses();
var path1 = HttpExtend.MapPath("WXWork");
var path2 = HttpExtend.MapPath("WXWork\\" + Version);
foreach (Process MyProcess in MyProcesses)
{
try
{
var name = MyProcess.ProcessName.ToUpper();
if (name == "WXWORK" && MyProcess.MainModule.FileName.StartsWith(path1))
{
try
{
//判断微信版本
if (MyProcess.MainModule.FileName.StartsWith(path2))
{
var id = MyProcess.Id;
if (isInject)
{
var result = Task<bool>.Factory.StartNew(delegate
{
try
{
var WechatWinFile = CsharpHttpHelper.HttpExtend.MapFile("WXWork.exe", $"WXWork\\{Version}");
var md5 = Common.GetMD5Hash(WechatWinFile).ToUpper();
if (!File.Exists(WechatWinFile) || md5 != PcMd5.ToUpper())
{
return false;
}
else
{
LogHelper.GetSingleObj().Info("系统", $"开始企业注入进程:{id}...");
var uin = InjectWxWorkPid(id, Encoding.UTF8.GetBytes(DllPath));
LogHelper.GetSingleObj().Info("系统", $"注入企业成功:{id},句柄ID:{uin}");
return true;
}
}
catch (Exception)
{ }
return false;
}).Wait(20000);
if (!result)
{
try
{
LogHelper.GetSingleObj().Info("系统cc", "杀死企业进程:" + MyProcess.Id);
MyProcess.Kill();
}
catch (Exception)
{ }
}
}
else
{
try
{
LogHelper.GetSingleObj().Info("主动dd", "杀死进程:" + MyProcess.Id);
MyProcess.Kill();
}
catch (Exception)
{ }
}
}
}
catch (Exception)
{ }
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
}
private static void InitPc()
{
if (Util.IsLinshi())
PJFileReplace();
else
{
IsReplace = false;
var isZanYong = DeletePJFile();
KillPc(!isZanYong);
if (isZanYong)
{
isZanYong = DeletePJFile();
if (isZanYong)
throw new Exception("文件处理异常,,");
}
}
}
/// <summary>
/// 破解文件是否暂用
/// </summary>
/// <returns></returns>
private static bool DeletePJFile()
{
var isZanYong = false;
var path2 = HttpExtend.MapPath("WXWork\\" + Version);
var fixName = HttpExtend.MapFile("Fix2.dll", path2);
var msimgName = HttpExtend.MapFile("msimg32.dll", path2);
try
{
if (File.Exists(fixName))
File.Delete(fixName);
if (File.Exists(msimgName))
File.Delete(msimgName);
}
catch (Exception ex)
{
isZanYong = true;
}
return isZanYong;
}
private static string RemoteCache = "get_login_code_cache_workwechat";
/// <summary>
/// 等待登录结果
/// </summary>
public static Dictionary<string, string> WaitLoginResult = new Dictionary<string, string>();
/// <summary>
/// 远程登录微信
/// </summary>
public static List<RemoteLoginCode> RemoteLoginCodes = new List<RemoteLoginCode>();
/// <summary>
/// pc微信登录二维码
/// </summary>
/// <param name="ServerMsgID"></param>
public static void LoginQrcode(string ServerMsgID)
{
try
{
RemoteLoginCode result = null;
try
{
string downloadsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var wxConfig = HttpExtend.MapFile(@"Config.cfg", downloadsPath + @"\WXWork\Global");
if (File.Exists(wxConfig))
{
try
{
File.Delete(wxConfig);
}
catch (Exception)
{ }
StartWechat(true);
}
}
catch (Exception ex)
{
result = new RemoteLoginCode() { pid = -1, rType = RobotType., b64Md5 = ex.Message };
}
if (result == null)
{
result = Task.Factory.StartNew<RemoteLoginCode>(delegate ()
{
var awaitTime = DateTime.Now.AddSeconds(10);
do
{
Thread.Sleep(200);
Cache cache = HttpRuntime.Cache;
object item = cache[RemoteCache];
if (item != null)
{
cache.Remove(RemoteCache);
var r = item as RemoteLoginCode;
return r;
}
} while (awaitTime >= DateTime.Now);
return null;
}).Result;
}
var socketClient = EasySoc.GetSocket();
var msg = new CommonResult();
msg.RobotUsername = string.Empty;
msg.RobotUsernick = string.Empty;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvLoginCode_workWeChat;
msg.Data = result == null ? string.Empty : JsonConvert.SerializeObject(result);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 卸载安装
/// </summary>
public static void UnInstall()
{
try
{
//DestroyWxWork();
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "..");
}
}
#endregion
private static Dictionary<uint, int> MT_APP_READY_MSG_BIND = new Dictionary<uint, int>();
private static readonly object Friend_Lock = new object();
// 接收消息回调
private static void WxRecvCallback(uint _dwClient, IntPtr intPtr, uint dwSize)
{
try
{
byte[] body = new byte[dwSize];
Marshal.Copy(intPtr, body, 0, body.Length);
var recvData = Encoding.UTF8.GetString(body).Replace("\0", "").Trim();//再转成UTF8
var dwClientid = _dwClient;
if (WechatClient.IsDebug)
LogHelper.GetSingleObj().Debug("调试企业收到文本消息", $"{dwClientid} -> {recvData}\r\n");
//var method = new Action(delegate ()
Task.Factory.StartNew(delegate ()
{
try
{
Console.WriteLine("企业收到消息:" + recvData);
var json = CsharpHttpHelper.HttpExtend.JsonToDictionary(recvData);
var type = json["type"].ToString();
var data = json.ContainsKey("data") ? json["data"] as Dictionary<string, object> : null;
MsgType msgType;
if (!Enum.TryParse(type, out msgType)) return;
Console.WriteLine($"dwClientid = {dwClientid}");
switch (msgType)
{
case MsgType.MT_APP_READY_MSG:
MT_APP_READY_MSG_BIND[dwClientid] = int.Parse(data["pid"].ToString());
break;
case MsgType.MT_PARAMS_ERROR_MSG:
{ }
break;
case MsgType.MT_USER_LOGIN://登陆消息
{
var wxid = data["user_id"].ToString();
var user = WechatClient.GetUser(wxid, dwClientid, WechatType.Xiaoxie_QY);
user.Nickname = data["username"].ToString();
user.HeaderUrl = data["avatar"].ToString();
//user.DBFile = data["wx_user_dir"].ToString();
user.Pid = MT_APP_READY_MSG_BIND.ContainsKey(dwClientid) ? MT_APP_READY_MSG_BIND[dwClientid] : 0; //uint.Parse(data["pid"].ToString());
user.Phone = data["mobile"].ToString();
user.Uin = wxid;
WechatClient.OnRefUserEvent(user, WaitLoginResult);
}
break;
case MsgType.MT_USER_LOGOUT:
{
var wxid = data["user_id"].ToString();
var user = WechatClient.Users.FirstOrDefault(f => f.Key == wxid).Value;
if (user != null)
{
LogHelper.GetSingleObj().Info("系统", $"LogOut_QY事件退出,Uin:{user.Uin},微信:{user.Nickname}({wxid})");
WechatClient.RemoveUser(user);
}
}
break;
case MsgType.MT_LOGIN_QRCODE_MSG:
{
//{"data":{"file":"C:\\Users\\秒单客006\\Documents\\WXWork\\Global\\Image\\089d9de9-cc40-458a-af4a-b39a04e2f95f.jpg"},"type":11028}
if (!data.ContainsKey("file")) return;
if (MT_APP_READY_MSG_BIND.ContainsKey(dwClientid))
{
var file = data["file"].ToString();
if (File.Exists(file))
{
var cfBase64 = Common.ConvertImageToBase64(Image.FromFile(file));
var codeInfo = new RemoteLoginCode() { pid = MT_APP_READY_MSG_BIND[dwClientid], cImgB64 = cfBase64, b64Md5 = HttpHelper.ToMD5(cfBase64), rType = RobotType., t = HttpExtend.GetTimeStamp(DateTime.Now) };
Cache cache = HttpRuntime.Cache;
//查找 md5 的缓存,不存在则返回null
object item = cache[RemoteCache];
cache.Insert(RemoteCache, codeInfo, null, DateTime.Now.AddSeconds(3), Cache.NoSlidingExpiration);
RemoteLoginCodes.Add(codeInfo);
}
}
}
break;
case MsgType.MT_RECV_MINIAPP_MSG://收到小程序
{
//个人微信/企业微信
//{"data":{"content_type":78,"conversation_id":"R:10696053211018728","enterpoint":"pages/tab/home/index.html?_um_ssrc=oucfI5QRI-8SbyOTKSGYt5-ia0dk&_um_sts=1610033684099","ghid":"gh_a0d7a7672cf7@app","headimg":"http://wx.qlogo.cn/mmhead/Q3auHgzwzM43LsxpXHKd7ua7kwMZQ8WHmZlkYTzr3Tdm8sMOJ7Ypog/96","image_key1":"306b020102046430620201000204bafc490e02030f4df9020473e6607102045ff72a530436333133373039353935305f313734393433343231315f3262393764653133616335373232353633383831336564376334396563616164020100020300ab1004000201010201000400","image_key2":"61747072666A766977766D69726D6168","image_key3":"2b97de13ac57225638813ed7c49ecaad","image_size":43791,"is_pc":0,"local_id":"155","name":"啄木鸟家庭维修","receiver":"1688853956558440","send_time":"1610033747","sender":"7881302484994318","sender_name":"、","server_id":"1042188","title":"直营一口价,维修无猫腻","wxid":"wx3d6b1af0cb07fa5a"},"type":11066}
if (data == null) return;
var socketClient = EasySoc.GetSocket();
//var content_type = data["content_type"]?.ToString();//内容类型 78
//var conversation_id = data["conversation_id"]?.ToString();//接收者的的会话ID
//var enterpoint = data["enterpoint"]?.ToString();//入口点 - 链接(小程序里面的链接)
//var receiver = data["receiver"]?.ToString();// 接收者的user_id
//var sender = data["sender"]?.ToString();// 发送者的user_id
//var sender_name = data["sender_name"]?.ToString();//发送者昵称
//var server_id = data["server_id"]?.ToString();//消息的服务器ID
var content_type = data["content_type"]?.ToString();//内容类型 78
var conversation_id = data["conversation_id"]?.ToString();//接收者的的会话ID
var enterpoint = data["enterpoint"]?.ToString();//入口点 - 链接(小程序里面的链接)
var headimg = data["headimg"]?.ToString();//小程序的头像
var name = data["name"]?.ToString();//小程序的名称
var receiver = data["receiver"]?.ToString();// 接收者的user_id
var sender = data["sender"]?.ToString();// 发送者的user_id
var sender_name = data["sender_name"]?.ToString();//发送者昵称
var title = data["title"]?.ToString();//小程序标题
var wxid = data["wxid"]?.ToString();
var server_id = data["server_id"]?.ToString();//消息的服务器ID
var isSend = false;
var RobotUsername = string.Empty;
var RobotUsernick = string.Empty;
var FromUsername = string.Empty;
var FromUsernick = string.Empty;
//if (content_type != "78")//0自己发送的消息
//{
// if (!WechatClient.IsAuxiliaryInput(sender, receiver, enterpoint))
// {
// Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + enterpoint);
// return;
// }
// var ass = WechatClient.IsAssistance(sender, receiver, dwClientid, WechatType.Xiaoxie_QY);
// if (ass.type == WechatClient.AssistanceType.终止) return;
// isSend = ass.type == WechatClient.AssistanceType.辅助;
// RobotUsername = ass.robotName;
// RobotUsernick = ass.robotNick;
// FromUsername = ass.fromName;
// FromUsernick = ass.fromNick;
//}
//else
//{
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
if (user == null)
return;
RobotUsername = user.Wxid;
RobotUsernick = user.Nickname;
FromUsername = sender;
FromUsernick = sender_name;
//}
var wmsg = new WorkWechatReceiveMsg();
wmsg.Cmd = PCRobotCMD.rcvTxt_workWeChat;
wmsg.IsSend = isSend;
wmsg.RobotUsername = RobotUsername;
wmsg.RobotUsernick = RobotUsernick;
wmsg.RobotType = RobotType.;
wmsg.FromMessageType = WechatMsgType.;
if (conversation_id.Contains("R:"))
{
wmsg.FromGroupid = conversation_id;
wmsg.FromUsername = sender;
wmsg.FromUsernick = sender_name;
}
else
{
wmsg.FromUsername = FromUsername;
wmsg.FromUsernick = FromUsernick;
}
wmsg.FromMessage = enterpoint.Replace("pages/index/index.html?goods_id=", "https://mobile.yangkeduo.com/goods.html?goods_id=").Replace("pages/item/detail/detail.html?sku=", @"https://item.jd.com/");
socketClient.Send(wmsg);
}
break;
case MsgType.MT_RECV_TEXT_MSG://收到文本
{
if (data == null) return;
var socketClient = EasySoc.GetSocket();
var content_type = data["content_type"]?.ToString(); //企业微信消息类型
#region
#region
//{"data":{"content":"我17","content_type":2,"conversation_id":"S:1688853956558440_7881301610989604","local_id":"19","receiver":"1688853956558440","send_time":"1584013142","sender":"7881301610989604","sender_name":"17","server_id":"1000481"},"type":11041} - 通过好友返回的数据
//{"data":{"content":"哦哦哦","content_type":2,"conversation_id":"S:1688853956558440_7881301610989604","local_id":"33","receiver":"1688853956558440","send_time":"1584014191","sender":"7881301610989604","sender_name":"17","server_id":"1000520"},"type":11041} - 别人给我发了条消息
//{"data":{"content":"图婆","content_type":2,"conversation_id":"S:1688853956558440_7881301610989604","local_id":"36","receiver":"1688853956558440","send_time":"1584014736","sender":"7881301610989604","sender_name":"17","server_id":"1000542"},"type":11041}
//{"data":{"content":"哦哦哦","content_type":0,"conversation_id":"S:1688853956450720_1688853956558440","local_id":"22","receiver":"1688853956450720","send_time":"1584013962","sender":"1688853956558440","sender_name":"华","server_id":"1000498"},"type":11041} - 收到自己发的消息
//{"data":{"content":"给我发条消息","content_type":0,"conversation_id":"S:1688853956450720_1688853956558440","local_id":"23","receiver":"1688853956450720","send_time":"1584014066","sender":"1688853956558440","sender_name":"华","server_id":"1000500"},"type":11041}
//{"data":{"content":"饿的","content_type":0,"conversation_id":"R:10696053211008104","local_id":"42","receiver":"R:10696053211008104","send_time":"1584015069","sender":"1688853956558440","sender_name":"吴嘉华","server_id":"1000574"},"type":11041} - 收到自己发送的群消息
#endregion
//{"data":{"at_list":[],"content":"我是机器学习","content_type":2,"conversation_id":"S:1688853764215634_7881300713013122","local_id":"27946","receiver":"1688853764215634","send_time":"1589009390","sender":"7881300713013122","sender_name":"机器学习","server_id":"1088720"},"type":11041}
//0、2 - 发送的文字 0
if (content_type == "0" || content_type == "2")
{
var content = data["content"]?.ToString(); //文本消息内容
var conversation_id = data["conversation_id"]?.ToString(); //会话ID
var local_id = data["local_id"]?.ToString(); //消息的本地ID
var receiver = data["receiver"]?.ToString(); //接收者的user_id
var send_time = data["send_time"]?.ToString(); //消息时间戳
var sender = data["sender"]?.ToString(); //发送者的user_id
var sender_name = data["sender_name"]?.ToString(); //发送者昵称
var server_id = data["server_id"]?.ToString(); //消息的服务器ID
var isSend = false;
var RobotUsername = string.Empty;
var RobotUsernick = string.Empty;
var FromUsername = string.Empty;
var FromUsernick = string.Empty;
if (content_type == "0")//0自己发送的消息
{
if (!WechatClient.IsAuxiliaryInput(sender, receiver, content))
{
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + content);
return;
}
var ass = WechatClient.IsAssistance(sender, receiver, dwClientid, WechatType.Xiaoxie_QY);
if (ass.type == WechatClient.AssistanceType.) return;
isSend = ass.type == WechatClient.AssistanceType.;
RobotUsername = ass.robotName;
RobotUsernick = ass.robotNick;
FromUsername = ass.fromName;
FromUsernick = ass.fromNick;
}
else
{
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
if (user == null)
return;
RobotUsername = user.Wxid;
RobotUsernick = user.Nickname;
FromUsername = sender;
FromUsernick = sender_name;
}
var wmsg = new WorkWechatReceiveMsg();
wmsg.Cmd = PCRobotCMD.rcvTxt_workWeChat;
wmsg.IsSend = isSend;
wmsg.RobotUsername = RobotUsername;
wmsg.RobotUsernick = RobotUsernick;
wmsg.RobotType = RobotType.;
wmsg.FromMessageType = WechatMsgType.;
if (conversation_id.Contains("R:"))
{
wmsg.FromGroupid = conversation_id;
wmsg.FromUsername = sender;
wmsg.FromUsernick = sender_name;
}
else
{
wmsg.FromUsername = FromUsername;
wmsg.FromUsernick = FromUsernick;
}
wmsg.FromMessage = content;
socketClient.Send(wmsg);
}
#endregion
}
break;
case MsgType.MT_RECV_IMG_MSG://收到图片
{
#region
#region
//{"data":{"content_type":101,"conversation_id":"R:10696053211008104","file_name":"7305d3cd-e94f-47db-a604-ce079e6c9ac5.jpg","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Image\\2020-03\\7305d3cd-e94f-47db-a604-ce079e6c9ac5.jpg","file_size":19457,"local_id":"73","receiver":"1688853956558440","send_time":"1584028981","sender":"7881301364988874","sender_name":"18","server_id":"1000677"},"type":11042} - 别人在群发的图片
//{"data":{"content_type":101,"conversation_id":"S:1688853956558440_7881301364988874","file_name":"29c9c19d-e8d7-4cb0-95b5-e1a7d385003a.jpg","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Image\\2020-03\\29c9c19d-e8d7-4cb0-95b5-e1a7d385003a.jpg","file_size":19457,"local_id":"74","receiver":"1688853956558440","send_time":"1584029032","sender":"7881301364988874","sender_name":"18","server_id":"1000680"},"type":11042} - 别人私聊发的图片
//{"data":{"content_type":14,"conversation_id":"R:10696053211008104","file_name":"0f7890b8ea01f7205a76d1195dab66b0.png","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Image\\2020-03\\0f7890b8ea01f7205a76d1195dab66b0.png","file_size":1627,"local_id":"75","receiver":"R:10696053211008104","send_time":"1584029085","sender":"1688853956558440","sender_name":"吴嘉华","server_id":"1000685"},"type":11042} - 自己群里发的图片
//{"data":{"content_type":14,"conversation_id":"S:1688853956558440_7881301364988874","file_name":"9c6d1a59d8f122fc85c3435ea2aa46fc.jpg","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Image\\2020-03\\9c6d1a59d8f122fc85c3435ea2aa46fc.jpg","file_size":178092,"local_id":"76","receiver":"7881301364988874","send_time":"1584029534","sender":"1688853956558440","sender_name":"吴嘉华","server_id":"1000689"},"type":11042} - 自己私聊发的图片
#endregion
//14、101 14
if (data == null) return;
var content_type = data["content_type"]?.ToString(); //企业微信消息类型
if (content_type == "14") return;
var socketClient = EasySoc.GetSocket();
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
if (user == null)
return;
var conversation_id = data["conversation_id"]?.ToString(); //会话ID
var local_id = data["local_id"]?.ToString(); //消息的本地ID
var receiver = data["receiver"]?.ToString(); //接收者的user_id
var send_time = data["send_time"]?.ToString(); //消息时间戳
var sender = data["sender"]?.ToString(); //发送者的user_id
var sender_name = data["sender_name"]?.ToString(); //发送者昵称
var server_id = data["server_id"]?.ToString(); //消息的服务器ID
var file_path = data["file_path"]?.ToString(); //图片路径
var wmsg = new WorkWechatReceiveMsg();
wmsg.Cmd = PCRobotCMD.rcvImg_workWeChat;
wmsg.RobotType = RobotType.;
wmsg.IsSend = false;
wmsg.RobotUsername = user.Wxid;
wmsg.RobotUsernick = user.Nickname;
wmsg.FromMessage = $"[图片={file_path}]";
wmsg.FromMessageType = WechatMsgType.;
if (conversation_id.Contains("R:"))
{
wmsg.FromGroupid = conversation_id;
wmsg.FromUsername = sender;
wmsg.FromUsernick = sender_name;
}
else
{
wmsg.FromUsername = sender;
wmsg.FromUsernick = sender_name;
}
wmsg.FromMessage = string.Empty;
socketClient.Send(wmsg);
#endregion
}
break;
case MsgType.MT_RECV_VIDEO_MSG://收到视频
{
#region
#region
//{"data":{"content_type":103,"conversation_id":"S:1688853956558440_7881301364988874","duration":1,"file_name":"video.MP4","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Video\\2020-03\\video.MP4","file_size":198490,"height":960,"local_id":"77","receiver":"1688853956558440","send_time":"1584031142","sender":"7881301364988874","sender_name":"18","server_id":"1000691","width":544},"type":11043} - 别人发
//{"data":{"content_type":23,"conversation_id":"S:1688853956558440_7881301364988874","duration":1,"file_name":"video.MP4","file_path":"C:\\Users\\先森吳\\Documents\\WXWork\\1688853956558440\\Cache\\Video\\2020-03\\video.MP4","file_size":198490,"height":960,"local_id":"78","receiver":"7881301364988874","send_time":"1584031203","sender":"1688853956558440","sender_name":"吴嘉华","server_id":"1000696","width":544},"type":11043} - 自己发
#endregion
//23、103 23
if (data == null) return;
var content_type = data["content_type"]?.ToString(); //企业微信消息类型
if (content_type == "23") return;
var socketClient = EasySoc.GetSocket();
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
if (user == null)
return;
var conversation_id = data["conversation_id"]?.ToString(); //会话ID
var local_id = data["local_id"]?.ToString(); //消息的本地ID
var receiver = data["receiver"]?.ToString(); //接收者的user_id
var send_time = data["send_time"]?.ToString(); //消息时间戳
var sender = data["sender"]?.ToString(); //发送者的user_id
var sender_name = data["sender_name"]?.ToString(); //发送者昵称
var server_id = data["server_id"]?.ToString(); //消息的服务器ID
var file_path = data["file_path"]?.ToString(); //图片路径
var wmsg = new WorkWechatReceiveMsg();
wmsg.Cmd = PCRobotCMD.rcvFile_workWeChat;
wmsg.RobotType = RobotType.;
wmsg.IsSend = false;
wmsg.RobotUsername = user.Wxid;
wmsg.RobotUsernick = user.Nickname;
wmsg.FromMessage = $"[视频={file_path}]";
wmsg.FromMessageType = WechatMsgType.;
if (conversation_id.Contains("R:"))
{
wmsg.FromGroupid = conversation_id;
wmsg.FromUsername = sender;
wmsg.FromUsernick = sender_name;
}
else
{
wmsg.FromUsername = sender;
wmsg.FromUsernick = sender_name;
}
wmsg.FromMessage = string.Empty;
socketClient.Send(wmsg);
#endregion
}
break;
case MsgType.MT_RECV_VOICE_MSG://收到语音
break;
case MsgType.MT_RECV_FILE_MSG://收到文件
break;
case MsgType.MT_RECV_LOCATION_MSG://收到位置
break;
case MsgType.MT_RECV_LINK_CARD_MSG://收到链接
{
#region
#region
//{"data":{"content_type":13,"conversation_id":"S:1688853956558440_7881301364988874","desc":"【正品险·全国联保】听音乐、语音遥控家电的人工智能音箱","image_url":"","local_id":"82","receiver":"1688853956558440","send_time":"1584033150","sender":"7881301364988874","sender_name":"18","server_id":"1000715","title":"78元 小米(MI)小爱音箱 Play全新小爱同学升级版智能人工蓝牙WiFi音响 拼多多","url":"https://mobile.yangkeduo.com/goods1.html?goods_id=19287381820&page_from=35&share_uin=H3Z5B2UR6DQLWBIKN24YVO5XPQ_GEXDA&refer_share_id=e0d9d244358640aa853a8dcd1ff84216&refer_share_uid=4918926726&refer_share_channel=message&refer_share_form=card"},"type":11047} - 别人发送的私聊链接
//{"data":{"content_type":13,"conversation_id":"R:10696053211008104","desc":"【正品险·全国联保】听音乐、语音遥控家电的人工智能音箱","image_url":"","local_id":"85","receiver":"1688853956558440","send_time":"1584034341","sender":"7881301364988874","sender_name":"18","server_id":"1000724","title":"78元 小米(MI)小爱音箱 Play全新小爱同学升级版智能人工蓝牙WiFi音响 拼多多","url":"https://mobile.yangkeduo.com/goods1.html?goods_id=19287381820&page_from=35&share_uin=H3Z5B2UR6DQLWBIKN24YVO5XPQ_GEXDA&refer_share_id=e0d9d244358640aa853a8dcd1ff84216&refer_share_uid=4918926726&refer_share_channel=message&refer_share_form=card"},"type":11047} - 别人发送的群聊链接
//{"data":{"content_type":13,"conversation_id":"S:1688853956558440_7881301364988874","desc":"【正品险·全国联保】听音乐、语音遥控家电的人工智能音箱","image_url":"https://wework.qpic.cn/wwpic/51458_1ermIpIgTJu-_11_1584034011/0","local_id":"83","receiver":"7881301364988874","send_time":"1584034011","sender":"1688853956558440","sender_name":"吴","server_id":"1000720","title":"78元 小米(MI)小爱音箱 Play全新小爱同学升级版智能人工蓝牙WiFi音响 拼多多","url":"https://mobile.yangkeduo.com/goods1.html?goods_id=19287381820&page_from=35&share_uin=H3Z5B2UR6DQLWBIKN24YVO5XPQ_GEXDA&refer_share_id=e0d9d244358640aa853a8dcd1ff84216&refer_share_uid=4918926726&refer_share_channel=message&refer_share_form=card"},"type":11047} - 自己发送的私聊
//{"data":{"content_type":13,"conversation_id":"R:10696053211008104","desc":"【正品险·全国联保】听音乐、语音遥控家电的人工智能音箱","image_url":"https://wework.qpic.cn/wwpic/51458_1ermIpIgTJu-_11_1584034011/0","local_id":"84","receiver":"R:10696053211008104","send_time":"1584034246","sender":"1688853956558440","sender_name":"吴","server_id":"1000722","title":"78元 小米(MI)小爱音箱 Play全新小爱同学升级版智能人工蓝牙WiFi音响 拼多多","url":"https://mobile.yangkeduo.com/goods1.html?goods_id=19287381820&page_from=35&share_uin=H3Z5B2UR6DQLWBIKN24YVO5XPQ_GEXDA&refer_share_id=e0d9d244358640aa853a8dcd1ff84216&refer_share_uid=4918926726&refer_share_channel=message&refer_share_form=card"},"type":11047} - 自己发送的群聊
#endregion
var content_type = data["content_type"]?.ToString();
//if (content_type != "13") return;
var socketClient = EasySoc.GetSocket();
var conversation_id = data["conversation_id"]?.ToString(); //会话ID
var desc = data["desc"]?.ToString(); //链接描述
var image_url = data["image_url"]?.ToString(); //链接缩略图url
var local_id = data["local_id"]?.ToString(); //消息的本地ID
var receiver = data["receiver"]?.ToString(); //接收者的user_id
var send_time = data["send_time"]?.ToString(); //消息时间戳
var sender = data["sender"]?.ToString(); //发送者的user_id
var sender_name = data["sender_name"]?.ToString(); //发送者昵称
var server_id = data["server_id"]?.ToString(); //消息的服务器ID
var title = data["title"]?.ToString(); //链接标题
var url = data["url"]?.ToString(); //链接url
var isSend = false;
var RobotUsername = string.Empty;
var RobotUsernick = string.Empty;
var FromUsername = string.Empty;
var FromUsernick = string.Empty;
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
if (user == null)
return;
if (user.Wxid == sender) //0自己发送的消息
{
if (!WechatClient.IsAuxiliaryInput(sender, receiver, url))
{
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + url);
return;
}
var ass = WechatClient.IsAssistance(sender, receiver, dwClientid, WechatType.Xiaoxie_QY);
if (ass.type == WechatClient.AssistanceType.) return;
isSend = ass.type == WechatClient.AssistanceType.;
RobotUsername = ass.robotName;
RobotUsernick = ass.robotNick;
FromUsername = ass.fromName;
FromUsernick = ass.fromNick;
}
else
{
RobotUsername = user.Wxid;
RobotUsernick = user.Nickname;
FromUsername = sender;
FromUsernick = sender_name;
}
var wmsg = new WorkWechatReceiveMsg();
wmsg.Cmd = PCRobotCMD.rcvTxt_workWeChat;
wmsg.IsSend = isSend;
wmsg.RobotUsername = RobotUsername;
wmsg.RobotUsernick = RobotUsernick;
wmsg.RobotType = RobotType.;
wmsg.FromMessageType = WechatMsgType.;
if (conversation_id.Contains("R:"))
{
wmsg.FromGroupid = conversation_id;
wmsg.FromUsername = sender;
wmsg.FromUsernick = sender_name;
}
else
{
wmsg.FromUsername = FromUsername;
wmsg.FromUsernick = FromUsernick;
}
wmsg.FromMessage = url;
socketClient.Send(wmsg);
#endregion
}
break;
case MsgType.MT_RECV_EMOTION_MSG://收到表情
break;
case MsgType.MT_RECV_RED_PACKET_MSG://收到红包
{
}
break;
case MsgType.MT_RECV_PERSON_CARD_MSG://收到个人名片
{
//{"data":{"content":"推荐噢噢噢哦哦","content_type":2,"conversation_id":"S:1688853956558440_7881301364988874","local_id":"81","receiver":"1688853956558440","send_time":"1584031525","sender":"7881301364988874","sender_name":"18","server_id":"1000703"},"type":11041}
/*
{"data":{"avatar":"http://wx.qlogo.cn/mmhead/PiajxSqBRaELtKaBvIBMGI7xTZdLA9mZglMaZQxPeBASJT1lCXCJnKg/0","content_type":41,"conversation_id":"S:1688853956558440_7881301364988874","local_id":"80","nickname":"??欧尼桑","receiver":"1688853956558440","send_time":"1584031525","sender":"7881301364988874","sender_name":"18","server_id":"1000700","source":"微信","user_id":"7881301516989639"},"type":11050}
收到消息:{"data":{"content":"推荐噢噢噢哦哦","content_type":2,"conversation_id":"S:1688853956558440_7881301364988874","local_id":"81","receiver":"1688853956558440","send_time":"1584031525","sender":"7881301364988874","sender_name":"18","server_id":"1000703"},"type":11041}
*/
//var content = data["content"]?.ToString();
//var content_type = data["content_type"]?.ToString();
//var conversation_id = data["conversation_id"]?.ToString();
//var local_id = data["local_id"]?.ToString();
//var receiver = data["receiver"]?.ToString();
//var send_time = data["send_time"]?.ToString();
//var sender = data["sender"]?.ToString();
//var sender_name = data["sender_name"]?.ToString();
//var server_id = data["server_id"]?.ToString();
}
break;
case MsgType.MT_RECV_OTHER_MSG:
break;
case MsgType.MT_SEARCH_USER_MSG://查询联系人
break;
case MsgType.MT_ADD_SEARCH_USER_MSG://添加查询的联系人
break;
case MsgType.MT_MODIFY_USER_REMARK_MSG://修改用户备注
break;
case MsgType.MT_MODIFY_USER_DESC_MSG:
break;
case MsgType.MT_MODIFY_EXTERNAl_USER_PHONES_MSG:
break;
case MsgType.MT_MODIFY_EXTERNAl_USER_COMPANY_MSG:
break;
case MsgType.MT_CREATE_ROOM_MSG:
{
}
break;
case MsgType.MT_MODIFY_ROOM_NAME_MSG:
break;
case MsgType.MT_ROOM_ADD_MEMBERS_MSG:
{
}
break;
case MsgType.MT_ROOM_DEL_MEMBERS_MSG://删除群成员
break;
case MsgType.MT_RECV_FRIEND_REQUEST://接收好友请求
{
//{"data":{"avatar":"http://wx.qlogo.cn/mmhead/0T8yO33zeeg33jJCQibIWobapj6GX4xFBbOECtmG9VdkYpnzyiaUr5iag/0","corp_id":"1970325134026788","nickname":"17","sex":2,"user_id":"7881301610989604","verify":"我17"},"type":11063}
//{"data":{"avatar":"http://wx.qlogo.cn/mmhead/PiajxSqBRaEI8qvnXF9KjgTpvaSAzfhbE2kGoIspb7ibbEHGZEQxRibAQ/0","corp_id":"1970325134026788","nickname":"助将","sex":0,"user_id":"7881303410988876","verify":"欧珀new"},"type":11063}
//{"data":{"avatar":"http://wx.qlogo.cn/mmhead/zroWGtm5tmsxaCHfI2ibibuBxtzsZc6brAIDCicIianoDYI/0","corp_id":"1970325134026788","nickname":"Boom","sex":1,"user_id":"7881303336175964","verify":"我是Boom"},"type":11063}
if (data == null) return;
var socketClient = EasySoc.GetSocket();
var avatar = data["avatar"]?.ToString();//头像
var corp_id = data["corp_id"]?.ToString();//公司id
var nickname = data["nickname"]?.ToString();//申请人昵称
var sex = data["sex"]?.ToString();//性别
var user_id = data["user_id"]?.ToString();//用户id
var verify = data["verify"]?.ToString();//申请摘要
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
if (user == null)
return;
var wXApply = new WorkWechatApplyFriend();
wXApply.Cmd = PCRobotCMD.applyFriend_workWeChat;
wXApply.RobotUsername = user.Wxid;
wXApply.RobotUsernick = user.Nickname;
wXApply.RobotType = RobotType.;
wXApply.Message = verify;
wXApply.NewFriendWxid = user_id;
wXApply.NewFriendNick = nickname;
wXApply.OldFriendWxid = string.Empty;
wXApply.OldFriendNick = string.Empty;
wXApply.Token = CsharpHttpHelper.HttpHelper.ObjectToJson(new { user_id = user_id, corp_id = corp_id });
//记录申请人,用于记录
if (!FriendRequestRecord.ContainsKey(user_id))
FriendRequestRecord.TryAdd(user_id, new FriendInfo() { account = user_id, avatar = avatar, nickname = nickname, sex = int.Parse(sex), wxid = user_id });
socketClient.Send(wXApply);
}
break;
case MsgType.MT_ACCEPT_FRIEND_REQUEST://接受加好友请求
break;
case MsgType.MT_GET_OWNER_INFO_MSG:// 获取自己信息
{
}
break;
case MsgType.MT_GET_INNER_USERS_MSG:// 获取内部联系人列表
{
}
break;
case MsgType.MT_GET_EXTERNAL_USERS_MSG:// 获取外部联系列表
{
#region
#region
//{"data":[{"avatar":"http://wx.qlogo.cn/mmhead/GPyw0pGicibl4KQicb5bXGu2SibrykeGOH5IicK2d8LTfbA11zNB2A2SoKg/0","conversation_id":"S:1688853956558440_7881301364988874","corp_id":"1970325134026788","desc":"","external_job":"","nickname":"","position":"","realname":"","remark":"","sex":2,"user_id":"7881301364988874","username":"18"},{"avatar":"http://wx.qlogo.cn/mmhead/0T8yO33zeeg33jJCQibIWobapj6GX4xFBbOECtmG9VdkYpnzyiaUr5iag/0","conversation_id":"S:1688853956558440_7881301610989604","corp_id":"1970325134026788","desc":"","external_job":"","nickname":"","position":"","realname":"","remark":"","sex":0,"user_id":"7881301610989604","username":"17"},{"avatar":"http://wx.qlogo.cn/mmhead/Q3auHgzwzM6CiaVp63VVTIRySkxia2KSGQ6hrYAvAkkjoMpl4wFjyhIA/0","conversation_id":"S:1688853956558440_7881302509911391","corp_id":"1970325134026788","desc":"","external_job":"","nickname":"","position":"","realname":"","remark":"千年老妖","sex":1,"user_id":"7881302509911391","username":"千年老妖"}],"type":11037}
#endregion
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
if (user == null)
return;
var client = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY;
if (!user.IsGetFriend) return;
try
{
if (data == null)
{
lock (Friend_Lock)
{
var _data = json.ContainsKey("data") ? json["data"] as ArrayList : null;
if (_data == null) return;
for (int i = 0; i < _data.Count; i++)
{
var item = _data[i] as Dictionary<string, object>;
var f = new WorkFriendInfo();
f.avatar = item["avatar"]?.ToString();
f.conversation_id = item["conversation_id"]?.ToString();
//f.desc = item["desc"]?.ToString();
f.nickname = item["nickname"]?.ToString();
f.position = item["position"]?.ToString();
f.realname = item["realname"]?.ToString();
f.remark = item["remark"]?.ToString();
f.sex = int.Parse(item["sex"]?.ToString());
f.user_id = item["user_id"]?.ToString();
f.username = item["username"]?.ToString();
//var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
//if (user == null)
// return;
var friend = user.WorkFriends.FirstOrDefault(z => z.user_id == f.user_id);
if (friend == null)
user.WorkFriends.Add(f);
}
}
#region xx
//var nmss = new List<List<WorkFriendInfo>>();
//var mis = new List<WorkFriendInfo>();
//var count = 40;
//var rem = _data.Count % count;
//var num = _data.Count / count;
//for (int i = 0; i < _data.Count; i++)
//{
// var item = _data[i] as Dictionary<string, object>;
// var f = new WorkFriendInfo();
// f.avatar = item["avatar"]?.ToString();
// f.conversation_id = item["conversation_id"]?.ToString();
// f.corp_id = item["corp_id"]?.ToString();
// f.desc = item["desc"]?.ToString();
// f.external_job = item["external_job"]?.ToString();
// f.nickname = item["nickname"]?.ToString();
// f.position = item["position"]?.ToString();
// f.realname = item["realname"]?.ToString();
// f.remark = item["remark"]?.ToString();
// f.sex = int.Parse(item["sex"]?.ToString());
// f.nickname = item["username"]?.ToString();
// f.user_id = item["user_id"]?.ToString();
// //f.manager_wxid = item["manager_wxid"]?.ToString();
// //f.is_manager = int.Parse(item["is_manager"].ToString());
// mis.Add(f);
// if (mis.Count >= count)
// {
// nmss.Add(mis);
// mis = new List<WorkFriendInfo>();
// }
// else if (nmss.Count == num && mis.Count == rem)
// {
// nmss.Add(mis);
// }
//}
//var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
//if (user == null) return;
//var socketClient = EasySoc.GetSocket();
//foreach (var item in nmss)
//{
// var msg = new WorkWechatContactList();
// msg.RobotUsername = user.Wxid;
// msg.RobotUsernick = user.Nickname;
// msg.RobotType = RobotType.客户端企业微信;
// msg.Cmd = PCRobotCMD.rcvContactList_workWeChat;
// msg.Message = HttpHelper.ObjectToJson(new Dictionary<string, List<WorkFriendInfo>>() { { "data", item } });
// socketClient.Send(msg);
// Thread.Sleep(5);
//}
#endregion
}
}
catch { }
finally
{
user.IsGetFriend = false;
}
#endregion
}
break;
case MsgType.MT_GET_ROOMS_MSG:// 获取群聊列表
{
//{"data":[{"conversation_id":"R:1970325073072411","create_user_id":"1688853956450720","is_manager":0,"nickname":"成都秒单客网络科技有限公司","total":5},{"conversation_id":"R:10696053211008104","create_user_id":"1688853956558440","is_manager":1,"nickname":"吴嘉华、18、17","total":3}],"type":11038}
if (data == null)
{
lock (Friend_Lock)
{
var _data = json.ContainsKey("data") ? json["data"] as ArrayList : null;
if (_data == null) return;
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
if (user == null)
return;
for (int i = 0; i < _data.Count; i++)
{
var item = _data[i] as Dictionary<string, object>;
var f = new WorkFriendInfo();
f.avatar = string.Empty;
f.user_id = item["conversation_id"]?.ToString();
f.manager_wxid = item["create_user_id"]?.ToString();
f.is_manager = int.Parse(item["is_manager"]?.ToString());
f.nickname = item["nickname"]?.ToString();
f.username = item["nickname"]?.ToString();
f.remark = item["nickname"]?.ToString();
f.manager_wxid = item["create_user_id"]?.ToString();
f.is_manager = int.Parse(item["is_manager"]?.ToString());
var friend = user.WorkFriends.FirstOrDefault(z => z.user_id == f.user_id);
if (friend == null)
user.WorkFriends.Add(f);
}
}
}
}
break;
case MsgType.MT_GET_USER_DETAIL_MSG:// 获取用户详细信息
{
//{"data":{"avatar":"http://wx.qlogo.cn/mmhead/GPyw0pGicibl4KQicb5bXGu2SibrykeGOH5IicK2d8LTfbA11zNB2A2SoKg/0","conversation_id":"S:1688853956558440_7881301364988874","desc":"","nickname":"","position":"","realname":"","remark":"","sex":2,"user_id":"7881301364988874","username":"18"},"type":11039} 获取到用户数据
//{"data":{"user_id":"7881302447012216"},"type":11039} 获取的用户不存在
if (!data.ContainsKey("conversation_id")) return;
lock (Friend_Lock)
{
var f = new WorkFriendInfo();
f.avatar = data["avatar"]?.ToString();
f.conversation_id = data["conversation_id"]?.ToString();
if (data.ContainsKey("desc"))
f.desc = data["desc"]?.ToString();
else
f.desc = string.Empty;
f.nickname = data["nickname"]?.ToString();
f.position = data["position"]?.ToString();
f.realname = data["realname"]?.ToString();
f.remark = data["remark"]?.ToString();
f.sex = int.Parse(data["sex"]?.ToString());
f.user_id = data["user_id"]?.ToString();
f.username = data["username"]?.ToString();
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
if (user == null)
return;
var friend = user.WorkFriends.FirstOrDefault(z => z.user_id == f.user_id);
if (friend != null)
if (!user.WorkFriends.TryTake(out friend)) return;
user.WorkFriends.Add(f);
}
}
break;
case MsgType.MT_GET_ROOM_MEMBERS_MSG:// 获取群成员列表
{
try
{
#region
/*
{"data":{"conversation_id":"R:10696053211008104","member_list":[{"avatar":"https://wework.qpic.cn/bizmail/FxrNrXCeEh8Kwv4ia3iahWCbkR7Y0VqoBnGSHAyhDIefRGkL7tT76SsA/0","conversation_id":"S:1688853956558440_1688853956558440","desc":"","nickname":"","position":"","realname":"吴嘉华","remark":"","sex":1,"user_id":"1688853956558440","username":"吴嘉华"},{"avatar":"http://wx.qlogo.cn/mmhead/GPyw0pGicibl4KQicb5bXGu2SibrykeGOH5IicK2d8LTfbA11zNB2A2SoKg/0","conversation_id":"S:1688853956558440_7881301364988874","desc":"","nickname":"","position":"","realname":"","remark":"","sex":2,"user_id":"7881301364988874","username":"18"},{"avatar":"http://wx.qlogo.cn/mmhead/0T8yO33zeeg33jJCQibIWobapj6GX4xFBbOECtmG9VdkYpnzyiaUr5iag/0","conversation_id":"S:1688853956558440_7881301610989604","desc":"","nickname":"","position":"","realname":"","remark":"","sex":0,"user_id":"7881301610989604","username":"17"}]},"type":11040}
{"data":{"conversation_id":"R:1970325073072411","member_list":[{"avatar":"http://wework.qpic.cn/bizmail/UBH52fian6zLyTQm2YeWIEonTIT0snwXSojzt7AjPbWk0CBqbRBtshA/0","conversation_id":"S:1688853956558440_1688853956450720","desc":"","nickname":"","position":"","realname":"聂红利","remark":"","sex":1,"user_id":"1688853956450720","username":"千年老妖"},{"avatar":"https://wework.qpic.cn/bizmail/FxrNrXCeEh8Kwv4ia3iahWCbkR7Y0VqoBnGSHAyhDIefRGkL7tT76SsA/0","conversation_id":"S:1688853956558440_1688853956558440","desc":"","nickname":"","position":"","realname":"吴嘉华","remark":"","sex":1,"user_id":"1688853956558440","username":"吴嘉华"},{"avatar":"http://wework.qpic.cn/bizmail/AU8vqVRBac5HFiaTI2qxv3RNr8Kib0wFyicBQZkvs06ayzBhlHE7dCAmA/0","conversation_id":"S:1688853956558440_1688853956589484","desc":"","nickname":"","position":"","realname":"","remark":"","sex":2,"user_id":"1688853956589484","username":"白龙马"},{"avatar":"http://p.qpic.cn/wwhead/duc2TvpEgSTPk74IwG7Bs8GzMNxjerMmg94LwYswvGEoKMZcpTicE7vkLsDwGdh8BcVJLibuGFXbc/0","conversation_id":"S:1688853956558440_10977528187716586","desc":"","nickname":"","position":"","realname":"","remark":"","sex":1,"user_id":"10977528187716586","username":"嘿嘿"},{"avatar":"http://p.qpic.cn/wwhead/duc2TvpEgSTPk74IwG7Bs8GzMNxjerMmg94LwYswvGEoKMZcpTicE7vkLsDwGdh8BcVJLibuGFXbc/0","conversation_id":"S:1688853956558440_10977528187716587","desc":"","nickname":"","position":"","realname":"","remark":"","sex":1,"user_id":"10977528187716587","username":"测试机器人"}]},"type":11040}
*/
#endregion
lock (Friend_Lock)
{
//{"data":{"conversation_id":"R:10696053211018728","member_list":[{"acctid":"WuJiaHua","avatar":"http://wework.qpic.cn/bizmail/FxrNrXCeEh8Kwv4ia3iahWCbkR7Y0VqoBniaJ5hrlKggVaibBXIxmOBb8A/0","corp_id":"1970325073072411","invite_user_id":"1688853956558440","nickname":"洪荒老道","position":"","realname":"吴嘉华","remark":"","sex":1,"user_id":"1688853956558440","username":"洪荒老道"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/FrdAUicrPIibe0Dd7mWcTkmSz8GHQp6YWcVzd4g62zicVnTPGI3G9S5vA/0","corp_id":"1970325134026788","invite_user_id":"1688853956558440","nickname":"","position":"","realname":"","remark":"ID3110-。/V1/T1/i1","sex":0,"user_id":"7881301536005932","username":"摸鱼樊"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/0T8yO33zeeg33jJCQibIWobapj6GX4xFBbOECtmG9VdkYpnzyiaUr5iag/0","corp_id":"1970325134026788","invite_user_id":"1688853956558440","nickname":"","position":"","realname":"","remark":"","sex":2,"user_id":"7881301610989604","username":"17"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/Q3auHgzwzM5qa6vY8BQAoN1ViclaTAFFuknicOeMHNluZcXyTQLUrKKg/0","corp_id":"1970325134026788","invite_user_id":"1688853956558440","nickname":"","position":"","realname":"","remark":"21","sex":2,"user_id":"7881302484994318","username":"、"},{"acctid":"","avatar":"http://wx.qlogo.cn/mmhead/ibhzWy4ibIEpCGTLwEuhBf4rqKAvx4bXHicib6uWPaZrtGtRPtv8UrUgSQ/0","corp_id":"1970325134026788","invite_user_id":"1688853956558440","nickname":"","position":"","realname":"","remark":"E-b-Coco-▲-Υ-","sex":0,"user_id":"7881303377020975","username":"Coco"}]},"type":11040}
var conversation_id = data["conversation_id"].ToString();
//var username = data["username"].ToString();
var member_list = data["member_list"] as ArrayList;
if (member_list == null) return;
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
if (user == null)
return;
var group = user.WorkGroups.FirstOrDefault(z => z.conversation_id == conversation_id);
if (group == null)
{
group = new WorkGroupInfo() { conversation_id = conversation_id, total = member_list.Count, friends = new List<WorkFriendInfo>() };
user.WorkGroups.Add(group);
}
else
group.total = member_list.Count;
for (int i = 0; i < member_list.Count; i++)
{
//{"account":"","avatar":"http://wx.qlogo.cn/mmhead/ver_1/klibauQfLYtmfniaYAzsV9l6V4cSHmdDhniaTmJ6aGo0z035JTkB5QWrOUbAPnJnP4YXTMuKKmwNBMNv2Fbj5ia9icNicYeXGXbbsRiagGFKryASro/132","city":"","country":"","nickname":"陈建","province":"","remark":"","sex":0,"wxid":"wxid_e1j30jf2k5zdk022"}
//{"avatar":"http://wework.qpic.cn/bizmail/UBH52fian6zLyTQm2YeWIEonTIT0snwXSojzt7AjPbWk0CBqbRBtshA/0","conversation_id":"S:1688853956558440_1688853956450720","desc":"","nickname":"","position":"","realname":"利","remark":"","sex":1,"user_id":"1688853956450720","username":"千妖"}
var item = member_list[i] as Dictionary<string, object>;
var f = new WorkFriendInfo();
f.avatar = item["avatar"]?.ToString();
f.conversation_id = conversation_id;
//f.corp_id = item["corp_id"]?.ToString();
//f.desc = item["desc"]?.ToString();
//f.external_job = item["external_job"]?.ToString();
f.nickname = item["nickname"]?.ToString();
f.position = item["position"]?.ToString();
f.realname = item["realname"]?.ToString();
f.remark = item["remark"]?.ToString();
f.sex = int.Parse(item["sex"]?.ToString());
f.nickname = item["username"]?.ToString();
f.user_id = item["user_id"]?.ToString();
var friend = group.friends.FirstOrDefault(z => z.user_id == f.user_id);
if (friend == null)
group.friends.Add(f);
}
}
#region xx
//var nmss = new List<List<WorkFriendInfo>>();
//var mis = new List<WorkFriendInfo>();
//var count = 20;
//var rem = member_list.Count % count;
//var num = member_list.Count / count;
//for (int i = 0; i < member_list.Count; i++)
//{
// //{"account":"","avatar":"http://wx.qlogo.cn/mmhead/ver_1/klibauQfLYtmfniaYAzsV9l6V4cSHmdDhniaTmJ6aGo0z035JTkB5QWrOUbAPnJnP4YXTMuKKmwNBMNv2Fbj5ia9icNicYeXGXbbsRiagGFKryASro/132","city":"","country":"","nickname":"陈建","province":"","remark":"","sex":0,"wxid":"wxid_e1j30jf2k5zdk022"}
// //{"avatar":"http://wework.qpic.cn/bizmail/UBH52fian6zLyTQm2YeWIEonTIT0snwXSojzt7AjPbWk0CBqbRBtshA/0","conversation_id":"S:1688853956558440_1688853956450720","desc":"","nickname":"","position":"","realname":"聂红利","remark":"","sex":1,"user_id":"1688853956450720","username":"千年老妖"}
// var item = member_list[i] as Dictionary<string, object>;
// var f = new WorkFriendInfo();
// f.avatar = item["avatar"]?.ToString();
// f.conversation_id = item["conversation_id"]?.ToString();
// //f.corp_id = item["corp_id"]?.ToString();
// f.desc = item["desc"]?.ToString();
// //f.external_job = item["external_job"]?.ToString();
// f.nickname = item["nickname"]?.ToString();
// f.position = item["position"]?.ToString();
// f.realname = item["realname"]?.ToString();
// f.remark = item["remark"]?.ToString();
// f.sex = int.Parse(item["sex"]?.ToString());
// f.nickname = item["username"]?.ToString();
// f.user_id = item["user_id"]?.ToString();
// mis.Add(f);
// if (mis.Count >= count)
// {
// nmss.Add(mis);
// mis = new List<WorkFriendInfo>();
// }
// else if (nmss.Count == num && mis.Count == rem)
// {
// nmss.Add(mis);
// }
//}
//var socketClient = EasySoc.GetSocket();
//var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie_QY);
//if (user == null) return;
//foreach (var item in nmss)
//{
// var msg = new WorkWechatGroupMember();
// msg.RobotUsername = user.Wxid;
// msg.RobotUsernick = user.Nickname;
// msg.RobotType = RobotType.客户端微信;
// msg.Cmd = PCRobotCMD.rcvGroupMember_workWeChat;
// var g = new WorkGroupInfo();
// g.conversation_id = conversation_id;
// g.member_list = item;
// msg.Message = HttpHelper.ObjectToJson(new Dictionary<string, WorkGroupInfo>() { { "data", g } });
// socketClient.Send(msg);
// Thread.Sleep(5);
//}
#endregion
}
catch (Exception ex)
{
}
}
break;
case MsgType.MT_ROOM_ADD_MEMBER_NOTIFY_MSG://群成员新增通知
{
if (data == null) return;
var memberList = data["member_list"] as ArrayList;
if (memberList == null || memberList.Count == 0) return;
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
var client = WechatClient.GetApi(user) as Wechat_Xiaoxie_QY;
var socketClient = EasySoc.GetSocket();
//var avatar = data["avatar"].ToString();//头像
//var is_manager = data["is_manager"].ToString();//
//var manager_wxid = data["manager_wxid"].ToString();//管理账号
//var room_nick = data["nickname"].ToString();//群昵称
//var room_wxid = data["room_wxid"].ToString();//群账号
//var total_member = int.Parse(data["total_member"].ToString());//群人数
//var member_list = data["member_list"] as ArrayList;
//if (member_list != null && member_list.Count != 0)
//{
// var member = member_list[0] as Dictionary<string, object>;
// var avatar_user = member["avatar"].ToString();//头像
// var invite_by = member["invite_by"].ToString();//邀请者wxid
// var nickname = member["nickname"].ToString();//新用户昵称
// var wxid = member["wxid"].ToString();//新用户账号
// WechatNewMemer newMember = new WechatNewMemer();
// newMember.Cmd = PCRobotCMD.newMember;
// newMember.RobotType = RobotType.客户端微信;
// newMember.RobotUsername = user.Wxid;
// newMember.RobotUsernick = user.Nickname;
// newMember.SourceNick = string.Empty;
// newMember.SourceName = (string.IsNullOrWhiteSpace(invite_by) || invite_by == user.Wxid) ? string.Empty : invite_by;
// newMember.MemberNick = nickname;
// newMember.MemberName = wxid;
// newMember.GroupId = room_wxid;
// newMember.GroupNick = room_nick;
// newMember.TotalMember = total_member;
// socketClient.Send(newMember);
//}
//op_user_id 邀请用户的昵称
//op_user_name 邀请用户的账号
var room_conversation_id = data["room_conversation_id"]?.ToString();
var room_name = data["room_name"]?.ToString();
var op_user_name = data["op_user_name"]?.ToString();
var op_user_id = data["op_user_id"]?.ToString();
for (int i = 0; i < memberList.Count; i++)
{
var item = memberList[i] as Dictionary<string, object>;
WechatNewMemer newMember = new WechatNewMemer();
newMember.Cmd = PCRobotCMD.newMember_workWeChat;
newMember.RobotType = RobotType.;
newMember.RobotUsername = user.Wxid;
newMember.RobotUsernick = user.Nickname;
newMember.SourceNick = op_user_name;
newMember.SourceName = op_user_id;
newMember.MemberNick = item["name"]?.ToString(); ;
newMember.MemberName = item["user_id"]?.ToString(); ;
newMember.GroupId = room_conversation_id;
newMember.GroupNick = room_name;
newMember.TotalMember = 0;
socketClient.Send(newMember);
Thread.Sleep(50);
}
break;
}
default:
break;
}
}
catch (Exception ex)
{
//Console.WriteLine("解析消息异常:" + ex.Message + "," + recvData);
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + ".._" + recvData);
}
});
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "_.");
}
}
private static ConcurrentDictionary<string, FriendInfo> FriendRequestRecord = new ConcurrentDictionary<string, FriendInfo>();
private static void WxCloseCallback(uint dwClientId)
{
try
{
var v = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == dwClientId && f.Value.Type == WechatType.Xiaoxie_QY).Value;
if (v != null)
{
LogHelper.GetSingleObj().Info("系统", $"WxCloseCallbackQY关闭回调,Uin:{v.Uin},微信:{v.Nickname}({v.Wxid})");
WechatClient.RemoveUser(v);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "_.-");
}
}
public override void AgreeAddMe(string text)
{
try
{
if (string.IsNullOrWhiteSpace(text)) return;
var reg = Regex.Match(text, @"{""user_id"":""(?<user_id>[^""]+?)"",""corp_id"":""(?<corp_id>[^""]+?)""}");
if (reg.Success)
{
var user_id = reg.Groups["user_id"].Value;
var corp_id = reg.Groups["corp_id"].Value;
var __json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_ACCEPT_FRIEND_REQUEST, data = new { user_id = user_id, corp_id = corp_id } });
SendWxWorkData(User.DwClientId, __json);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "-._");
}
}
public override void DeleteFriend(string wxid)
{
try
{
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "._");
}
}
public override void EditCotacts(string wxid, string remark)
{
try
{
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_MODIFY_USER_REMARK_MSG, data = new { user_id = wxid, remark = remark } });
SendWxWorkData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "*_");
}
}
/// <summary>
/// 创建群
/// </summary>
/// <param name="wxidData"></param>
public override void CreateRoom(string wxidData)
{
try
{
if (string.IsNullOrWhiteSpace(wxidData)) return;
var wxids = wxidData.Trim().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
if (wxids != null && wxids.Length != 0)
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CREATE_ROOM_MSG, data = wxids });
SendWxWorkData(User.DwClientId, json);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 邀请用户进群
/// </summary>
/// <param name="conversation_id"></param>
/// <param name="wxid"></param>
public override void InviteMemberToRoom_40Up(string conversation_id, string wxidData)
{
try
{
if (conversation_id.Trim().StartsWith("R:"))
{
var wxids = wxidData.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_ROOM_ADD_MEMBERS_MSG, data = new { conversation_id = conversation_id, user_list = wxids } });
SendWxWorkData(User.DwClientId, json);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + ".._.");
}
}
public override void InviteMemberToRoom_40Down(string groupid, string wxidData)
{
InviteMemberToRoom_40Up(groupid, wxidData);
}
public override void DeleteRoomMember(string wxid, string room)
{
try
{
if (room.Trim().StartsWith("R:"))
{
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_ROOM_DEL_MEMBERS_MSG, data = new { conversation_id = room, user_list = new string[] { wxid } } });
SendWxWorkData(User.DwClientId, json);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void GetContact()
{
try
{
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_GET_EXTERNAL_USERS_MSG, data = new { } });
SendWxWorkData(User.DwClientId, json);
Thread.Sleep(1000);
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_GET_ROOMS_MSG, data = new { } });
SendWxWorkData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "_*");
}
}
public override void GetContact(bool isUpdate)
{
try
{
var result = GetFriendInfos(true);
var socketClient = EasySoc.GetSocket();
CommonResult msg = new CommonResult();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvFriendList_workWeChat;
msg.Data = result == null ? string.Empty : HttpHelper.ObjectToJson(result);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 获取好友列表
/// </summary>
/// <param name="flushGroupsCache">刷新缓存数据</param>
/// <returns></returns>
//public override List<WorkFriendInfo> GetFriendInfos(bool flushGroupsCache = false)
public override string GetFriendInfos(bool flushGroupsCache = false)
{
List<WorkFriendInfo> friends = null;
try
{
#region
friends = User.WorkFriends.Where(f => !f.user_id.Contains("R:")).ToList();
if (!flushGroupsCache && friends.Count != 0)
return JsonConvert.SerializeObject(friends);
#endregion
if (!User.IsGetFriend)
{
//获取好友列表(数据库读取)
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_GET_EXTERNAL_USERS_MSG, data = new { } });
SendWxWorkData(User.DwClientId, json);
User.IsGetFriend = true;
}
var result_ = Task.Factory.StartNew<List<WorkFriendInfo>>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(20);
do
{
if (!User.IsGetFriend)
{
friends = User.WorkFriends.Where(f => !f.user_id.Contains("R:")).ToList();
return friends;
}
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
//return friends;
return JsonConvert.SerializeObject(friends);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "#__#");
}
return string.Empty;
}
//public override void GetFriend(string wxid)
//{
// try
// {
// var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_GET_USER_DETAIL_MSG, data = new { user_id = wxid } });
// SendWxWorkData(User.DwClientId, json);
// }
// catch (Exception ex)
// {
// LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
// }
//}
//public override void GetGroupMemer(string groupId)
//{
// try
// {
// var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_GET_ROOM_MEMBERS_MSG, data = new { conversation_id = groupId } });
// SendWxWorkData(User.DwClientId, json);
// }
// catch (Exception ex)
// {
// LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
// }
//}
public override void GetGroupAndFriendInfo(string groupId, string wxid)
{
try
{
var json = string.Empty;
WorkGroupInfo group = null;
if (groupId.Contains("R:"))
{
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_GET_ROOM_MEMBERS_MSG, data = new { conversation_id = groupId } });
var g = User.WorkGroups.FirstOrDefault(f => f.conversation_id == groupId);
//User.WorkGroups.Clear();
if (g != null)
{
var u = g.friends.FirstOrDefault(f => f.user_id == wxid);
if (u != null)
group = new WorkGroupInfo() { conversation_id = groupId, friends = new List<WorkFriendInfo>() { u }, total = g.total };
}
if (group == null)
{
SendWxWorkData(User.DwClientId, json);
var _group = Task.Factory.StartNew<WorkGroupInfo>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(15);
do
{
g = User.WorkGroups.FirstOrDefault(f => f.conversation_id == groupId);
if (g != null)
{
var u = g.friends.FirstOrDefault(f => f.user_id == wxid);
if (u != null)
{
group = new WorkGroupInfo() { conversation_id = groupId, friends = new List<WorkFriendInfo>() { u }, total = g.total };
return group;
}
}
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
}
}
var socketClient = EasySoc.GetSocket();
var msg = new WorkWechatContact();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;//客户端微信;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvContact_workWeChat;
msg.Message = group == null ? string.Empty : HttpHelper.ObjectToJson(group);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "/_");
}
}
public override void GetGroupAndFriendInfo(string groupId, string wxid, bool flush = false)
{
try
{
var json = string.Empty;
WorkGroupInfo group = null;
if (groupId.Contains("R:"))
{
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_GET_ROOM_MEMBERS_MSG, data = new { conversation_id = groupId } });
var g = User.WorkGroups.FirstOrDefault(f => f.conversation_id == groupId);
//User.WorkGroups.Clear();
if (g != null)
{
if (flush)
{
g.friends.Clear();
}
else
{
var u = g.friends.FirstOrDefault(f => f.user_id == wxid);
if (u != null)
group = new WorkGroupInfo() { conversation_id = groupId, friends = new List<WorkFriendInfo>() { u }, total = g.total };
}
}
if (group == null)
{
SendWxWorkData(User.DwClientId, json);
var _group = Task.Factory.StartNew<WorkGroupInfo>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(15);
do
{
g = User.WorkGroups.FirstOrDefault(f => f.conversation_id == groupId);
if (g != null)
{
var u = g.friends.FirstOrDefault(f => f.user_id == wxid);
if (u != null)
{
group = new WorkGroupInfo() { conversation_id = groupId, friends = new List<WorkFriendInfo>() { u }, total = g.total };
return group;
}
}
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
}
}
var socketClient = EasySoc.GetSocket();
var msg = new WorkWechatContact();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;//客户端微信;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvContact_workWeChat;
msg.Message = group == null ? string.Empty : HttpHelper.ObjectToJson(group);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "/_");
}
}
public override void GetWxidInfo(string wxid)
{
try
{
var json = string.Empty;
var u = User.WorkFriends.FirstOrDefault(f => f.user_id == wxid);
if (u == null)
{
if (wxid.Contains("R:"))
{
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_GET_ROOMS_MSG, data = new { } });
}
else
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_GET_USER_DETAIL_MSG, data = new { user_id = wxid } });
SendWxWorkData(User.DwClientId, json);
var friend = Task.Factory.StartNew<WorkFriendInfo>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(15);
do
{
u = User.WorkFriends.FirstOrDefault(f => f.user_id == wxid);
if (u != null) return u;
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
}
var socketClient = EasySoc.GetSocket();
var msg = new WorkWechatContact();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;//客户端微信;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvContact_workWeChat;
msg.Message = u == null ? string.Empty : HttpHelper.ObjectToJson(u);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "_/");
}
}
public override void SendImage(string wxid, string file)
{
//try
//{
// var conversation_id = wxid;
// if (!wxid.StartsWith("R:"))
// {
// conversation_id = $"S:{User.Wxid}_{wxid}";
// }
// var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_IMAGE_MSG, data = new { conversation_id = conversation_id, file = file } });
// SendWxWorkData(User.DwClientId, json);
//}
//catch (Exception ex)
//{
// LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message + ".-");
//}
try
{
var conversation_id = wxid;
if (!wxid.StartsWith("R:"))
conversation_id = $"S:{User.Wxid}_{wxid}";
if (file.StartsWith("http", StringComparison.InvariantCultureIgnoreCase))
{
byte[] ImangByte = null;
string extension = Path.GetExtension(file);
extension = string.IsNullOrWhiteSpace(extension) ? ".jpg" : extension;
ImangByte = new System.Net.WebClient().DownloadData(file);
byte[] imageHash = new MD5CryptoServiceProvider().ComputeHash(ImangByte);
var path = Common.CacheFilePath(User.Wxid, conversation_id, "IMAGE", Guid.NewGuid().ToString("N"), extension);
if (!File.Exists(path))
{
File.WriteAllBytes(path, ImangByte);
}
if (File.Exists(path))
file = path;
}
else
{
if (!File.Exists(file))
{
if (Common.IsBase64(file))
{
var path = Common.CacheFilePath(User.Wxid, wxid, "IMAGE", Guid.NewGuid().ToString("N"), "jpg");
if (Common.Base64ToFileAndSave(file, path) && File.Exists(path))
{
file = path;
}
}
else
{ }
}
}
var json = string.Empty;
if (File.Exists(file))
{
if (file.Trim().EndsWith(".gif", StringComparison.CurrentCultureIgnoreCase))
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_GIF_MSG, data = new { conversation_id = conversation_id, file = file } });
else
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_IMAGE_MSG, data = new { conversation_id = conversation_id, file = file } });
}
else
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_IMAGE_MSG, data = new { conversation_id = conversation_id, file = file } });
SendWxWorkData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Debug("发送图片异常", ex.Message + ".-" + ex.StackTrace);
}
}
public override void SendMessage(string wxid, string message)
{
try
{
//S:1688853956558440_7881301364988874
//{"data":{"content":"我们","content_type":2,"conversation_id":"S:1688853956558440_7881301364988874","local_id":"61","receiver":"1688853956558440","send_time":"1584028171","sender":"7881301364988874","sender_name":"18","server_id":"1000653"},"type":11041}
var conversation_id = wxid;
if (!wxid.StartsWith("R:"))
{
conversation_id = $"S:{User.Wxid}_{wxid}";
}
else
{ }
var json = string.Empty;
message = message.Replace("\r\n", "\n");
if (Common.isXML(message))
{
message = message.Replace("&amp;", "&");
var title = string.Empty;
var desc = string.Empty;
var url = string.Empty;
var image_url = string.Empty;
var reg = Regex.Match(message, @"<title>(?<标题>[\w\W]+?)</title>");
if (reg.Success) title = reg.Groups["标题"].Value;
reg = Regex.Match(message, @"<des>(?<介绍>[\w\W]+?)</des>");
if (reg.Success) desc = reg.Groups["介绍"].Value.Replace("<![CDATA[", "").Replace("]]", "");
reg = Regex.Match(message, @"<url>(?<链接>[\w\W]+?)</url>");
if (!reg.Success) reg = Regex.Match(message, @"<pagepath>(?<链接>[\w\W]+?)</pagepath>");
if (reg.Success) url = reg.Groups["链接"].Value;
reg = Regex.Match(message, @"<thumburl>(?<图片链接>[\w\W]+?)</thumburl>");
if (reg.Success) image_url = reg.Groups["图片链接"].Value;
if (message.Contains("<image_key1>"))
{
var image_key1 = string.Empty;
var image_key2 = string.Empty;
var image_key3 = string.Empty;
var image_size = 0;
var ghid = string.Empty;
var pagepath = string.Empty;
var regKey = Regex.Match(message, @"<image_key1>(?<image_key1>[\w\W]+?)</image_key1>", RegexOptions.IgnoreCase);
if (regKey.Success)
image_key1 = regKey.Groups["image_key1"].Value;
regKey = Regex.Match(message, @"<image_key2>(?<image_key2>[\w\W]+?)</image_key2>", RegexOptions.IgnoreCase);
if (regKey.Success)
image_key2 = regKey.Groups["image_key2"].Value;
regKey = Regex.Match(message, @"<image_key3>(?<image_key3>[\w\W]+?)</image_key3>", RegexOptions.IgnoreCase);
if (regKey.Success)
image_key3 = regKey.Groups["image_key3"].Value;
regKey = Regex.Match(message, @"<image_size>(?<image_size>[\w\W]+?)</image_size>", RegexOptions.IgnoreCase);
if (regKey.Success)
image_size = int.Parse(regKey.Groups["image_size"].Value.XMLReplace(false));
regKey = Regex.Match(message, @"<username>(?<username>[\w\W]+?)</username>", RegexOptions.IgnoreCase);
if (regKey.Success)
ghid = regKey.Groups["username"].Value;
regKey = Regex.Match(message, @"<pagepath>(?<pagepath>[\w\W]+?)</pagepath>", RegexOptions.IgnoreCase);
if (regKey.Success)
pagepath = regKey.Groups["pagepath"].Value;
var weapppagethumbrawurl = string.Empty;
regKey = Regex.Match(message, @"<weapppagethumbrawurl>(?<weapppagethumbrawurl>[\w\W]+?)</weapppagethumbrawurl>", RegexOptions.IgnoreCase);
if (regKey.Success)
weapppagethumbrawurl = regKey.Groups["weapppagethumbrawurl"].Value;
var _json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_MINI_PROGRAM_MSG, data = new { conversation_id = conversation_id, ghid = ghid.XMLReplace(false), wxid = conversation_id, name = title, title = desc, enterpoint = pagepath.XMLReplace(false), headimg = weapppagethumbrawurl.XMLReplace(false), image_key1 = image_key1.XMLReplace(false), image_key2 = image_key2.XMLReplace(false), image_key3 = image_key3.XMLReplace(false), image_size = image_size } });
SendWxWorkData(User.DwClientId, _json);
return;
}
else
{
image_url =
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_LINK_MSG, data = new { conversation_id = conversation_id, title = $"{title.XMLReplace(false)}", desc = $"{desc.XMLReplace(false)}", url = url.XMLReplace(false), image_url = image_url.XMLReplace(false) } });
}
}
else
{
var atUsername = new List<string>();
var regs = Regex.Matches(message, @"\[@([^\]]+?)\]");
if (regs.Count != 0 && wxid.StartsWith("R:"))
{
foreach (Match item in regs)
{
atUsername.Add(item.Groups[1].Value.Trim());
}
message = Regex.Replace(message, @"(\[@[^\]]+?\])", "{$@}");
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_ROOM_AT_MSG, data = new { conversation_id = conversation_id, content = message, at_list = atUsername.ToArray() } });
}
else
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_TEXT_MSG, data = new { conversation_id = conversation_id, content = message } });
}
SendWxWorkData(User.DwClientId, json);
//LogHelper.GetSingleObj().Debug("发送状态", ($"发送:{conversation_id} - {flag}, 内容:{message}"));
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "-.");
}
}
/// <summary>
/// 发送小程序
/// </summary>
/// <param name="wxid">发送给谁</param>
/// <param name="dataJson">发送的内容json打包</param>
public override void SendProgramMessage(string wxid, string dataJson)
{
try
{
/*
"conversation_id": "S:16888xxxx_7881xxxxx",
"ghid": "gh_52b46203a658@app",
"wxid": "wx35f2a3937c9df889",
"name": "博鸟绘本",
"title": "博鸟绘本,最新最全的儿童绘本租赁平台~",
"enterpoint": "pages/shouye/shouye.html",
"headimg": "http://wx.qlogo.cn/mmhead/xxxx/96",
"image_key1": "306b020102046430620201000xxxxx",
"image_key2": "61706264616C7A77666875xxxx",
"image_key3": "b302e94d9c6f95xxxxxx",
"image_size": 56448
*/
//个人微信/企业微信
//{"data":{"content_type":78,"conversation_id":"R:10696053211018728","enterpoint":"pages/tab/home/index.html?_um_ssrc=oucfI5QRI-8SbyOTKSGYt5-ia0dk&_um_sts=1610033684099","ghid":"gh_a0d7a7672cf7@app","headimg":"http://wx.qlogo.cn/mmhead/Q3auHgzwzM43LsxpXHKd7ua7kwMZQ8WHmZlkYTzr3Tdm8sMOJ7Ypog/96","image_key1":"306b020102046430620201000204bafc490e02030f4df9020473e6607102045ff72a530436333133373039353935305f313734393433343231315f3262393764653133616335373232353633383831336564376334396563616164020100020300ab1004000201010201000400","image_key2":"61747072666A766977766D69726D6168","image_key3":"2b97de13ac57225638813ed7c49ecaad","image_size":43791,"is_pc":0,"local_id":"155","name":"啄木鸟家庭维修","receiver":"1688853956558440","send_time":"1610033747","sender":"7881302484994318","sender_name":"、","server_id":"1042188","title":"直营一口价,维修无猫腻","wxid":"wx3d6b1af0cb07fa5a"},"type":11066}
var conversation_id = wxid;
if (!wxid.StartsWith("R:"))
conversation_id = $"S:{User.Wxid}_{wxid}";
var json = CsharpHttpHelper.HttpExtend.JsonToDictionary(dataJson);
var data = json.ContainsKey("data") ? json["data"] as Dictionary<string, object> : null;
if (data == null) return;
//var content_type = data["content_type"]?.ToString();//内容类型 78
//var conversation_id = data["conversation_id"]?.ToString();//接收者的的会话ID
//var receiver = data["receiver"]?.ToString();//接收者的user_id
//var sender = data["sender"]?.ToString();//发送者的user_id
//var sender_name = data["sender_name"]?.ToString();//发送者昵称
//var server_id = data["server_id"]?.ToString();//消息的服务器ID
var enterpoint = data["enterpoint"]?.ToString();//入口点 - 链接(小程序里面的链接)
var headimg = data["headimg"]?.ToString();//小程序的头像
var name = data["name"]?.ToString();//小程序的名称
var title = data["title"]?.ToString();//小程序标题
var _wxid = data["wxid"]?.ToString();
var image_size = int.Parse(data["image_size"].ToString());
var image_key1 = data["image_key1"]?.ToString();
var image_key2 = data["image_key2"]?.ToString();
var image_key3 = data["image_key3"]?.ToString();
var ghid = data["ghid"]?.ToString();
var _json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_MINI_PROGRAM_MSG, data = new { conversation_id = conversation_id, ghid = ghid, wxid = _wxid, name = name, title = title, enterpoint = enterpoint, headimg = headimg, image_key1 = image_key1, image_key2 = image_key2, image_key3 = image_key3, image_size = image_size } });
SendWxWorkData(User.DwClientId, _json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error("发送小程序异常", ex.Message + ex.StackTrace);
}
}
public override void SendVideo(string wxid, string file)
{
try
{
var conversation_id = wxid;
if (!wxid.StartsWith("R:"))
{
conversation_id = $"S:{User.Wxid}_{wxid}";
}
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_VIDEO_MSG, data = new { conversation_id = conversation_id, file = file } });
SendWxWorkData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "-_");
}
}
public override void SendFile(string wxid, string file)
{
try
{
var conversation_id = wxid;
if (!wxid.StartsWith("R:"))
{
conversation_id = $"S:{User.Wxid}_{wxid}";
}
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_FILE_MSG, data = new { conversation_id = conversation_id, file = file } });
SendWxWorkData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "_-");
}
}
public override void SendCard(string to_wxid, string card_wxid)
{
try
{
var conversation_id = to_wxid;
if (!to_wxid.StartsWith("R:"))
{
conversation_id = $"S:{User.Wxid}_{to_wxid}";
}
if (card_wxid.StartsWith("R:"))
{
InviteMemberToRoom_40Up(card_wxid, to_wxid);
return;
}
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_PERSON_CARD_MSG, data = new { conversation_id = conversation_id, user_id = card_wxid } });
SendWxWorkData(User.DwClientId, json);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "--");
}
}
public override void CloseWechat(string message)
{
try
{
var v = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == User.DwClientId && f.Value.Type == WechatType.Xiaoxie_QY).Value;
if (v != null)
{
LogHelper.GetSingleObj().Info("系统", $"CloseWechatQY事件退出,Uin:{v.Uin},微信:{v.Nickname}({v.Wxid})");
WechatClient.RemoveUser(v, true);
if (!string.IsNullOrWhiteSpace(message))
PCRobotForm.ErrorMessAction?.Invoke(message);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message + "//");
}
}
private static void WxAcceptCallback(uint dwClientId)
{
Console.WriteLine("注入成功:" + dwClientId);
}
/// <summary>
/// 启动微信
/// </summary>
/// <param name="FileName"></param>
/// <returns></returns>
public static uint StartWechat(bool isError = false)
{
InitPc();
var WechatWinFile = HttpExtend.MapFile("WXWork.exe", $"WXWork\\{Version}");
var md5 = Common.GetMD5Hash(WechatWinFile).ToUpper();
if (!File.Exists(WechatWinFile) || md5 != PcMd5.ToUpper())
{
if (isError) throw new Exception("易转发客户端企业微信版本不支持,请登录易转发端手动处理");
var _rst = MessageBox.Show("您的企业微信版本暂时不支持,立即重新安装吗?", "版本不兼容", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (_rst == DialogResult.Yes)
{
var f = new WechatUpdate(Version);
f.ShowDialog();
if (!f.IsOk) return 0;
}
else return 0;
}
// 注入并多开
//return InjectWxWork(Encoding.UTF8.GetBytes(DllPath), Encoding.UTF8.GetBytes(""));
var path = HttpExtend.MapFile("WXWork.exe", $"WXWork\\{Version}");
LogHelper.GetSingleObj().Debug("注入前", $"DPath = {DllPath},Path = {path}");
return InjectWxWorkMultiOpen(Encoding.UTF8.GetBytes(DllPath), Encoding.UTF8.GetBytes(path));
}
#region
public enum MsgType : ushort
{
/// <summary>
/// 接口准备完毕
/// </summary>
MT_APP_READY_MSG = 11024,
/// <summary>
/// 参数错误提示
/// </summary>
MT_PARAMS_ERROR_MSG = 11025,
/// <summary>
/// 登录消息
/// </summary>
MT_USER_LOGIN = 11026,
/// <summary>
/// 注销消息
/// </summary>
MT_USER_LOGOUT = 11027,
/// <summary>
/// 登录二维码
/// </summary>
MT_LOGIN_QRCODE_MSG = 11028,
/// <summary>
/// 发送文本消息
/// </summary>
MT_SEND_TEXT_MSG = 11029,
/// <summary>
/// 发送图片消息
/// </summary>
MT_SEND_IMAGE_MSG = 11030,
/// <summary>
/// 发送文件消息
/// </summary>
MT_SEND_FILE_MSG = 11031,
/// <summary>
/// 发送目录消息
/// </summary>
MT_SEND_FOLDER_MSG = 11032,
/// <summary>
/// 发送链接消息
/// </summary>
MT_SEND_LINK_MSG = 11033,
/// <summary>
/// 发送个人名片
/// </summary>
MT_SEND_PERSON_CARD_MSG = 11034,
/// <summary>
/// 获取自己信息
/// </summary>
MT_GET_OWNER_INFO_MSG = 11035,
/// <summary>
/// 获取内部联系人列表
/// </summary>
MT_GET_INNER_USERS_MSG = 11036,
/// <summary>
/// 获取外部联系列表
/// </summary>
MT_GET_EXTERNAL_USERS_MSG = 11037,
/// <summary>
/// 获取群聊列表
/// </summary>
MT_GET_ROOMS_MSG = 11038,
/// <summary>
/// 获取用户详细信息
/// </summary>
MT_GET_USER_DETAIL_MSG = 11039,
/// <summary>
/// 获取群成员列表
/// </summary>
MT_GET_ROOM_MEMBERS_MSG = 11040,
/// <summary>
/// 接收文本消息
/// </summary>
MT_RECV_TEXT_MSG = 11041,
/// <summary>
/// 接收图片消息
/// </summary>
MT_RECV_IMG_MSG = 11042,
/// <summary>
/// 接收视频消息
/// </summary>
MT_RECV_VIDEO_MSG = 11043,
/// <summary>
/// 接收语音消息
/// </summary>
MT_RECV_VOICE_MSG = 11044,
/// <summary>
/// 接收文件消息
/// </summary>
MT_RECV_FILE_MSG = 11045,
/// <summary>
/// 接收位置消息
/// </summary>
MT_RECV_LOCATION_MSG = 11046,
/// <summary>
/// 接收链接消息
/// </summary>
MT_RECV_LINK_CARD_MSG = 11047,
/// <summary>
/// 接收表情消息
/// </summary>
MT_RECV_EMOTION_MSG = 11048,
/// <summary>
/// 接收红包消息
/// </summary>
MT_RECV_RED_PACKET_MSG = 11049,
/// <summary>
/// 接收个人名片消息
/// </summary>
MT_RECV_PERSON_CARD_MSG = 11050,
/// <summary>
/// 接收其他未解析消息
/// </summary>
MT_RECV_OTHER_MSG = 11051,
/// <summary>
/// 查询联系人
/// </summary>
MT_SEARCH_USER_MSG = 11052,
/// <summary>
/// 添加查询的联系人
/// </summary>
MT_ADD_SEARCH_USER_MSG = 11053,
/// <summary>
/// 修改用户备注
/// </summary>
MT_MODIFY_USER_REMARK_MSG = 11054,
/// <summary>
/// 修改用户描述
/// </summary>
MT_MODIFY_USER_DESC_MSG = 11055,
/// <summary>
/// 修改外部联系人手机号
/// </summary>
MT_MODIFY_EXTERNAl_USER_PHONES_MSG = 11056,
/// <summary>
/// 修改外部联系人公司
/// </summary>
MT_MODIFY_EXTERNAl_USER_COMPANY_MSG = 11057,
/// <summary>
/// 创建群聊
/// </summary>
MT_CREATE_ROOM_MSG = 11058,
/// <summary>
/// 修改群名
/// </summary>
MT_MODIFY_ROOM_NAME_MSG = 11059,
/// <summary>
/// 添加群成员
/// </summary>
MT_ROOM_ADD_MEMBERS_MSG = 11060,
/// <summary>
/// 删除群成员
/// </summary>
MT_ROOM_DEL_MEMBERS_MSG = 11061,
/// <summary>
/// 接收好友请求
/// </summary>
MT_RECV_FRIEND_REQUEST = 11063,
/// <summary>
/// 接受加好友请求
/// </summary>
MT_ACCEPT_FRIEND_REQUEST = 11064,
/// <summary>
/// 发送小程序
/// </summary>
MT_SEND_MINI_PROGRAM_MSG = 11065,
/// <summary>
/// 接收到小程序
/// </summary>
MT_RECV_MINIAPP_MSG = 11066,
/// <summary>
/// 发送视频
/// </summary>
MT_SEND_VIDEO_MSG = 11067,
/// <summary>
/// 接收图文消息
/// </summary>
MT_RECV_IMAGE_TEXT_MSG = 11068,
/// <summary>
/// 发送群@消息
/// </summary>
MT_SEND_ROOM_AT_MSG = 11069,
/// <summary>
/// 发送动图(gif)消息
/// </summary>
MT_SEND_GIF_MSG = 11070,
/// <summary>
/// 添加群成员为联系人
/// </summary>
MT_ADD_ROOM_USER_MSG = 11071,
/// <summary>
/// 群成员新增通知
/// </summary>
MT_ROOM_ADD_MEMBER_NOTIFY_MSG = 11072,
/// <summary>
/// 剔除群成员通知
/// </summary>
MT_ROOM_DEL_MEMBER_NOTIFY_MSG = 11073,
/// <summary>
/// 新群通知
/// </summary>
MT_ROOM_CREATE_NOTIFY_MSG = 11074,
/// <summary>
/// 群成员主动退出通知
/// </summary>
MT_ROOM_MEMBER_QUIT_NOTIFY_MSG = 11075,
/// <summary>
/// 好友新增通知
/// </summary>
MT_CONTACT_ADD_NOITFY_MSG = 11076,
}
#endregion
}
}