old_flsystem/PCRobot/PCWechat/Wechat_Dazong - 复制.cs

1783 lines
81 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 HPSocketCS;
using Newtonsoft.Json.Linq;
using NM_WeChat;
using PCRobot.Pack;
using PCRobot.Utils;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static PCRobot.PCWechat.WechatClient;
namespace PCRobot.PCWechat
{
public class Wechat_Dazong : BaseApi
{
public Wechat_Dazong(WechatUser User) : base(User) { }
static TcpPackServer HP_Server;
static NMCore nmCore;
static NMHelper nmHeler;
#region
//private const string Version = "2.7.1.88";
//private const int PcOffSet = 0x138D6C0;//2.7.1.88
//private const string PcMd5 = "ced61f308edd8cf3e2d864df285dc2af";//2.7.1.88
//private const string Version = "3.1.0.41";
//private const int PcOffSet = 0x1885DE0;//3.1.0.41
//private const string PcMd5 = "E9D55BB8A28F02FAC6645480FEC35B8D";//3.1.0.41
private const string Version = "3.2.1.154";
private const int PcOffSet = 0x1AA82E8;//3.2.1.154
private const string PcMd5 = "68B06E378747CD3C58935A70A9DBA431";//3.2.1.154
private const string NanMuCore = "NanMuCore_3.2.1.154.dll";
//private const string Version = "3.2.1.154";
//private const int PcOffSet = 0x1CF9128;//3.3.5.50
////1D03368
////1D04228
////1D29830
////1D2C550
//private const string PcMd5 = "68B06E378747CD3C58935A70A9DBA431";//3.3.5.50
//private const string NanMuCore = "NanMuCore_3.3.5.50.dll";
#endregion
public static void Install()
{
DllPath = HttpExtend.MapFile(NanMuCore, "Bin");
if (IsKsfInstall) return;
HP_Server = new TcpPackServer();
nmHeler = new NMHelper();
HP_Server.OnAccept += new ServerEvent.OnAcceptEventHandler(OnAccept);
HP_Server.OnReceive += new ServerEvent.OnReceiveEventHandler(OnReceive);
HP_Server.OnClose += new ServerEvent.OnCloseEventHandler(OnClose);
HP_Server.MaxPackSize = 0x3FFFFF;
HP_Server.IpAddress = "127.0.0.1";
HP_Server.Port = 0;
if (HP_Server.Start() == true)
{
nmCore = new NMCore(HP_Server);
string szIPAddress = string.Empty;
ushort dwPort = 0;
HP_Server.GetListenAddress(ref szIPAddress, ref dwPort);
if (dwPort == 0)
{
MessageBox.Show("通信端口创建失败,请重试!", "错误");
Environment.Exit(0);
}
nmHeler.Socket_Port = dwPort;
try
{
NMHelper.NM_LinkWeChat(201912121, nmHeler.Socket_Port, 0, 0);
}
catch (Exception ex)
{ }
IsKsfInstall = true;
return;
Process[] MyProcesses = Process.GetProcesses();
var path1 = HttpExtend.MapPath("PCWechat");
var path2 = HttpExtend.MapPath("PCWechat\\" + Version);
foreach (Process MyProcess in MyProcesses)
{
try
{
var name = MyProcess.ProcessName.ToUpper();
if (name == "WECHAT" && MyProcess.MainModule.FileName.StartsWith(path1))
{
try
{
//判断微信版本
//if (MyProcess.MainModule.FileName.StartsWith(path2) || is_inject)
if (MyProcess.MainModule.FileName.StartsWith(path2))
{
var id = MyProcess.Id;
bool flag = Task.Factory.StartNew(delegate
{
try
{
//var path = CsharpHttpHelper.HttpExtend.MapPath($"PCWechat\\" + Version);
//string szDllPath = System.IO.Directory.GetCurrentDirectory() + "\\Bin\\"+NanMuCore;
//NMHelper.NM_CreateWeChatProcess(path, "WeChat.exe", szDllPath, nmHeler.Socket_Port);
NMHelper.NM_LinkWeChat(201912121, nmHeler.Socket_Port, 0, 0);
}
catch (Exception)
{ }
}).Wait(5000);
if (!flag)
{
try
{
MyProcess.Kill();
}
catch (Exception)
{ }
}
}
else
{
//终止掉,其他版本
try
{
MyProcess.Kill();
}
catch (Exception)
{ }
}
}
catch (Exception)
{ }
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
}
}
/// <summary>
/// 通信事件_登录成功
/// </summary>
/// <param name="ConnID"></param>
/// <param name="RecvJson"></param>
static void Event_Login(int ConnID, JObject RecvJson)
{
var wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
var user = WechatClient.GetUser(wxid, (uint)ConnID, WechatType.Dazong);
user.Nickname = nmHeler.Json_GetString(RecvJson, "Nick", true);
user.Wxid = wxid;
user.HeaderUrl = nmHeler.Json_GetString(RecvJson, "HeadIMG", true);
//user.DBFile = data["wx_user_dir"].ToString();
int pid = 0;
nmHeler.Json_GetInt(RecvJson, "ProcessId", out pid);
user.Pid = pid;
user.Phone = nmHeler.Json_GetString(RecvJson, "phone", true);
user.Uin = GetUin(user.Pid);
WechatClient.OnRefUserEvent(user);
if (WechatClient.IsDebug)
LogHelper.GetSingleObj().Debug("调试登录", $"{wxid} - {user}");
}
/// <summary>
/// 获取微信的uin的值
/// </summary>
/// <param name="pid"></param>
/// <returns></returns>
public static string GetUin(int pid)
{
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
if (process.Id == pid)
{
foreach (ProcessModule processModule in process.Modules)
{
if (processModule.ModuleName == "WeChatWin.dll")
{
//微信基址
var WeChatWinBaseAddress = processModule.BaseAddress;
//Console.WriteLine("微信基址:\t" + "0x" + ((int)(processModule.BaseAddress)).ToString("X8") + Environment.NewLine);
var WxNameAddress = WeChatWinBaseAddress + PcOffSet;
var uinStr = Common.GetString(process.Handle, WxNameAddress, 4);
return uinStr;
}
}
break;
}
}
return string.Empty;
}
/// <summary>
/// 关闭事件
/// </summary>
/// <param name="sender"></param>
/// <param name="connId"></param>
/// <param name="enOperation"></param>
/// <param name="errorCode"></param>
/// <returns></returns>
private static HandleResult OnClose(IServer sender, IntPtr connId, SocketOperation enOperation, int errorCode)
{
try
{
var v = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == (uint)connId && f.Value.Type == WechatType.Dazong).Value;
if (v != null)
{
LogHelper.GetSingleObj().Info("系统", $"WxCloseCallbackDaZong关闭回调,Uin:{v.Uin},微信:{v.Nickname}({v.Wxid})");
WechatClient.RemoveUser(v);
}
return HandleResult.Ok;
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
return HandleResult.Error;
}
private static HandleResult OnReceive(IServer sender, IntPtr connId, byte[] bytes)
{
try
{
string s_Recv = Encoding.Default.GetString(bytes);
JObject RecvJson = JObject.Parse(s_Recv);
Console.WriteLine(RecvJson);
int RecvType;
var method = new Action(delegate ()
{
if (nmHeler.Json_GetInt(RecvJson, "PackType", out RecvType) == true)
{
if (RecvType == NMHelper.Recv_QRCode)
{
Event_QRCode(RecvJson);
}
else if (RecvType == NMHelper.Recv_Login)
{
Event_Login((int)connId, RecvJson);
}
else if (RecvType == NMHelper.Recv_Logout)
{
Event_Logout((int)connId, RecvJson);
}
else if (RecvType == NMHelper.Recv_Msg)
{
Event_RecvMsg((int)connId, RecvJson);
}
else if (RecvType == NMHelper.Recv_SelectTalker)
{
Event_SelectTalker((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_GetContactList)
{
Event_RecvContactList((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_GetGroupMember)
{
Event_RecvGroupMember((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_GetWxidInfo)
{
Event_RecvWxidInfo((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_AddFriend)
{
Event_AddFriend((int)connId, RecvJson);//主动申请加别人
}
else if (RecvType == NMHelper.NM_CreateGroup)
{
Event_CreateGroup((int)connId, RecvJson);//建群
}
else if (RecvType == NMHelper.NM_GetFavList)
{
Event_GetFavList((int)connId, RecvJson);//收藏
}
else if (RecvType == NMHelper.NM_GetA8Key)
{
Event_GetA8Key((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_InvitePull)
{
Event_GroupInvite((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_QuitGroup)
{
Event_GroupQuit((int)connId, RecvJson);
}
}
});
method.BeginInvoke(null, null);
return HandleResult.Ok;
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
return HandleResult.Error;
}
private static void Event_QRCode(JObject RecvJson)
{
try
{
int dwPid = 0;
nmHeler.Json_GetInt(RecvJson, "ProcessId", out dwPid);
string B64_QRCode = nmHeler.Json_GetString(RecvJson, "QRCode", false);
if (B64_QRCode != string.Empty)
{
byte[] imageBytes = Convert.FromBase64String(B64_QRCode);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
ms.Write(imageBytes, 0, imageBytes.Length);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static void Event_GroupQuit(int ConnId, JObject RecvJson)
{
try
{
string RecvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
string outLog = "[群员动态-退群]" + RecvWxid;
string GroupID = nmHeler.Json_GetString(RecvJson, "GroupID", true);
outLog += "群聊ID" + GroupID;
JArray MemberList = RecvJson.Value<JArray>("List");
if (MemberList != null)
{
for (int i = 0; i < MemberList.Count; i++)
{
JToken JtMember = MemberList.ElementAt(i);
if (JtMember != null)
{
string Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
string Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
outLog += "[" + (i + 1).ToString() + "]";
outLog += Wxid + (Nick == string.Empty ? string.Empty : "(" + Nick + ")");
}
}
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static void Event_GroupInvite(int ConnId, JObject RecvJson)
{
try
{
string RecvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
string outLog = "[群员动态-进群]" + RecvWxid;
string GroupID = nmHeler.Json_GetString(RecvJson, "GroupID", true);
outLog = "群聊ID" + GroupID;
JArray MemberList = RecvJson.Value<JArray>("List");
if (MemberList != null)
{
for (int i = 0; i < MemberList.Count; i++)
{
JToken JtMember = MemberList.ElementAt(i);
if (JtMember != null)
{
string Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
string Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
string InvWxid = nmHeler.Json_GetString((JObject)JtMember, "InvWxid", true);
string InvNick = nmHeler.Json_GetString((JObject)JtMember, "InvNick", true);
outLog += "[" + (i + 1).ToString() + "]";
outLog += "进群人:" + Wxid + (Nick == string.Empty ? string.Empty : "(" + Nick + ")");
outLog += "邀请人:" + InvWxid + (InvNick == string.Empty ? string.Empty : "(" + InvNick + ")");
}
}
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static void Event_GetA8Key(int ConnId, JObject RecvJson)
{
try
{
string RecvWxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
string outLog = "[GetA8Key]" + RecvWxid;
string URL = nmHeler.Json_GetString(RecvJson, "URL", true);
string LastURL = nmHeler.Json_GetString(RecvJson, "LastURL", true);
outLog += "获取链接:" + URL;
outLog += "返回链接:" + LastURL;
//if (URL.IndexOf("mmsupport-bin/addchatroombyinvite") != -1)
//{
// HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(URL);
// Request.Method = "POST";
// Request.AllowAutoRedirect = false;
// Request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
// Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.556.400 QQBrowser/9.0.2524.400";
// Request.Referer = URL;
// Request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8,en-us;q=0.6,en;q=0.5;q=0.4");
// HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
// string hLocation = Response.GetResponseHeader("Location").ToString();
// if (hLocation != "")
// {
// if (hLocation.IndexOf("chatroom") != -1)
// {
// string GroupID = nmHeler.StringMid(hLocation, "weixin://jump/mainframe/", "@chatroom");
// WriteLog("[接受群聊邀请]" + RecvWxid + "群聊ID" + GroupID + "@chatroom");
// }
// }
//}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static void Event_GetFavList(int connId, JObject recvJson)
{
try
{
//string outLog = "[收藏列表]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true) ;
//JArray FavList = RecvJson.Value<JArray>("List");
//if (FavList != null)
//{
// list_Fav.Items.Clear();
// int dwCount = FavList.Count;
// if (dwCount != 0)
// {
// list_Fav.BeginUpdate();
// for (int i = 0; i < dwCount; i++)
// {
// JToken JtMember = FavList.ElementAt(i);
// if (JtMember != null)
// {
// int Type = nmHeler.Json_GetIntEx((JObject)JtMember, "Type");
// string SearchKey = nmHeler.Json_GetString((JObject)JtMember, "SearchKey", true);
// string TypeName = nmHeler.GetFavType(Type);
// ListViewItem FavItem = new ListViewItem();
// FavItem.Text = i.ToString();
// FavItem.SubItems.Add(TypeName);
// FavItem.SubItems.Add(SearchKey == string.Empty ? "[" + TypeName + "文件]" : SearchKey);
// list_Fav.Items.Add(FavItem);
// }
// }
// list_Fav.EndUpdate();
// outLog += "收藏列表读取成功,共" + dwCount.ToString() + "条记录!";
// }
// else
// {
// outLog += "没有收藏";
// }
//}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static void Event_CreateGroup(int ConnId, JObject RecvJson)
{
//try
//{
// string outLog = "[创建群聊]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
// string Data = nmHeler.Json_GetString(RecvJson, "Data", true);
// string GroupID = nmHeler.Json_GetString(RecvJson, "GroupID", true);
// outLog += "建群返回:" + Data;
// outLog += GroupID == string.Empty ? string.Empty : "群聊ID" + GroupID;
// JArray MemberList = RecvJson.Value<JArray>("List");
// if (MemberList != null)
// {
// outLog += "群员列表:";
// for (int i = 0; i < MemberList.Count; i++)
// {
// JToken JtMember = MemberList.ElementAt(i);
// if (JtMember != null)
// {
// string Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
// string Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
// int state = nmHeler.Json_GetIntEx((JObject)JtMember, "State");
// if (Wxid != string.Empty)
// {
// outLog += "[" + state.ToString() + "]" + (state == 0 ? "[成功]" : "[失败]");
// outLog += Wxid + (Nick == string.Empty ? string.Empty : "(" + Nick + ")");
// }
// }
// }
// }
//}
//catch (Exception ex)
//{
// LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
//}
}
private static void Event_AddFriend(int ConnID, JObject RecvJson)
{
//try
//{
// string outLog = "[添加好友]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
// int DataType = nmHeler.Json_GetIntEx(RecvJson, "DataType");
// string Data = nmHeler.Json_GetString(RecvJson, "Data", true);
// int Type = nmHeler.Json_GetIntEx(RecvJson, "Type");
// int AddType = nmHeler.Json_GetIntEx(RecvJson, "AddType");
// string Wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
// string v2 = nmHeler.Json_GetString(RecvJson, "V2", true);
// string Message = nmHeler.Json_GetString(RecvJson, "Message", true);
// outLog += "添加返回:[" + DataType.ToString() + "]" + (DataType == 0 ? "已发送好友请求或已添加好友。" : Data);
// outLog += "添加类型:" + Type.ToString() + " 添加来源:" + AddType.ToString();
// outLog += "Wxid" + Wxid;
// outLog += v2 == string.Empty ? string.Empty : "v2" + v2;
// outLog += Message == string.Empty ? string.Empty : "附加消息:" + Message;
// if (Type == 1 && DataType == -44)
// {
// //nmCore.NM_AddFriend(ConnID, 2, AddType, Wxid, v2, text_Friend_Message.Text);
// nmCore.NM_AddFriend(ConnID, 2, AddType, Wxid, v2, string.Empty);//TODO 改成了string.e
// }
//}
//catch (Exception ex)
//{
//LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
//}
}
private static void Event_RecvWxidInfo(int connId, JObject RecvJson)
{
try
{
//string outLog = "[下载详细信息]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true) + NewLine;
//int dwState = nmHeler.Json_GetIntEx(RecvJson, "State");
//if (dwState == -1) { outLog += "下载详细信息超时(原因:服务器无返回)!"; }
//else if (dwState == 0) { outLog += "下载详细信息失败(原因:可能是输入的Wxid不正确)!"; }
//else if (dwState == 1)
//{
// string szGroupID = nmHeler.Json_GetString(RecvJson, "GroupId", true);
// NMHelper.nmWxidInfo MemberInfo = new NMHelper.nmWxidInfo();
// MemberInfo.Wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
// MemberInfo.WxNo = nmHeler.Json_GetString(RecvJson, "WxNo", true);
// MemberInfo.Nick = nmHeler.Json_GetString(RecvJson, "Nick", true);
// MemberInfo.V1 = nmHeler.Json_GetString(RecvJson, "v1", true);
// MemberInfo.HeadIMG = nmHeler.Json_GetString(RecvJson, "HeadIMG", true);
// MemberInfo.Address = nmHeler.Json_GetString(RecvJson, "Address", true);
// MemberInfo.Sex = MemberInfo.GetSex(nmHeler.Json_GetIntEx(RecvJson, "Sex"));
// outLog += szGroupID == string.Empty ? string.Empty : "群ID" + szGroupID + NewLine;
// outLog += "Wxid" + MemberInfo.Wxid + NewLine;
// outLog += MemberInfo.WxNo == string.Empty ? string.Empty : "微信号:" + MemberInfo.WxNo + NewLine;
// outLog += "昵称:" + MemberInfo.Nick + NewLine;
// outLog += MemberInfo.V1 == string.Empty ? string.Empty : "v1" + MemberInfo.V1 + NewLine;
// outLog += "性别:" + MemberInfo.Sex + NewLine;
// outLog += MemberInfo.Address == string.Empty ? string.Empty : "地区:" + MemberInfo.Address + NewLine;
// outLog += MemberInfo.HeadIMG == string.Empty ? string.Empty : "头像:" + MemberInfo.HeadIMG + NewLine;
//}
//WriteLog(outLog);
var wxid = nmHeler.Json_GetString(RecvJson, "Wxid", true);
var WxNo = nmHeler.Json_GetString(RecvJson, "WxNo", true);
var Nick = nmHeler.Json_GetString(RecvJson, "Nick", true);
var V1 = nmHeler.Json_GetString(RecvJson, "v1", true);
var HeadIMG = nmHeler.Json_GetString(RecvJson, "HeadIMG", true);
var Address = nmHeler.Json_GetString(RecvJson, "Address", true);
//var Sex = MemberInfo.GetSex(nmHeler.Json_GetIntEx(RecvJson, "Sex"));
if (Common.IsGzh(wxid, WechatClient.IsGzh)) return;
var f = new FriendInfo();
f.account = WxNo;
f.wxid = wxid;
f.nickname = Nick;
f.remark = Nick;
f.avatar = HeadIMG;
f.city = string.Empty;
f.country = string.Empty;
f.province = string.Empty;
f.sex = nmHeler.Json_GetIntEx(RecvJson, "Sex");
var user = WechatClient.GetUser((uint)connId, WechatType.Dazong);
if (user == null)
return;
var friend = user.Friends.FirstOrDefault(z => z.wxid == f.wxid);
if (friend != null)
if (!user.Friends.TryTake(out friend)) return;
user.Friends.Add(f);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static void Event_RecvGroupMember(int ConnId, JObject RecvJson)
{
try
{
//string outLog = "[群员列表]" + nmHeler.Json_GetString(RecvJson, "RecvWxid", true);
int dwState = nmHeler.Json_GetIntEx(RecvJson, "State");
if (dwState == 0)//群员列表读取失败!
return;
JArray m_List = RecvJson.Value<JArray>("List");
if (m_List != null)
{
//var recv_wxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);//群主
var user = WechatClient.GetUser((uint)ConnId, WechatType.Dazong);
if (user == null)
return;
var group_wxid = nmHeler.Json_GetString(RecvJson, "GroupID", true);
var Count = (int)RecvJson["Count"];
var group = user.Groups.FirstOrDefault(z => z.wxid == group_wxid);
if (group == null)
{
group = new GroupInfo() { wxid = group_wxid, total_member = Count, friends = new List<FriendInfo>() };
user.Groups.Add(group);
}
else
group.total_member = Count;
for (int i = 0; i < m_List.Count; i++)
{
JToken JtMember = m_List.ElementAt(i);
if (JtMember != null)
{
var Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
var Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
var Mark = nmHeler.Json_GetString((JObject)JtMember, "Mark", true);
var HeadIMG = nmHeler.Json_GetString((JObject)JtMember, "HeadIMG", true);
var f = new FriendInfo();
f.account = Wxid;//item["account"]?.ToString();
f.avatar = HeadIMG;//item["avatar"]?.ToString();
f.city = string.Empty;//item["city"]?.ToString();
f.country = string.Empty;//item["country"]?.ToString();
f.nickname = Nick;//item["nickname"]?.ToString();
f.province = string.Empty;//item["province"]?.ToString();
f.remark = Mark;//item["remark"]?.ToString();
f.sex = -1;//int.Parse(item["sex"]?.ToString());
f.wxid = Wxid;//item["wxid"]?.ToString();
var friend = group.friends.FirstOrDefault(z => z.wxid == f.wxid);
if (friend == null)
group.friends.Add(f);
}
}
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static void Event_RecvContactList(int ConnId, JObject RecvJson)
{
try
{
var user = WechatClient.GetUser((uint)ConnId, WechatType.Dazong);
if (user == null)
return;
int dwState = nmHeler.Json_GetIntEx(RecvJson, "State");
if (dwState == 0)//通讯录列表读取失败!
return;
JArray m_List = RecvJson.Value<JArray>("List");
if (m_List != null)
{
for (int i = 0; i < m_List.Count; i++)
{
JToken JtMember = m_List.ElementAt(i);
if (JtMember != null)
{
var Type = nmHeler.Json_GetIntEx((JObject)JtMember, "Type");
var List = nmHeler.Json_GetIntEx((JObject)JtMember, "List");
var Wxid = nmHeler.Json_GetString((JObject)JtMember, "Wxid", true);
var WxNo = nmHeler.Json_GetString((JObject)JtMember, "WxNo", true);
var Nick = nmHeler.Json_GetString((JObject)JtMember, "Nick", true);
var Mark = nmHeler.Json_GetString((JObject)JtMember, "Mark", true);
var HeadIMG = nmHeler.Json_GetString((JObject)JtMember, "HeadIMG", true);
if (Type == 8 || Type == 24 || Type == 29)
continue;
else if (Wxid.LastIndexOf("@chatroom") != -1)
{
////UserItem.Text = MemberInfo.Nick == string.Empty ? "群聊" : MemberInfo.Nick;
////UserItem.SubItems.Add(MemberInfo.Wxid);
////UserItem.SubItems.Add(MemberInfo.WxNo);
////UserItem.SubItems.Add(MemberInfo.List.ToString());
////UserItem.SubItems.Add(MemberInfo.HeadIMG);
////list_Group.Items.Add(UserItem);
var f = new FriendInfo();
f.avatar = HeadIMG;
f.wxid = Wxid;
f.nickname = Nick;
f.remark = Mark;
f.manager_wxid = WxNo;
f.member_list = string.Empty;
var group = user.Groups.FirstOrDefault(z => z.wxid == f.wxid);
if (group == null)
{
//群不存在,去获取群成员信息
nmCore.NM_GetGroupMember(ConnId, f.wxid);
group = new GroupInfo() { wxid = f.wxid, nickname = f.nickname, avatar = f.avatar, total_member = f.member_list.Length, friends = new List<FriendInfo>() };
user.Groups.Add(group);
}
else
group.total_member = f.member_list.Length;
var friend = user.Friends.FirstOrDefault(z => z.wxid == f.wxid);
if (friend == null)
user.Friends.Add(f);
}
else if (List != 2)
{
var f = new FriendInfo();
f.wxid = Wxid;
//f.account = item["account"]?.ToString();
f.nickname = Nick;//item["nickname"]?.ToString();
f.remark = Mark;//item["remark"]?.ToString();
f.avatar = HeadIMG;//item["avatar"]?.ToString();
//f.sex = int.Parse(item["sex"]?.ToString());
//f.city = item["city"]?.ToString();
var friend = user.Friends.FirstOrDefault(z => z.wxid == f.wxid);
if (friend == null)
user.Friends.Add(f);
}
}
}
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static void Event_SelectTalker(int connId, JObject recvJson)
{
//throw new NotImplementedException();
}
private static void Event_RecvMsg(int _dwClientid, JObject RecvJson)
{
try
{
var dwClientid = (uint)_dwClientid;
//NMHelper.nmMsgInfo MsgInfo = new NMHelper.nmMsgInfo();
var recv_wxid = nmHeler.Json_GetString(RecvJson, "RecvWxid", true);//机器人账号
var wx_type = nmHeler.Json_GetIntEx(RecvJson, "Type");
var State = nmHeler.Json_GetIntEx(RecvJson, "State");
var Time = nmHeler.Json_GetIntEx(RecvJson, "Time");
var IsSend = nmHeler.Json_GetIntEx(RecvJson, "Sender");
var LocalMsgID = nmHeler.Json_GetIntEx(RecvJson, "LocalID");
var ServerMsgID = nmHeler.Json_GetString(RecvJson, "ServerID", false);
var Wxid_1 = nmHeler.Json_GetString(RecvJson, "Wxid_1", true);//发送者的账号 //to_wxid 为群的时候 为群号
var Nick_1 = nmHeler.Json_GetString(RecvJson, "Nick_1", true);//发送者的昵称
var Wxid_2 = nmHeler.Json_GetString(RecvJson, "Wxid_2", true); //群内发送人的账号
var Nick_2 = nmHeler.Json_GetString(RecvJson, "Nick_2", true);//发送者的昵称
var raw_msg = nmHeler.Json_GetString(RecvJson, "Msg", true);
var Source = nmHeler.Json_GetString(RecvJson, "Source", true);
var socketClient = EasySoc.GetSocket();
if (wx_type == 1)
{
if (Common.IsGzh(Wxid_1, WechatClient.IsGzh)) return;
Assistance ass = null;
if (IsSend == 1)
{
var from_qun = Wxid_1.Contains("@chatroom");
var from_wxid = from_qun ? Wxid_2 : Wxid_1;
if (from_qun && string.IsNullOrWhiteSpace(Wxid_2)) return;
if (!WechatClient.IsAuxiliaryInput(recv_wxid, from_qun ? Wxid_2 : Wxid_1, raw_msg))
{
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + raw_msg);
return;
}
ass = WechatClient.IsAssistance(recv_wxid, Wxid_1.Contains("@chatroom") ? Wxid_2 : Wxid_1, dwClientid, WechatType.Dazong);
// if (ass.type == WechatClient.AssistanceType.终止) return;
}
else
{
ass = WechatClient.IsAssistance(Wxid_1.Contains("@chatroom") ? Wxid_2 : Wxid_1, recv_wxid, dwClientid, WechatType.Dazong);
}
if (ass.type == WechatClient.AssistanceType.) return;
WechatReceiveMsg wmsg = new WechatReceiveMsg();
wmsg.Cmd = PCRobotCMD.rcvTxt;
wmsg.IsSend = ass.type == WechatClient.AssistanceType.;
wmsg.RobotUsername = ass.robotName;
wmsg.RobotUsernick = ass.robotNick;
wmsg.RobotType = RobotType.;
wmsg.FromMessageType = WechatMsgType.;
if (Wxid_1.Contains("@chatroom"))
{
wmsg.FromGroupid = Wxid_1;
wmsg.FromUsername = Wxid_2;
wmsg.FromUsernick = Nick_1 == ass.robotName ? ass.robotNick : string.Empty;
}
else
{
wmsg.FromUsername = ass.fromName;
wmsg.FromUsernick = ass.fromNick;
}
wmsg.FromMessage = raw_msg;
socketClient.Send(wmsg);
}
if (wx_type == 3 || wx_type == 34 || wx_type == 43 || wx_type == 49)//图片、语音、视频、文件
{
var ass = WechatClient.IsAssistance(Wxid_1.Contains("@chatroom") ? Wxid_2 : Wxid_1, recv_wxid, dwClientid, WechatType.Dazong);
if (ass.type == WechatClient.AssistanceType.) return;
WechatReceiveMsg msg = new WechatReceiveMsg();
msg.Cmd = PCRobotCMD.rcvFile;
msg.IsSend = false;
if (wx_type == 3)//|| wx_type == 43)//图片
{
//string FileData = nmHeler.Json_GetString(RecvJson, "File", false);
//if (FileData != string.Empty)
//{
// byte[] FileBytes = Convert.FromBase64String(FileData);
// string FilePath = nmHeler.SaveFile(recv_wxid, Wxid_1, (wx_type == 3 ? "IMAGE" : "VOICE"), ServerMsgID, (wx_type == 3 ? "jpg" : "silk"), FileBytes);
// msg.Cmd = PCRobotCMD.rcvImg;
// msg.IsSend = ass.type == WechatClient.AssistanceType.辅助;
// var path = Common.CacheFilePath(ass.robotName, ass.fromName, "IMAGE", ServerMsgID, "jpg");
// msg.FromMessage = $"[图片={path}]";
// msg.FromUsername = ass.fromName;
// msg.FromUsernick = string.Empty;//没有获取昵称
// msg.FromMessageType = WechatMsgType.图片;
// msg.FileCDNXML = raw_msg;
//}
//else
return;
}
else if (wx_type == 34)//语音
{
//msg.FromMessage = string.Empty;//$"[语音={FilePath}]";//TODO 语音文件
//msg.FromMessageType = WechatMsgType.语音;
return;
}
else if (wx_type == 43)//视频
{
//var video = data["video"].ToString();
//msg.FromMessage = $"[视频={video}]";
//msg.FromMessageType = WechatMsgType.视频;
return;
}
else if (wx_type == 49)//文件/小程序
{
//msg.FromMessage = string.Empty;//$"[文件={FilePath}]";//TODO 文件
//msg.FromMessageType = WechatMsgType.文件;
//转账自动收款
if (IsSend == 0 && raw_msg.IndexOf("微信转账") != -1 && raw_msg.IndexOf("收到转账") != -1)
{
string state = Common.StringMid(raw_msg, "<paysubtype>", "</paysubtype>");
string Transid = Common.StringMid(raw_msg, "transferid><![CDATA[", "]]></transferid>");
int dwTime = 0;
int.TryParse(Common.StringMid(raw_msg, "<invalidtime><![CDATA[", "]]></invalidtime>"), out dwTime);
if (state == "1" && Transid != string.Empty)
{
WechatReicevePay reicevePay = new WechatReicevePay();
var user = WechatClient.GetUser(dwClientid, WechatType.Dazong);
if (user == null)
return;
reicevePay.RobotUsername = user.Wxid;
reicevePay.RobotUsernick = user.Nickname;
reicevePay.RobotType = RobotType.;
reicevePay.FromUsername = recv_wxid;
reicevePay.FromUsernick = string.Empty;//没有获取昵称
reicevePay.Cmd = PCRobotCMD.receivePay;
reicevePay.Invalidtime = dwTime.ToString();
reicevePay.Transferid = Transid;
var reg = Regex.Match(raw_msg, "收到转账(?<金额>.+)元");
if (reg.Success)
reicevePay.Money = double.Parse(reg.Groups["金额"].Value);
if (reicevePay.RobotUsernick == null) reicevePay.RobotUsernick = string.Empty;
socketClient.Send(reicevePay);
return;
}
}
else if (raw_msg.Trim().Contains("<?xml "))
{
try
{
if (Common.IsGzh(recv_wxid, WechatClient.IsGzh)) return;
if (!WechatClient.IsAuxiliaryInput(Wxid_1.Contains("@chatroom") ? Wxid_2 : Wxid_1, recv_wxid, raw_msg))
{
Console.WriteLine("此消息被过滤,因为是机器人自己发送的:" + raw_msg);
return;
}
ass = WechatClient.IsAssistance(Wxid_1.Contains("@chatroom") ? Wxid_2 : Wxid_1, recv_wxid, dwClientid, WechatType.Dazong);
if (ass.type == WechatClient.AssistanceType.) return;
socketClient = EasySoc.GetSocket();
WechatReceiveMsg wmsg = new WechatReceiveMsg();
wmsg.Cmd = PCRobotCMD.rcvTxt;
wmsg.IsSend = ass.type == WechatClient.AssistanceType.;
wmsg.RobotUsername = ass.robotName;
wmsg.RobotUsernick = ass.robotNick;
wmsg.RobotType = RobotType.;
wmsg.FromMessageType = WechatMsgType.;
if (Wxid_1.Contains("@chatroom"))
wmsg.FromGroupid = Wxid_1;
wmsg.FromUsername = ass.fromName;
wmsg.FromUsernick = ass.fromNick;
wmsg.FromMessage = raw_msg;
socketClient.Send(wmsg);
//return;
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
}
else
{ }
msg.IsSend = false;
msg.RobotUsername = ass.robotName;
msg.RobotUsernick = ass.robotNick;
msg.RobotType = RobotType.;
//if (room_wxid.Contains("@chatroom"))
//msg.FromGroupid = room_wxid;
// msg.FromUsername = from_wxid;
//msg.FromUsernick = string.Empty;//TODO 昵称没有获取
socketClient.Send(msg);
}
if (wx_type == 37)//接收到好友申请请求
{
WechatApplyFriend wXApply = new WechatApplyFriend();
wXApply.Cmd = PCRobotCMD.applyFriend;
wXApply.RobotUsername = recv_wxid;
wXApply.RobotUsernick = WechatClient.GetUser(recv_wxid)?.Nickname;
wXApply.RobotType = RobotType.;
//<msg fromusername="wxid_jhr9qilcujjn22" encryptusername="v1_8d1c84eda8b2f59471903e42413492ce5d24eb1c899db7523181cf7f1d84925f7e6374d8ab583c811e2c7890e588c15c@stranger" fromnickname="不到120不改昵称" content="退款软件购买" fullpy="budao120bugainichen" shortpy="BD120BGNC" imagestatus="3" scene="30" country="" province="" city="" sign="" percard="0" sex="0" alias="" weibo="" albumflag="0" albumstyle="0" albumbgimgid="" snsflag="1" snsbgimgid="http://szmmsns.qpic.cn/mmsns/z7ibQ8kx808bEXu8aMDJ5XibJspBpicbS0fFuAicZ5yxdCe9LDNdIhI8eGvFGibgx6mNYDVlfZYTTk84/0" snsbgobjectid="13323742204566581420" mhash="44d9a45239162b8f88bcc48369a08952" mfullhash="44d9a45239162b8f88bcc48369a08952" bigheadimgurl="http://wx.qlogo.cn/mmhead/ver_1/neKmZQe8jBEJAA1wxPOzqn9QsWnVARLmlj6iadV0NS0CpEaJjkDCyg2gfapJLp2EpnQqichVKibS3SY2bUNnJB7IKGUAUDaibNqPHTG6DOn32bw/0" smallheadimgurl="http://wx.qlogo.cn/mmhead/ver_1/neKmZQe8jBEJAA1wxPOzqn9QsWnVARLmlj6iadV0NS0CpEaJjkDCyg2gfapJLp2EpnQqichVKibS3SY2bUNnJB7IKGUAUDaibNqPHTG6DOn32bw/96" ticket="v4_000b708f0b04000001000000000034f757467feea167b94ecfb0be5e1000000050ded0b020927e3c97896a09d47e6e9e3feee786cf33d6902158bd2a4ac95c3a5e99e5dfe7a018433a610b54e312cccc2802085478422bddc7299b6f864fd5445489d18c59c8fa5ccf30317ed33e0d1f7fbd2c35172d0c6105fd5b4d3e155bb56e1dfee1fc43a332c926c47f386e9806b34b49f4c34877868f@stranger" opcode="2" googlecontact="" qrticket="" chatroomusername="" sourceusername="" sourcenickname="" sharecardusername="" sharecardnickname="" cardversion=""><brandlist count="0" ver="705242047"></brandlist></msg>
var reg = Regex.Match(raw_msg, @"content=""(?<申请文本>[^""]*?)""");
if (reg.Success)
wXApply.Message = reg.Groups["申请文本"].Value;
reg = Regex.Match(raw_msg, @"sourceusername=""(?<账号>[^""]*?)"" sourcenickname=""(?<昵称>[^""]*?)""");
if (reg.Success)
{
wXApply.OldFriendWxid = reg.Groups["账号"].Value;
wXApply.OldFriendNick = reg.Groups["昵称"].Value;
}
reg = Regex.Match(raw_msg, @"fromusername=""(?<账号>[^""]*?)""");
if (reg.Success)
{
if (!string.IsNullOrWhiteSpace(reg.Groups["账号"].Value))
wXApply.NewFriendWxid = reg.Groups["账号"].Value;
else
{
reg = Regex.Match(raw_msg, @"alias=""(?<账号>[^""]*?)""");
if (reg.Success)
wXApply.NewFriendWxid = reg.Groups["账号"].Value;
}
}
reg = Regex.Match(raw_msg, @"fromnickname=""(?<昵称>[^""]*?)""");
if (reg.Success)
wXApply.NewFriendNick = reg.Groups["昵称"].Value;
wXApply.Token = raw_msg;//这里好像要获取raw_msg 中 v1的值
socketClient.Send(wXApply);
}
if (wx_type == 10000)
{
//新人入群
if (!string.IsNullOrWhiteSpace(Wxid_1) && Wxid_1.Contains("@chatroom"))
{
var reg1 = Regex.Match(raw_msg, @"""(?<邀请人昵称>.*)""邀请""(?<新人昵称>.*)""加入了群聊");
var reg2 = Regex.Match(raw_msg, @"你邀请""(?<新人昵称>.*)""加入了群聊");
var reg3 = Regex.Match(raw_msg, @"""(?<新人昵称>.*)""通过扫描""(?<邀请人昵称>.*)""分享的二维码加入群聊");
var reg4 = Regex.Match(raw_msg, @"""(?<新人昵称>.*)""通过扫描你分享的二维码加入群聊");
if (reg1.Success || reg2.Success || reg3.Success || reg4.Success)
{
var user = WechatClient.GetUser(dwClientid, WechatType.Dazong);
if (user == null)
return;
WechatNewMemer newMember = new WechatNewMemer();
newMember.Cmd = PCRobotCMD.newMember;
newMember.RobotType = RobotType.;
newMember.RobotUsername = user.Wxid;
newMember.RobotUsernick = user.Nickname;
if (reg1.Success)
{
newMember.SourceNick = reg1.Groups["邀请人昵称"].Value;
newMember.MemberNick = reg1.Groups["新人昵称"].Value;
}
else if (reg2.Success)
{
newMember.SourceNick = newMember.RobotUsernick;
newMember.MemberNick = reg2.Groups["新人昵称"].Value;
}
else if (reg3.Success)
{
newMember.SourceNick = reg3.Groups["邀请人昵称"].Value;
newMember.MemberNick = reg3.Groups["新人昵称"].Value;
}
else if (reg4.Success)
{
newMember.SourceNick = newMember.RobotUsernick;
newMember.MemberNick = reg4.Groups["新人昵称"].Value;
}
if (Wxid_1.Contains("@chatroom"))
{
newMember.GroupId = Wxid_1;
newMember.GroupNick = string.Empty;
}
socketClient.Send(newMember);
}
}
else//新增好友
{
#region
var reg1 = Regex.Match(raw_msg, "^你已添加了(.*?),现在可以开始聊天了。$");
var reg2 = Regex.Match(raw_msg, "^(.*?)刚刚把你添加到通讯录,现在可以开始聊天了。$");
if (reg1.Success || reg2.Success)
{
var user = WechatClient.GetUser(dwClientid, WechatType.Dazong);
if (user == null)
return;
WechatNewFriend msg = new WechatNewFriend();
msg.Cmd = PCRobotCMD.newfriend;
msg.RobotUsername = user.Wxid;
msg.RobotUsernick = user.Nickname;
msg.RobotType = RobotType.;
msg.FromUserName = Wxid_1;
msg.FromUserNick = reg1.Success ? reg1.Groups[1].Value : reg2.Groups[1].Value;
socketClient.Send(msg);
}
#endregion
}
}
//自动填充消息内容,用于撤回消息
//if (chk_RevokeFill.Checked == true && MsgInfo.IsSend == 1 && ConnID == (int)User.DwClientId)
//{
// text_Recvke_Wxid.Text = MsgInfo.Wxid_1;
// text_Recvke_Sid.Text = MsgInfo.ServerMsgID;
// text_Recvke_Message.Text = MsgInfo.Msg;
//}
////转账自动收款
//if (chk_GetMoney.Checked == true && MsgInfo.IsSend == 0 && MsgInfo.Type == 49)
//{
// if (MsgInfo.Msg.IndexOf("微信转账") != -1 && MsgInfo.Msg.IndexOf("收到转账") != -1)
// {
// string State = nmHeler.StringMid(MsgInfo.Msg, "<paysubtype>", "</paysubtype>");
// string Transid = nmHeler.StringMid(MsgInfo.Msg, "transferid><![CDATA[", "]]></transferid>");
// int dwTime = 0;
// int.TryParse(nmHeler.StringMid(MsgInfo.Msg, "<invalidtime><![CDATA[", "]]></invalidtime>"), out dwTime);
// if (State == "1" && Transid != string.Empty)
// {
// nmCore.NM_GetMoney(ConnID, MsgInfo.Wxid_1, Transid, dwTime);
// }
// }
//}
////名片消息自动填充数据
//if (chk_CardFill.Checked == true && MsgInfo.IsSend == 0 && MsgInfo.Type == 42 && ConnID == (int)User.DwClientId)
//{
// string v1 = nmHeler.StringMid(MsgInfo.Msg, "username=\"", "\" nickname=");
// string v2 = nmHeler.StringMid(MsgInfo.Msg, "antispamticket=\"", "\" /");
// text_Friend_v1.Text = v1;
// text_Friend_v2.Text = v2;
//}
////自动接受群聊邀请
//if (chk_PassInvite.Checked == true && MsgInfo.IsSend == 0 && MsgInfo.Type == 49)
//{
// if (MsgInfo.Msg.IndexOf("邀请你加入群聊") != -1 && MsgInfo.Msg.IndexOf("mmsupport-bin/addchatroombyinvite") != -1)
// {
// string InviteURL = nmHeler.StringMid(MsgInfo.Msg, "<url><![CDATA[", "]]></url>");
// if (InviteURL != string.Empty)
// {
// nmCore.NM_GetA8Key(ConnID, MsgInfo.Wxid_1, InviteURL);
// }
// }
//}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static void Event_Logout(int ConnID, JObject recvJson)
{
try
{
var user = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == ConnID).Value;
if (user != null)
WechatClient.RemoveUser(user);
if (WechatClient.IsDebug)
{
LogHelper.GetSingleObj().Info("系统", $"LogOut_DaZong事件退出,Uin:{user.Uin},微信:{user.Nickname}({user.Wxid})");
LogHelper.GetSingleObj().Debug("调试注销", $"{user.Wxid}");
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static HandleResult OnAccept(IServer sender, IntPtr connId, IntPtr pClient)
{
nmCore.NM_Init((int)connId, "C#-864631110");
return HandleResult.Ok;
}
private static string DllPath;
public override string GetVersion()
{
return Version;
}
public static uint StartWechat()
{
try
{
var path = string.Empty;
var WechatWinFile = CsharpHttpHelper.HttpExtend.MapFile("WeChatWin.dll", $"PCWechat\\" + Version);
var md5 = Common.GetMD5Hash(WechatWinFile);
if (!File.Exists(WechatWinFile) || md5 != PcMd5.ToUpper())
{
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;
}
//path = CsharpHttpHelper.HttpExtend.MapFile("WeChat.exe", $"PCWechat\\" + Version);
path = HttpExtend.MapPath($"PCWechat\\" + Version);
string szDllPath = System.IO.Directory.GetCurrentDirectory() + "\\Bin\\" + NanMuCore;
var dwPid = NMHelper.NM_CreateWeChatProcess(path, "WeChat.exe", szDllPath, nmHeler.Socket_Port);
return (uint)dwPid;
}
catch (Exception ex)
{
}
return 0;
}
public override void GetGroupAndFriendInfo(string groupId, string wxid)
{
try
{
GroupInfo group = null;
if (groupId.Contains("@chatroom"))
{
var g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
if (g != null)
{
var u = g.friends.FirstOrDefault(f => f.wxid == wxid);
if (u != null)
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
}
if (group == null)
{
nmCore.NM_GetWxidInfo((int)User.DwClientId, groupId, wxid);
var _group = Task.Factory.StartNew<GroupInfo>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(5);
do
{
g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
if (g != null)
{
var u = g.friends.FirstOrDefault(f => f.wxid == wxid);
if (u != null)
{
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
return group;
}
}
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
}
}
var socketClient = EasySoc.GetSocket();
var msg = new WechatContact();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvContact;
msg.Message = group == null ? string.Empty : HttpHelper.ObjectToJson(group);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 获取朋友圈
/// </summary>
/// <param name="circleId"></param>
public override void FindCircles(string circleId, string username)
{
try
{
var socketClient = EasySoc.GetSocket();
var msg = new CommonResult();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvCircleData;
msg.Data = string.Empty;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void CreateRoom(string wxidData)
{
try
{
var socketClient = EasySoc.GetSocket();
var msg = new CreateRoom();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvCreateRoom;
msg.GroupId = string.Empty;
msg.MemberTotal = 0;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 自动授权登录小程序
/// </summary>
/// <param name="appid"></param>
public override void AutoAuthMiniAPPLogin(string appid)
{
try
{
var socketClient = EasySoc.GetSocket();
var msg = new CommonResult();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvMiniAppCode;
msg.Data = string.Empty;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 发送朋友圈
/// </summary>
/// <param name="xmlmsg"></param>
public override void SendCircle(string xmlmsg)
{
try
{
var socketClient = EasySoc.GetSocket();
var msg = new CommonResult();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvCircleReturnId;
msg.Data = string.Empty;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
finally
{
User.SendCircleId = string.Empty;
}
}
public override void CircleUpLoadImage(string path)
{
try
{
var socketClient = EasySoc.GetSocket();
var msg = new CommonResult();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvCircleUploadImageUrl;
msg.Data = string.Empty;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void GetGroupAndFriendInfo(string groupId, string wxid, bool flush = false)
{
try
{
GroupInfo group = null;
if (groupId.Contains("@chatroom"))
{
var g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
if (g != null)
{
if (flush)
{
g.friends.Clear();
}
else
{
var u = g.friends.FirstOrDefault(f => f.wxid == wxid);
if (u != null)
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
}
}
if (group == null)
{
nmCore.NM_GetWxidInfo((int)User.DwClientId, groupId, wxid);
var _group = Task.Factory.StartNew<GroupInfo>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(5);
do
{
g = User.Groups.FirstOrDefault(f => f.wxid == groupId);
if (g != null)
{
var u = g.friends.FirstOrDefault(f => f.wxid == wxid);
if (u != null)
{
group = new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { u }, total_member = g.total_member };
return group;
}
}
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
}
}
var socketClient = EasySoc.GetSocket();
var msg = new WechatContact();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvContact;
msg.Message = group == null ? string.Empty : HttpHelper.ObjectToJson(group);
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void AgreeAddMe(string text)
{
try
{
nmCore.NM_PassApply((int)User.DwClientId, text);
}
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.Dazong).Value;
if (v != null)
{
LogHelper.GetSingleObj().Info("系统", $"CloseWechatDaZong事件退出,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);
}
}
public override void DeleteFriend(string wxid)
{
nmCore.NM_DelFriend((int)User.DwClientId, wxid);
}
public override void EditCotacts(string wxid, string remark)
{
nmCore.NM_SetFriendMark((int)User.DwClientId, wxid, remark);
}
public override void GetGroupsNotInMember()
{
GetContact();
var result = Task.Factory.StartNew<string>(delegate ()
{
Thread.Sleep(4000);
var groups = User.Friends.Where(f => f.wxid.Contains("@chatroom")).ToList();
return groups == null ? string.Empty : HttpHelper.ObjectToJson(new Dictionary<string, List<FriendInfo>>() { { "data", groups } });
}).Result;
if (result == null)
result = HttpHelper.ObjectToJson(new Dictionary<string, List<FriendInfo>>() { { "data", User.Friends.Where(f => f.wxid.Contains("@chatroom")).ToList() } });
var socketClient = EasySoc.GetSocket();
var msg = new WechatContact();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvContactList;
msg.Message = result;
socketClient.Send(msg);
}
public override void PayTransferConfirm(string data)
{
try
{
var transferid = string.Empty;
var invalidtime = string.Empty;
var wxid = string.Empty;
var dic = HttpExtend.JsonToDictionary(data);
if (dic.ContainsKey("Transferid"))
transferid = dic["Transferid"].ToString();
if (dic.ContainsKey("Invalidtime"))
invalidtime = dic["Invalidtime"].ToString();
if (dic.ContainsKey("WxId"))
wxid = dic["WxId"].ToString();
nmCore.NM_GetMoney((int)User.DwClientId, wxid, transferid, int.Parse(invalidtime));
}
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
{
nmCore.NM_SendFileMsg((int)User.DwClientId, NMHelper.NM_SendFile, wxid, file);
Common.SetCache(User.Wxid, wxid, file);
}
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
{
if (card_wxid.Contains("@chatroom"))
nmCore.NM_InviteToGroup((int)User.DwClientId, NMHelper.NM_InviteURL, card_wxid, new string[] { to_wxid });
else
nmCore.NM_SendCardMsg((int)User.DwClientId, to_wxid, card_wxid);
Common.SetCache(User.Wxid, to_wxid, card_wxid);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void SendImage(string wxid, string file)
{
try
{
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, wxid, "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
{ }
}
}
nmCore.NM_SendFileMsg((int)User.DwClientId, file.Trim().EndsWith(".gif", StringComparison.CurrentCultureIgnoreCase) ? NMHelper.NM_SendGif : NMHelper.NM_SendPic, wxid, file);
Common.SetCache(User.Wxid, wxid, file);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void CheckUrl(string url)
{
try
{
var socketClient = EasySoc.GetSocket();
var msg = new CheckUrl();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvCheckUrl;
msg.Status = 0;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void SendMessage(string wxid, string message)
{
try
{
var json = string.Empty;
message = message.Replace("\r\n", "\n");
if (Common.isXML(message))
{
//小程序
if (Regex.IsMatch(message, @"<appid>(?<appid>[^<]+)</appid>") || Regex.IsMatch(message, @"<pagepath>(.+?)</pagepath>"))
nmCore.NM_SendWeChatApp((int)User.DwClientId, wxid, message, string.Empty);//TODO 小程序未实现
else
nmCore.NM_SendURLMsg((int)User.DwClientId, wxid, message);
}
else
nmCore.NM_SendTextMsg((int)User.DwClientId, wxid, new string[] { }, message);
Common.SetCache(User.Wxid, wxid, message);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void SendVideo(string wxid, string path)
{
try
{
SendFile(wxid, path);
Common.SetCache(User.Wxid, wxid, path);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void StateOpt(string wxid, int status)
{
try
{
nmCore.NM_StateOpt((int)User.DwClientId, 2, wxid, status == 1);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void GetWxidInfo(string wxid)
{
var u = User.Friends.FirstOrDefault(f => f.wxid == wxid);
if (u == null)
{
nmCore.NM_GetWxidInfo((int)User.DwClientId, string.Empty, wxid);
var friend = Task.Factory.StartNew<FriendInfo>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(15);
do
{
u = User.Friends.FirstOrDefault(f => f.wxid == wxid);
if (u != null) return u;
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
}
var socketClient = EasySoc.GetSocket();
WechatContact msg = new WechatContact();
msg.RobotUsername = User.Wxid;
msg.RobotUsernick = User.Nickname;
msg.RobotType = RobotType.;
msg.MsgId = ServerMsgID;
msg.Cmd = PCRobotCMD.rcvContact;
msg.Message = u == null ? string.Empty : HttpHelper.ObjectToJson(u);
socketClient.Send(msg);
}
public override void GetFriend(string wxid)
{
nmCore.NM_GetWxidInfo((int)User.DwClientId, string.Empty, wxid);
}
public override void GetGroupMemer(string groupId)
{
try
{
nmCore.NM_GetGroupMember((int)User.DwClientId, groupId);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
/// <summary>
/// 卸载安装
/// </summary>
public static void UnInstall()
{
try
{
HP_Server?.Destroy();
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void GetContact()
{
try
{
//获取好友列表(数据库读取)
nmCore.NM_GetContactList((int)User.DwClientId);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
}
}