old_flsystem/PCRobot/PCWechat/Wechat_Dazong.cs

2011 lines
166 KiB
C#
Raw Permalink Normal View History

2022-09-20 03:10:29 +00:00
using CsharpHttpHelper;
using HPSocketCS;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NM_WeChat;
using PCRobot.Entitys;
using PCRobot.Enums;
using PCRobot.Pack;
using PCRobot.Utils;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
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 Version = "3.3.5.50";
private const int PcOffSet = 0x1CF9128;//3.3.5.50
//1D03368
//1D04228
//1D29830
//1D2C550
private const string PcMd5 = "3E7D23A8B7AE5B1DE04B1B60A7AD3205";//3.3.5.50
private const string NanMuCore = "NanMuCore_3.3.5.50.dll";
//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()
{
if (IsKsfInstall) return;
try
{
DllPath = HttpExtend.MapFile(NanMuCore, "Bin");
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("通信端口创建失败,请重试!", "错误");
LogHelper.GetSingleObj().Info("KST获取通讯端口失败", "KST获取通讯端口失败,请稍后重试");
//Environment.Exit(0);
}
nmHeler.Socket_Port = dwPort;
NMHelper.NM_LinkWeChat(201912121, nmHeler.Socket_Port, 0, 0);
}
ConformInject();
}
catch (Exception ex)
{
MessageBox.Show($"检查登录异常:{ex.Message}");
}
finally
{
IsKsfInstall = true;
}
}
/// <summary>
/// 注入符合注入的微信
/// </summary>
internal static void ConformInject()
{
var Pros = Process.GetProcesses();
var path1 = HttpExtend.MapPath("PCWechat");
var path2 = HttpExtend.MapPath("PCWechat\\" + Version);
foreach (Process pro in Pros)
{
try
{
var name = pro.ProcessName.ToUpper();
if (name == "WECHAT" && pro.MainModule.FileName.StartsWith(path1))
{
try
{
//判断微信版本
if (pro.MainModule.FileName.StartsWith(path2))
{
var id = pro.Id;
var result = Task<bool>.Factory.StartNew(delegate
{
try
{
var WechatWinFile = HttpExtend.MapFile("WeChatWin.dll", $"PCWechat\\" + Version);
var md5 = Common.GetMD5Hash(WechatWinFile);
if (!File.Exists(WechatWinFile) || md5.ToUpper() != PcMd5.ToUpper())
return false;
else
{
return NMHelper.NM_LinkWeChat(201912121, nmHeler.Socket_Port, 0, 0) != 0;
}
}
catch { }
return false;
}).Wait(30000);
if (!result)
try { pro.Kill(); } catch { }
}
}
catch (Exception)
{ }
}
}
catch { }
}
}
/// <summary>
/// 通信事件_登录成功
/// </summary>
/// <param name="ConnID"></param>
/// <param name="RecvJson"></param>
static void Event_Login(int ConnID, JObject RecvJson)
{
var wxid = nmHeler.GetString(RecvJson, "Wxid", true);
var user = WechatClient.GetUser(wxid, (uint)ConnID, WechatType.Dazong);
user.Nickname = nmHeler.GetString(RecvJson, "Nick", true);
user.Wxid = wxid;
user.HeaderUrl = nmHeler.GetString(RecvJson, "HeadIMG", true);
//user.DBFile = data["wx_user_dir"].ToString();
int pid = 0;
nmHeler.GetInt(RecvJson, "ProcessId", out pid);
user.Pid = pid;
user.Phone = nmHeler.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;
ThreadPool.QueueUserWorkItem(z =>
{
if (nmHeler.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);
}
else if (RecvType == NMHelper.NM_GetCircles)
{
Event_GetCircles((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_GetCircleDetails)
{
//Event_GetCircleDetails((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_CircleUpLoadImage)
{
Event_CircleUpLoadImage((int)connId, RecvJson);
}
else if (RecvType == NMHelper.NM_SendCircle)
{
//Event_GetCircleDetails((int)connId, RecvJson);
}
}
});
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_CircleUpLoadImage(int connId, JObject jObj)
{
try
{
var dwClientid = (uint)connId;
var recvWxid = nmHeler.GetString(jObj, "RecvWxid");
var url_md5 = nmHeler.GetString(jObj, "url_md5");//05ddb266023345f6b428339bed5f6fd3
var state = nmHeler.GetString(jObj, "state");
var url_0 = nmHeler.GetString(jObj, "url_0");
var url_150 = nmHeler.GetString(jObj, "url_150");
if (!string.IsNullOrWhiteSpace(url_0))
{
var user = WechatClient.GetUser(dwClientid, WechatType.Xiaoxie);
if (user == null)
return;
if (user.UpLoadImages.ContainsKey(url_md5))
user.UpLoadImages.Remove(url_md5);
user.UpLoadImages.Add(url_md5, url_0);
}
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
private static void Event_QRCode(JObject RecvJson)
{
try
{
int dwPid = 0;
nmHeler.GetInt(RecvJson, "ProcessId", out dwPid);
string B64_QRCode = nmHeler.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.GetString(RecvJson, "RecvWxid", true);
string outLog = "[群员动态-退群]" + RecvWxid;
string GroupID = nmHeler.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.GetString((JObject)JtMember, "Wxid", true);
string Nick = nmHeler.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.GetString(RecvJson, "RecvWxid", true);
string outLog = "[群员动态-进群]" + RecvWxid;
string GroupID = nmHeler.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.GetString((JObject)JtMember, "Wxid", true);
string Nick = nmHeler.GetString((JObject)JtMember, "Nick", true);
string InvWxid = nmHeler.GetString((JObject)JtMember, "InvWxid", true);
string InvNick = nmHeler.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.GetString(RecvJson, "RecvWxid", true);
string outLog = "[GetA8Key]" + RecvWxid;
string URL = nmHeler.GetString(RecvJson, "URL", true);
string LastURL = nmHeler.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.GetString(RecvJson, "Wxid", true);
var WxNo = nmHeler.GetString(RecvJson, "WxNo", true);
var Nick = nmHeler.GetString(RecvJson, "Nick", true);
var V1 = nmHeler.GetString(RecvJson, "v1", true);
var HeadIMG = nmHeler.GetString(RecvJson, "HeadIMG", true);
var Address = nmHeler.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.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.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.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.GetString((JObject)JtMember, "Wxid", true);
var Nick = nmHeler.GetString((JObject)JtMember, "Nick", true);
var Mark = nmHeler.GetString((JObject)JtMember, "Mark", true);
var HeadIMG = nmHeler.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.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.GetIntEx((JObject)JtMember, "Type");
var List = nmHeler.GetIntEx((JObject)JtMember, "List");
var Wxid = nmHeler.GetString((JObject)JtMember, "Wxid", true);
var WxNo = nmHeler.GetString((JObject)JtMember, "WxNo", true);
var Nick = nmHeler.GetString((JObject)JtMember, "Nick", true);
var Mark = nmHeler.GetString((JObject)JtMember, "Mark", true);
var HeadIMG = nmHeler.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.GetString(RecvJson, "RecvWxid", true);//机器人账号
var wx_type = nmHeler.GetIntEx(RecvJson, "Type");
var State = nmHeler.GetIntEx(RecvJson, "State");
var Time = nmHeler.GetIntEx(RecvJson, "Time");
var IsSend = nmHeler.GetIntEx(RecvJson, "Sender");
var LocalMsgID = nmHeler.GetIntEx(RecvJson, "LocalID");
var ServerMsgID = nmHeler.GetString(RecvJson, "ServerID", false);
var Wxid_1 = nmHeler.GetString(RecvJson, "Wxid_1", true);//发送者的账号 //to_wxid 为群的时候 为群号
var Nick_1 = nmHeler.GetString(RecvJson, "Nick_1", true);//发送者的昵称
var Wxid_2 = nmHeler.GetString(RecvJson, "Wxid_2", true); //群内发送人的账号
var Nick_2 = nmHeler.GetString(RecvJson, "Nick_2", true);//发送者的昵称
var raw_msg = nmHeler.GetString(RecvJson, "Msg", true);
var Source = nmHeler.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 void Event_GetCircles(int _dwClientid, JObject jObj)
{
try
{
var dwClientid = (uint)_dwClientid;
#region
//{"PackType":700001,"RecvWxid":"dwB4AGkAZABfAGgAbABnAG8AcgBuADgANAA2AGkAaABwADIAMgA=","List":[{"ID":"-4685137659200794410","Time":1640511323,"Wxid":"dwB1AGoAaQBhAGgAdQBhADAAOAA3ADYA","Nick":"SFHuaDNU","SnsText":"PABUAGkAbQBlAGwAaQBuAGUATwBiAGoAZQBjAHQAPgA8AGkAZAA+ADwAIQBbAEMARABBAFQAQQBbADEAMwA3ADYAMQA2ADAANgA0ADEANAA1ADAAOAA3ADUANwAyADAANgBdAF0APgA8AC8AaQBkAD4APAB1AHMAZQByAG4AYQBtAGUAPgA8ACEAWwBDAEQAQQBUAEEAWwB3AHUAagBpAGEAaAB1AGEAMAA4ADcANgBdAF0APgA8AC8AdQBzAGUAcgBuAGEAbQBlAD4APABjAHIAZQBhAHQAZQBUAGkAbQBlAD4APAAhAFsAQwBEAEEAVABBAFsAMQA2ADQAMAA1ADEAMQAzADIAMwBdAF0APgA8AC8AYwByAGUAYQB0AGUAVABpAG0AZQA+ADwAYwBvAG4AdABlAG4AdABEAGUAcwBjAFMAaABvAHcAVAB5AHAAZQA+ADAAPAAvAGMAbwBuAHQAZQBuAHQARABlAHMAYwBTAGgAbwB3AFQAeQBwAGUAPgA8AGMAbwBuAHQAZQBuAHQARABlAHMAYwBTAGMAZQBuAGUAPgAwADwALwBjAG8AbgB0AGUAbgB0AEQAZQBzAGMAUwBjAGUAbgBlAD4APABwAHIAaQB2AGEAdABlAD4APAAhAFsAQwBEAEEAVABBAFsAMABdAF0APgA8AC8AcAByAGkAdgBhAHQAZQA+ADwAYwBvAG4AdABlAG4AdABEAGUAcwBjAD4APAAhAFsAQwBEAEEAVABBAFsAEWImIDxPTk4JZ7lwqFJHZAoAHVLDXyhX6lQf/zIAMAAyADIAdF7Yj/2AOk4RYu1+KoIXVF0AXQA+ADwALwBjAG8AbgB0AGUAbgB0AEQAZQBzAGMAPgA8AGMAbwBuAHQAZQBuAHQAYQB0AHQAcgA+ADwAIQBbAEMARABBAFQAQQBbADAAXQBdAD4APAAvAGMAbwBuAHQAZQBuAHQAYQB0AHQAcgA+ADwAcwBvAHUAcgBjAGUAVQBzAGUAcgBOAGEAbQBlAD4APAAvAHMAbwB1AHIAYwBlAFUAcwBlAHIATgBhAG0AZQA+ADwAcwBvAHUAcgBjAGUATgBpAGMAawBOAGEAbQBlAD4APAAvAHMAbwB1AHIAYwBlAE4AaQBjAGsATgBhAG0AZQA+ADwAcwB0AGEAdABpAHMAdABpAGMAcwBEAGEAdABhAD4APAAvAHMAdABhAHQAaQBzAHQAaQBjAHMARABhAHQAYQA+ADwAdwBlAGEAcABwAEkAbgBmAG8APgA8AGEAcABwAFUAcwBlAHIATgBhAG0AZQA+ADwALwBhAHAAcABVAHMAZQByAE4AYQBtAGUAPgA8AHAAYQBnAGUAUABhAHQAaAA+ADwALwBwAGEAZwBlAFAAYQB0AGgAPgA8AHYAZQByAHMAaQBvAG4APgA8ACEAWwBDAEQAQQBUAEEAWwAwAF0AXQA+ADwALwB2AGUAcgBzAGkAbwBuAD4APABkAGUAYgB1AGcATQBvAGQAZQA+ADwAIQBbAEMARABBAFQAQQBbADAAXQBdAD4APAAvAGQAZQBiAHUAZwBNAG8AZABlAD4APABzAGgAYQByAGUAQQBjAHQAaQBvAG4ASQBkAD4APAAvAHMAaABhAHIAZQBBAGMAdABpAG8AbgBJAGQAPgA8AGkAcwBHAGEAbQBlAD4APAAhAFsAQwBEAEEAVABBAFsAMABdAF0APgA8AC8AaQBzAEcAYQBtAGUAPgA8AG0AZQBzAHMAYQBnAGUARQB4AHQAcgBhAEQAYQB0AGEAPgA8AC8AbQBlAHMAcwBhAGcAZQBFAHgAdAByAGEARABhAHQAYQA+ADwAcwB1AGIAVAB5AHAAZQA+ADwAIQBbAEMARABBAFQAQQBbADAAXQBdAD4APAAvAHMAdQBiAFQAeQBwAGUAPgA8AHAAcgBlAGwAbwBhAGQAUgBlAHMAbwB1AHIAYwBlAHMAPgA8AC8AcAByAGUAbABvAGEAZABSAGUAcwBvAHUAcgBjAGUAcwA+ADwALwB3AGUAYQBwAHAASQBuAGYAbwA+ADwAYwBhAG4AdgBhAHMASQBuAGYAbwBYAG0AbAA+ADwALwBjAGEAbgB2AGEAcwBJAG4AZgBvAFgAbQBsAD4APABDAG8AbgB0AGUAbgB0AE8AYgBqAGUAYwB0AD4APABjAG8AbgB0AGUAbgB0AFMAdAB5AGwAZQA+ADwAIQBbAEMARABBAFQAQQBbADEANQBdAF0APgA8AC8AYwBvAG4AdABlAG4AdABTAHQAeQBsAGUAPgA8AGMAbwBuAHQAZQBuAHQAUwB1AGIAUwB0AHkAbABlAD4APAAhAFsAQwBEAEEAVABBAFsAMABdAF0APgA8AC8AYwBvAG4AdABlAG4AdABTAHUAYgBTAHQAeQBsAGUAPgA8AHQAaQB0AGwAZQA+AK5f4U8PXMaJkZg8AC8AdABpAHQAbABlAD4APABkAGUAcwBjAHIAaQBwAHQAaQBvAG4APgA8AC8AZABlAHMAYwByAGkAcAB0AGkAbwBuAD4APABjAG8AbgB0AGUAbgB0AFUAcgBsAD4AaAB0AHQAcABzADoALwAvAHMAdQBwAHAAbwByAHQALgB3AGUAaQB4AGkAbgAuAHEAcQAuAGMAbwBtAC8AYwBnAGkALQBiAGkAbgAvAG0AbQBzAHUAcABwAG8AcgB0AC0AYgBpAG4ALwByAGUAYQBkAHQAZQBtAHAAbABhAHQAZQA/AHQAPQBwAGEAZwBlAC8AYwBvAG0AbQBvAG4AXwBwAGEAZwBlAF8AXwB1AHAAZwByAGEAZABlACYAYQBtAHAAOwB2AD0AMQA8AC8AYwBvAG4AdABlAG4AdABVAHIAbAA+ADwAbQBlAGQAaQBhAEwAaQBzAHQAPgA8AG0AZQBkAGkAYQA+ADwAaQBkAD4APAAhAFsAQwBEAEEAVABBAFsAMQAzADcANgAxADYAMAA2ADQAMQA1ADIAMgAwADEANQAwADQANwAyAF0AXQA+ADwALwBpAGQAPgA8AHQAeQBwAGUAPgA8ACEAWwBDAEQAQQBUAEEAWwA2AF0AXQA+ADwALwB0AHkAcABlAD4APAB0AGkAdABsAGUAPgA8ACEAWwBDAEQAQQBUAEEAWwARYiYgPE9OTglnuXCoUkdkCgAdUsNfKFfqVB//MgAwADIAMgB0XtiP/YA6ThFi7X4qghdUXQBdAD4APAAvAHQAaQB0AGwAZQA+ADwAZABlAHMAYwByAGkAcAB0AGkAbwBuAD4APAAhAFsAQwBEAEEAVABBAFsAEWImIDxPTk4JZ7lwqFJHZAoAHVLDXyhX6lQf/zIAMAAyADIAdF7Yj/2AOk4RYu1+KoIXVF0AXQA+ADwALwBkAGUAcwBjAHIAaQBwAHQAaQBvAG4APgA8AHAAcgBpAHYAYQB0AGUAPgA8ACEAWwBDAEQAQQBUAEEAWwAwAF0AXQA+ADwALwBwAHIAaQB2AGEAdABlAD4APAB1AHIAbAAgAHYAaQBkAGUAbwBtAGQANQA9ACIAYwBjAGYAYwA0AGEAZgA4ADAANABhAGYANABlAGQAZgA5AGQAZgAyADIAYgA4ADEAOQA1AGMAYwBjADEAZAAxACIAIAB0AHkAcABlAD0AIgAxACIAIABtAGQANQA9ACIAYwA4AGIANQA4ADYAZQBiADgAMwAwAGEAMABlADkAYwAxADMAZQBkADEAYgAwAGMAZgA1ADgAYQAzAGEAMwAwACIAPgA8ACEAWwBDAEQAQQBUAEEAWwBoAHQAdABwADoALwAvAHMAaAB6AGoAdwB4AHMAbgBzAC4AdgBpAGQAZQBvAC4AcQBxAC4AYw
#endregion
var user = WechatClient.GetUser(dwClientid, WechatType.Dazong);
if (user == null)
return;
var client = WechatClient.GetApi(user) as Wechat_Dazong;
if (!user.IsGetCircle) return;
try
{
var circlelist = new List<CirCleInfoOri>();
var jArr = nmHeler.GetArray(jObj, "List");
for (int i = 0; i < jArr.Count; i++)
{
var item = (JObject)jArr[i];
//{"PackType":700001,"RecvWxid":"dwB4AGkAZABfAGgAbABnAG8AcgBuADgANAA2AGkAaABwADIAMgA=","List":[{"ID":"-4685137659200794410","Time":1640511323,"Wxid":"dwB1AGoAaQBhAGgAdQBhADAAOAA3ADYA","Nick":"SFHuaDNU","SnsText":""}]
var circleInfo = new CirCleInfoOri();
circleInfo.username = nmHeler.GetString(item, "Wxid");
circleInfo.nickname = nmHeler.GetString(item, "Nick");
circleInfo.createTime = nmHeler.GetIntEx(item, "Time");
circleInfo.id = (long)item["ID"];
circleInfo.objectDesc = new ObjectDesc();
circleInfo.objectDesc.buffer = nmHeler.GetString(item, "SnsText");
circlelist.Add(circleInfo);
}
user.CircleData = JsonConvert.SerializeObject(circlelist);
}
catch (Exception ex)
{
Debug.Write("获取朋友圈消息异常: " + ex.Message);
}
finally
{
user.IsGetCircle = false;
}
}
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");
nmCore.NM_Init((int)connId, "E-614751150");
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
{
if (!User.IsGetCircle)
{
nmCore.NM_GetCircles((int)User.DwClientId);
User.IsGetCircle = true;
}
var result = Task.Factory.StartNew<string>(delegate ()
{
Thread.Sleep(1000);
DateTime end_time = DateTime.Now.AddSeconds(30);
do
{
if (!User.IsGetCircle)
{
return User.CircleData;
}
Thread.Sleep(200);
} while (end_time > DateTime.Now);
return null;
}).Result;
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 = result;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void SendCirclePraise(string circleId)
{
try
{
nmCore.NM_CircleLink((int)User.DwClientId, circleId, 1);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
public override void SendCircleComment(string circleId, string content)
{
try
{
nmCore.NM_CircleComment((int)User.DwClientId, circleId, content);
}
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
{
nmCore.NM_SendCircle((int)User.DwClientId, xmlmsg);
var result = Task.Factory.StartNew<string>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(20);
do
{
if (!string.IsNullOrWhiteSpace(User.SendCircleId))
{
return User.SendCircleId;
}
Thread.Sleep(400);
} while (end_time > DateTime.Now);
return null;
}).Result;
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 = result;
socketClient.Send(msg);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
finally
{
User.SendCircleId = string.Empty;
}
}
/// <summary>
/// 朋友圈上传本地图片,返回上传以后返回的地址
/// </summary>
/// <param name="path"></param>
public override void CircleUpLoadImage(string data)
{
try
{
var path = string.Empty;
Bitmap bitmap = null;
if (data.StartsWith("http", StringComparison.CurrentCultureIgnoreCase))
{
HttpHelper http = new HttpHelper();
var item = http.GetItem(data);
item.ResultType = CsharpHttpHelper.Enum.ResultType.Byte;
using (MemoryStream ms = new MemoryStream(http.GetHtml(item).ResultByte))
{
using (Image mImage = Image.FromStream(ms, true))
{
bitmap = new Bitmap(mImage);
path = HttpExtend.MapFile($@"Cache\{DateTime.Now.ToString("MMddhhmmssfff")}.{Common.GetImageExt(bitmap)}");
bitmap.Save(path);
bitmap.Dispose();
}
}
}
else
{
bitmap = Common.ConvertBase64ToImage(data);
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Jpeg);
byte[] data1 = new byte[stream.Length];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(data1, 0, Convert.ToInt32(stream.Length));
bitmap = Common.CompressionImage(new MemoryStream(data1), 25);
}
path = HttpExtend.MapFile($@"Cache\{DateTime.Now.ToString("MMddhhmmssfff")}.{Common.GetImageExt(bitmap)}");
bitmap.Save(path);
bitmap.Dispose();
}
if (!string.IsNullOrWhiteSpace(path) && File.Exists(path))
{
var md5 = Common.GetMD5Hash(path);
nmCore.NM_CircleUpLoadImage((int)User.DwClientId, path, md5);
var result = Task.Factory.StartNew<string>(delegate ()
{
DateTime end_time = DateTime.Now.AddSeconds(60);
do
{
if (User.UpLoadImages.ContainsKey(md5))
{
return User.UpLoadImages[md5];
}
Thread.Sleep(400);
} while (end_time > DateTime.Now);
return null;
}).Result;
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 = result;
socketClient.Send(msg);
}
else
{ }
}
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, int.Parse(HttpExtend.GetTimeStamp()), 6000);
}
catch (Exception ex)
{
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
}
}
}
}