1505 lines
67 KiB
C#
1505 lines
67 KiB
C#
|
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.Web;
|
|||
|
using System.Web.Caching;
|
|||
|
using CsharpHttpHelper;
|
|||
|
using Newtonsoft.Json;
|
|||
|
using PCRobot.Entitys;
|
|||
|
using PCRobot.Entitys.Enterprise;
|
|||
|
using PCRobot.Pack;
|
|||
|
using PCRobot.Utils;
|
|||
|
using static PCRobot.PCWechat.Routine.Wechat_Xiaoxie_Type;
|
|||
|
|
|||
|
namespace PCRobot.PCWechat.Routine
|
|||
|
{
|
|||
|
public partial class Wechat_Xiaoxie
|
|||
|
{
|
|||
|
public override string GetVersion()
|
|||
|
{
|
|||
|
return Version;
|
|||
|
}
|
|||
|
|
|||
|
public override void GetContact(bool isUpdata)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var result = GetFriendInfos().Result;
|
|||
|
|
|||
|
var socketClient = EasySoc.GetSocket();
|
|||
|
CommonResult msg = new CommonResult();
|
|||
|
msg.RobotUsername = User.Wxid;
|
|||
|
msg.RobotUsernick = User.Nickname;
|
|||
|
msg.RobotType = RobotType.客户端微信;
|
|||
|
msg.MsgId = ServerMsgID;
|
|||
|
msg.Cmd = PCRobotCMD.rcvFriendList;
|
|||
|
msg.Data = result == null ? string.Empty : HttpHelper.ObjectToJson(result);
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void CheckZombiz()
|
|||
|
{
|
|||
|
if (User.IsZombizRun) return;
|
|||
|
try
|
|||
|
{
|
|||
|
User.IsZombizRun = true;
|
|||
|
|
|||
|
var fDic = GetFriendInfos().Result;
|
|||
|
|
|||
|
var friends = User.Friends.Where(f => !f.Key.IsQun() && f.Value.is_zombie == -1).Select(f => f.Value).ToList();
|
|||
|
foreach (var item in friends)
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_CARD_XMLMSG, data = new { to_wxid = item.wxid, xml = @"<?xml version=""1.0""?> <msg bigheadimgurl="""" smallheadimgurl="""" username=""[wxid]"" nickname=""[name]"" fullpy=""chulian"" shortpy="""" alias="""" imagestatus=""0"" scene=""0"" province="""" city="""" sign="""" sex=""0"" certflag=""0"" certinfo="""" brandIconUrl="""" brandHomeUrl="""" brandSubscriptConfigUrl="""" brandFlags=""0"" regionCode="""" antispamticket=""[wxid]"" />".Replace("[wxid]", item.wxid).Replace("[name]", ".") } });
|
|||
|
var u = User.Friends.FirstOrDefault(f => f.Key == item.wxid).Value;
|
|||
|
if (u != null && u.is_zombie == -1)
|
|||
|
{
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
Thread.Sleep(800 + new Random().Next(100, 200));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
finally
|
|||
|
{
|
|||
|
User.IsZombizRun = false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendMessage(string wxid, string message, string msgId = "", string usernick = "", string quoteMess = "")
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = string.Empty;
|
|||
|
message = message.Replace("\r\n", "\n");
|
|||
|
if (Common.isXML(message))
|
|||
|
{
|
|||
|
//var msgs = Regex.Matches(message, "(<.*?>)(.*?)(</.*?>)");
|
|||
|
//foreach (Match item in msgs)
|
|||
|
//{
|
|||
|
// if (item.Success && !string.IsNullOrEmpty(item.Groups[2].Value) && !item.Groups[2].Value.StartsWith("<![CDATA["))
|
|||
|
// {
|
|||
|
// var temp = item.Groups[1].Value + "<![CDATA["+item.Groups[2]+"]]>" + item.Groups[3];
|
|||
|
// message = message.Replace(item.Groups[1].Value,temp);
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
//<appid>wxfedd75bfcbbcd58c</appid>
|
|||
|
//<appid>wx13e41a437b8a1d2e</appid>
|
|||
|
//<pagepath>pages/index/index.html?orderid=[领取地址]</pagepath>
|
|||
|
if (Regex.IsMatch(message, @"<appid>(?<appid>[^<]+)</appid>") || Regex.IsMatch(message, @"<pagepath>(.+?)</pagepath>"))
|
|||
|
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_XMLMSG, data = new { to_wxid = wxid, xml = Common.XMLDispose(message.Replace("&", "&")) } });
|
|||
|
else
|
|||
|
{
|
|||
|
message = message.Replace("&", "&");
|
|||
|
var title = string.Empty;
|
|||
|
var desc = string.Empty;
|
|||
|
var url = string.Empty;
|
|||
|
var image_url = string.Empty;
|
|||
|
var reg = Regex.Match(message, @"<title>(?<标题>[\w\W]+?)</title>");
|
|||
|
if (reg.Success) title = reg.Groups["标题"].Value;
|
|||
|
reg = Regex.Match(message, @"<des>(?<介绍>[\w\W]+?)</des>");
|
|||
|
if (reg.Success) desc = reg.Groups["介绍"].Value;
|
|||
|
reg = Regex.Match(message, @"<url>(?<链接>[\w\W]+?)</url>");
|
|||
|
if (reg.Success) url = reg.Groups["链接"].Value;
|
|||
|
reg = Regex.Match(message, @"<thumburl>(?<图片链接>[\w\W]+?)</thumburl>");
|
|||
|
if (reg.Success) image_url = reg.Groups["图片链接"].Value;
|
|||
|
|
|||
|
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_LINKMSG, data = new { to_wxid = wxid, title = $"{title.XMLReplace()}", desc = $"{desc.XMLReplace()}", url = url.XMLReplace(), image_url = image_url.XMLReplace() } });
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var atUsername = new List<string>();
|
|||
|
var regs = Regex.Matches(message, @"\[@([^\]]+?)\]");
|
|||
|
var flag = true;
|
|||
|
if (wxid.IsQun())
|
|||
|
{
|
|||
|
//[@wujiahua0876]你懂得,我只是测试一下
|
|||
|
|
|||
|
foreach (Match item in regs)
|
|||
|
{
|
|||
|
atUsername.Add(item.Groups[1].Value.Trim());
|
|||
|
}
|
|||
|
if (atUsername.Count != 0)
|
|||
|
{
|
|||
|
flag = false;
|
|||
|
message = Regex.Replace(message, @"(\[@[^\]]+?\])", "{$@}");
|
|||
|
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_CHATROOM_ATMSG, data = new { to_wxid = wxid, content = message, at_list = atUsername.ToArray() } });
|
|||
|
}
|
|||
|
}
|
|||
|
if (flag)
|
|||
|
{
|
|||
|
message = Regex.Replace(message, @"(\[@[^\]]+?\])", "");
|
|||
|
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_TEXTMSG, data = new { to_wxid = wxid, content = message } });
|
|||
|
}
|
|||
|
}
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendFile(string username, string file)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_FILEMSG, data = new { to_wxid = username, file = file } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendCard(string username, string cardwxid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = string.Empty;
|
|||
|
if (cardwxid.IsQun())
|
|||
|
//json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_INVITE_TO_ROOM_REQ_MSG, data = new { room_wxid = card_wxid, member_list = new string[] { to_wxid } } });
|
|||
|
{
|
|||
|
InviteMemberToGroup_40Up(cardwxid, new string[] { username });
|
|||
|
return;
|
|||
|
}
|
|||
|
else
|
|||
|
json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_CARDMSG, data = new { to_wxid = username, card_wxid = cardwxid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendLinkMessage(string username, string title, string desc, string url, string image_url)
|
|||
|
{
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_LINKMSG, data = new { to_wxid = username, title = $"{title.XMLReplace()}", desc = $"{desc.XMLReplace()}", url = url.XMLReplace(), image_url = image_url.XMLReplace() } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
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
|
|||
|
{ }
|
|||
|
}
|
|||
|
}
|
|||
|
var json = string.Empty;
|
|||
|
if (file.Trim().EndsWith(".gif", StringComparison.CurrentCultureIgnoreCase))
|
|||
|
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_GIFMSG, data = new { to_wxid = wxid, file = file } });
|
|||
|
else
|
|||
|
json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_IMGMSG, data = new { to_wxid = wxid, file = file } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendVideo(string username, string file)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_VIDEOMSG, data = new { to_wxid = username, file = file } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void ModifyGroupNotice(string groupid, string notice)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_NOTICE_MSG, data = new { room_wxid = groupid, notice = notice } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void Ser_CreateGroup(string[] usernames)
|
|||
|
{
|
|||
|
var result = CreateGroup(usernames).Result;
|
|||
|
|
|||
|
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 = result?.GroupId;
|
|||
|
msg.MemberTotal = 0;
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
|
|||
|
public override Task<CreateGroupInfo> CreateGroup(string[] usernames)
|
|||
|
{
|
|||
|
if (usernames != null && usernames.Length != 0)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var type = RobotIsRunType.创建群;
|
|||
|
//这里判断是否已经存在在获取的群邀请信息,没有就去获取
|
|||
|
if (!User.IsGetDic.ContainsKey(type))
|
|||
|
{
|
|||
|
User.IsGetDic[type] = false;//这里添加要查询的群ID,状态为flase(还没收到微信那边返回的数据)
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_CREATE_ROOM_MSG, data = usernames });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
return Task.Factory.StartNew<CreateGroupInfo>(delegate ()
|
|||
|
{
|
|||
|
var keyMd5 = HttpExtend.GetMD5String($"CACHE_CREATEGROUP{type}");
|
|||
|
DateTime endtime = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.IsGetDic.ContainsKey(type) && User.IsGetDic[type])//等待收到微信查询的消息
|
|||
|
{
|
|||
|
do
|
|||
|
{
|
|||
|
if (!User.IsGetDic.ContainsKey(type))//等到解析完消息,解析完消息IsGetDic中的消息会被删除
|
|||
|
{
|
|||
|
var createGroupInfo = Common.GetCache<CreateGroupInfo>(keyMd5);
|
|||
|
Common.RemoveCache(keyMd5);
|
|||
|
return createGroupInfo;
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
break;
|
|||
|
}
|
|||
|
Thread.Sleep(20);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
return null;
|
|||
|
});
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error($"获取创建群信息", ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
return Task.FromResult<CreateGroupInfo>(null);
|
|||
|
}
|
|||
|
|
|||
|
public override void DeleteGroupMember(string groupid, string[] usernames)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_DEL_ROOM_MEMBER_MSG, data = new { room_wxid = groupid, member_list = usernames } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void QuitAndDelGroup(string groupid)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_QUIT_DEL_ROOM_MSG, data = new { room_wxid = groupid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void ModifyGroupName(string groupid, string newName)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_NAME_MSG, data = new { room_wxid = groupid, name = newName } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void Ser_GetSelfInfo()
|
|||
|
{
|
|||
|
var result = GetSelfInfo().Result;
|
|||
|
|
|||
|
var data = string.Empty;
|
|||
|
if (result != null)
|
|||
|
data = HttpHelper.ObjectToJson(result as FriendInfo);
|
|||
|
|
|||
|
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 = data;
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
|
|||
|
public override Task<FriendBase> GetSelfInfo()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
//这里判断是否已经存在在获取的群邀请信息,没有就去获取
|
|||
|
if (!User.IsGetContactDic.ContainsKey(User.Wxid))
|
|||
|
{
|
|||
|
User.IsGetContactDic[User.Wxid] = false;//这里添加要查询的群ID,状态为flase(还没收到微信那边返回的数据)
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_DATA_OWNER_MSG, data = new { } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
return Task.Factory.StartNew<FriendBase>(delegate ()
|
|||
|
{
|
|||
|
DateTime endtime = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.IsGetContactDic.ContainsKey(User.Wxid) && User.IsGetContactDic[User.Wxid])//等待收到微信查询的消息
|
|||
|
{
|
|||
|
do
|
|||
|
{
|
|||
|
if (!User.IsGetContactDic.ContainsKey(User.Wxid))//等到解析完消息,解析完消息IsGetContactDic中的消息会被删除
|
|||
|
{
|
|||
|
if (User.Friends.ContainsKey(User.Wxid))
|
|||
|
return User.Friends[User.Wxid];
|
|||
|
return null;
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
break;
|
|||
|
}
|
|||
|
Thread.Sleep(20);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
return null;
|
|||
|
});
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error($"获取自己基础信息", ex.Message);
|
|||
|
}
|
|||
|
return Task.FromResult<FriendBase>(null);
|
|||
|
}
|
|||
|
|
|||
|
public override void Ser_GetContact(string username)
|
|||
|
{
|
|||
|
var data = string.Empty;
|
|||
|
|
|||
|
if (User.Friends.ContainsKey(username))
|
|||
|
data = HttpHelper.ObjectToJson(User.Friends[username]);
|
|||
|
else
|
|||
|
{
|
|||
|
|
|||
|
if (username.IsQun())
|
|||
|
{
|
|||
|
var g = GetGroupInfos().Result;
|
|||
|
if (User.Friends.ContainsKey(username))
|
|||
|
data = HttpHelper.ObjectToJson(User.Friends[username]);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var result = GetFriendInfo(username).Result;
|
|||
|
if (result != null)
|
|||
|
data = HttpHelper.ObjectToJson((result as FriendInfo));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
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 = data;
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
|
|||
|
public override Task<FriendBase> GetFriendInfo(string username)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
//这里判断是否已经存在在获取的群邀请信息,没有就去获取
|
|||
|
if (!User.IsGetContactDic.ContainsKey(username))
|
|||
|
{
|
|||
|
User.IsGetContactDic[username] = false;//这里添加要查询的群ID,状态为flase(还没收到微信那边返回的数据)
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_DATA_WXID_MSG, data = new { wxid = username } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
return Task.Factory.StartNew<FriendBase>(delegate ()
|
|||
|
{
|
|||
|
DateTime endtime = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.IsGetContactDic.ContainsKey(username) && User.IsGetContactDic[username])//等待收到微信查询的消息
|
|||
|
{
|
|||
|
do
|
|||
|
{
|
|||
|
if (!User.IsGetContactDic.ContainsKey(username))//等到解析完消息,解析完消息IsGetContactDic中的消息会被删除
|
|||
|
{
|
|||
|
if (User.Friends.ContainsKey(username))
|
|||
|
return User.Friends[username];
|
|||
|
return null;
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
break;
|
|||
|
}
|
|||
|
Thread.Sleep(20);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
return null;
|
|||
|
});
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error($"获取单个用户信息", ex.Message);
|
|||
|
}
|
|||
|
return Task.FromResult<FriendBase>(null);
|
|||
|
}
|
|||
|
|
|||
|
public override void GetFriendInfo(string userName, string groupId, bool IsFlush = false)
|
|||
|
{
|
|||
|
var result = Task.Factory.StartNew<GroupInfo>(() =>
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (string.IsNullOrWhiteSpace(userName)) return null;
|
|||
|
if (string.IsNullOrWhiteSpace(groupId)) return null;
|
|||
|
|
|||
|
if (IsFlush)
|
|||
|
{
|
|||
|
var gInfo = GetGroupMemberInfo(groupId).Result;
|
|||
|
if (gInfo == null) return null;
|
|||
|
var g = gInfo as GroupInfo;
|
|||
|
if (g == null) return null;
|
|||
|
|
|||
|
var ftmp = g.friends.FirstOrDefault(f => f.wxid == userName);
|
|||
|
if (ftmp != null)
|
|||
|
return new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { ftmp }, total_member = User.Groups[groupId].total_member, nickname = User.Groups[groupId].nickname };
|
|||
|
}
|
|||
|
if (User.Groups.ContainsKey(groupId))
|
|||
|
{
|
|||
|
if (User.Groups[groupId].friends == null) return null;
|
|||
|
var ftmp = User.Groups[groupId].friends.FirstOrDefault(f => f.wxid == userName);
|
|||
|
if (ftmp != null)
|
|||
|
return new GroupInfo() { wxid = groupId, friends = new List<FriendInfo>() { ftmp }, total_member = User.Groups[groupId].total_member, nickname = User.Groups[groupId].nickname };
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error($"获取群用户信息", ex.Message);
|
|||
|
}
|
|||
|
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 = result == null ? string.Empty : HttpHelper.ObjectToJson(result);
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
|
|||
|
public override Task<Dictionary<string, GroupBase>> GetGroupInfos()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var type = RobotIsRunType.获取群列表;
|
|||
|
//这里判断是否已经存在在获取的群邀请信息,没有就去获取
|
|||
|
if (!User.IsGetDic.ContainsKey(type))
|
|||
|
{
|
|||
|
User.IsGetDic[type] = false;//这里添加要查询的群ID,状态为flase(还没收到微信那边返回的数据)
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_DATA_CHATROOMS_MSG, data = new { } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
return Task.Factory.StartNew(delegate ()
|
|||
|
{
|
|||
|
DateTime endtime = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.IsGetDic.ContainsKey(type) && User.IsGetDic[type])//等待收到微信查询的消息
|
|||
|
{
|
|||
|
do
|
|||
|
{
|
|||
|
if (!User.IsGetDic.ContainsKey(type))//等到解析完消息,解析完消息IsGetDic中的消息会被删除
|
|||
|
{
|
|||
|
Dictionary<string, GroupBase> dic = new Dictionary<string, GroupBase>();
|
|||
|
if (User.Groups != null)
|
|||
|
{
|
|||
|
foreach (var item in User.Groups)
|
|||
|
{
|
|||
|
dic.Add(item.Key, item.Value);
|
|||
|
}
|
|||
|
}
|
|||
|
return dic;
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
break;
|
|||
|
}
|
|||
|
Thread.Sleep(20);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
return null;
|
|||
|
});
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error($"获取所有群组列表", ex.Message);
|
|||
|
}
|
|||
|
return Task.FromResult<Dictionary<string, GroupBase>>(null);
|
|||
|
}
|
|||
|
|
|||
|
public override Task<GroupBase> GetGroupMemberInfo(string groupid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
//这里判断是否已经存在在获取的群邀请信息,没有就去获取
|
|||
|
if (!User.IsGetContactDic.ContainsKey(groupid))
|
|||
|
{
|
|||
|
User.IsGetContactDic[groupid] = false;//这里添加要查询的群ID,状态为flase(还没收到微信那边返回的数据)
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_DATA_CHATROOM_MEMBERS_MSG, data = new { room_wxid = groupid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
return Task.Factory.StartNew<GroupBase>(delegate ()
|
|||
|
{
|
|||
|
DateTime endtime = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.IsGetContactDic.ContainsKey(groupid) && User.IsGetContactDic[groupid])//等待收到微信查询的消息
|
|||
|
{
|
|||
|
do
|
|||
|
{
|
|||
|
if (!User.IsGetContactDic.ContainsKey(groupid))//等到解析完消息,解析完消息IsGetGroupMemberDic中的消息会被删除
|
|||
|
{
|
|||
|
if (User.Groups.ContainsKey(groupid))
|
|||
|
return User.Groups[groupid];
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
break;
|
|||
|
}
|
|||
|
Thread.Sleep(20);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
return null;
|
|||
|
});
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error($"获取指定群组成员信息", ex.Message);
|
|||
|
}
|
|||
|
return Task.FromResult<GroupBase>(null);
|
|||
|
}
|
|||
|
|
|||
|
public override void GetGroupsNotInMember()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
//获取群列表(数据库读取)
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DATA_CHATROOMS_MSG, data = new { } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
var result = Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
Thread.Sleep(4000);
|
|||
|
var groups = User.Friends.Where(f => f.Key.IsQun()).Select(f => f.Value).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.Key.IsQun()).Select(f => f.Value).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);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void OutLogin()
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_QUIT_LOGIN_MSG, data = new { } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void OutLogin(string message)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var v = WechatClient.Users.FirstOrDefault(f => f.Value.DwClientId == User.DwClientId && f.Value.Type == WechatType.Xiaoxie).Value;
|
|||
|
if (v != null)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Info("系统", $"CloseWechat事件退出,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 StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendProgramMessage(string username, string msg)
|
|||
|
{
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SEND_XMLMSG, data = new { to_wxid = username, xml = Common.XMLDispose(msg.Replace("&", "&")) } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void SendXml(string username, string xml, string customSource = "Window wechat")
|
|||
|
{
|
|||
|
if (xml.Trim().StartsWith("<appmsg", StringComparison.CurrentCultureIgnoreCase | StringComparison.InvariantCultureIgnoreCase) && xml.Trim().EndsWith("</appmsg>", StringComparison.CurrentCultureIgnoreCase | StringComparison.InvariantCultureIgnoreCase))
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_SEND_XMLMSG, data = new { to_wxid = username, xml = $@"<msg><fromusername>{User.Wxid}</fromusername><scene>0</scene><commenturl></commenturl>{Common.XMLDispose(xml.Replace("&", "&"))}<appinfo><version>1</version><appname>{customSource}</appname></appinfo></msg>" } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendCardXml(string username, string xml)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_SEND_CARD_XMLMSG, data = new { to_wxid = username, xml = xml } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void SendQuoteMessage(string username, string replyMess, WechatMsgType messageType, string quoteMess, string quoteMsgid,
|
|||
|
string quoteUsername, string quoteUsernick)
|
|||
|
{
|
|||
|
var mess = quoteMess;
|
|||
|
switch (messageType)
|
|||
|
{
|
|||
|
case WechatMsgType.文本:
|
|||
|
mess = quoteMess;
|
|||
|
break;
|
|||
|
case WechatMsgType.语音:
|
|||
|
case WechatMsgType.视频:
|
|||
|
case WechatMsgType.图片:
|
|||
|
case WechatMsgType.文件:
|
|||
|
case WechatMsgType.红包:
|
|||
|
case WechatMsgType.表情:
|
|||
|
case WechatMsgType.名片:
|
|||
|
case WechatMsgType.小程序:
|
|||
|
case WechatMsgType.链接:
|
|||
|
case WechatMsgType.群邀请:
|
|||
|
mess = messageType.ToString();
|
|||
|
break;
|
|||
|
default:
|
|||
|
mess = "未知消息";
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
var quoteXml = "<appmsg appid=\"\" sdkver=\"0\"><title>[回复内容]</title><des /><username /><action>view</action><type>57</type><showtype>0</showtype><content /><url /><lowurl /><dataurl /><lowdataurl /><contentattr>0</contentattr><streamvideo><streamvideourl /><streamvideototaltime>0</streamvideototaltime><streamvideotitle /><streamvideowording /><streamvideoweburl /><streamvideothumburl /><streamvideoaduxinfo /><streamvideopublishid /></streamvideo><canvasPageItem><canvasPageXml><![CDATA[]]></canvasPageXml></canvasPageItem><refermsg><type>1</type><svrid>[引用的消息id]</svrid><fromusr>[群号]</fromusr><chatusr>[引用用户的微信id]</chatusr><displayname>[引用用户的昵称]</displayname><msgsource><msgsource><silence>1</silence><membercount>7</membercount></msgsource></msgsource><content>[引用的内容]</content></refermsg><appattach><totallen>0</totallen><attachid /><cdnattachurl /><emoticonmd5></emoticonmd5><aeskey></aeskey><fileext /><islargefilemsg>0</islargefilemsg></appattach><extinfo /><androidsource>0</androidsource><thumburl /><mediatagname /><messageaction><![CDATA[]]></messageaction><messageext><![CDATA[]]></messageext><emoticongift><packageflag>0</packageflag><packageid /></emoticongift><emoticonshared><packageflag>0</packageflag><packageid /></emoticonshared><designershared><designeruin>0</designeruin><designername>null</designername><designerrediretcturl>null</designerrediretcturl></designershared><emotionpageshared><tid>0</tid><title>null</title><desc>null</desc><iconUrl>null</iconUrl><secondUrl>null</secondUrl><pageType>0</pageType></emotionpageshared><webviewshared><shareUrlOriginal /><shareUrlOpen /><jsAppId /><publisherId /></webviewshared><template_id /><md5 /><weappinfo><username /><appid /><appservicetype>0</appservicetype><videopageinfo><thumbwidth>0</thumbwidth><thumbheight>0</thumbheight><fromopensdk>0</fromopensdk></videopageinfo></weappinfo><statextstr /><musicShareItem><musicDuration>0</musicDuration></musicShareItem><findernamecard><username /><avatar><![CDATA[]]></avatar><nickname /><auth_job /><auth_icon>0</auth_icon><auth_icon_url /></findernamecard><finderEndorsement><scene><![CDATA[0]]></scene></finderEndorsement><directshare>0</directshare><gamecenter><namecard><iconUrl /><name /><desc /><tail /><jumpUrl /></namecard></gamecenter><patMsg><chatUser /><records><recordNum>0</recordNum></records></patMsg><websearch><rec_category>0</rec_category><channelId>0</channelId></websearch></appmsg>"
|
|||
|
.Replace("[回复内容]", replyMess)
|
|||
|
.Replace("[引用的消息id]", quoteMsgid)
|
|||
|
.Replace("[引用用户的微信id]", quoteUsername)
|
|||
|
.Replace("[引用用户的昵称]", quoteUsernick)
|
|||
|
.Replace("[引用的内容]", mess)
|
|||
|
.Replace("[群号]", username);
|
|||
|
|
|||
|
SendXml(username, quoteXml);
|
|||
|
}
|
|||
|
|
|||
|
public override void SendLinkMessage(string username, string title, string desc, string url, string imageUrl, string customSource)
|
|||
|
{
|
|||
|
var xml = @"<appmsg appid="""" sdkver=""0"">
|
|||
|
<title>[标题]</title>
|
|||
|
<des>[描述]</des>
|
|||
|
<action>view</action>
|
|||
|
<type>5</type>
|
|||
|
<showtype>0</showtype>
|
|||
|
<content/>
|
|||
|
<url>[地址]</url>
|
|||
|
<dataurl/>
|
|||
|
<lowurl/>
|
|||
|
<lowdataurl/>
|
|||
|
<recorditem><![CDATA[]]></recorditem>
|
|||
|
<thumburl>[图片地址]</thumburl>
|
|||
|
<messageaction/>
|
|||
|
<extinfo/>
|
|||
|
<sourceusername/>
|
|||
|
<sourcedisplayname/>
|
|||
|
<commenturl/>
|
|||
|
<appattach>
|
|||
|
<totallen>0</totallen>
|
|||
|
<attachid/>
|
|||
|
<emoticonmd5/>
|
|||
|
<fileext/>
|
|||
|
<aeskey/>
|
|||
|
</appattach>
|
|||
|
</appmsg>"
|
|||
|
.Replace("[标题]", title)
|
|||
|
.Replace("[描述]", desc)
|
|||
|
.Replace("[地址]", url)
|
|||
|
.Replace("[图片地址]", imageUrl);
|
|||
|
|
|||
|
SendXml(username, xml);
|
|||
|
}
|
|||
|
|
|||
|
public override void InviteMemberToGroup_40Down(string groupid, string[] usernames)
|
|||
|
{
|
|||
|
if (usernames != null && usernames.Length != 0)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_INVITE_TO_ROOM_MSG, data = new { room_wxid = groupid, member_list = usernames } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void InviteMemberToGroup_40Up(string groupid, string[] usernames)
|
|||
|
{
|
|||
|
if (usernames != null && usernames.Length != 0)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_INVITE_TO_ROOM_REQ_MSG, data = new { room_wxid = groupid, member_list = usernames } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void ModifyGroupMyNick(string groupid, string newNick)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_MOD_ROOM_NOTICE_MSG, data = new { room_wxid = groupid, notice = newNick } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void AutoAcceptGroup(bool isAuto)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_AUTO_ACCEPT_ROOM_MSG, data = new { auto = isAuto ? 1 : 0 } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void ModifyGroupShowNick(string groupid, bool isShow)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_MOD_ROOM_SHOW_NAME_MSG, data = new { room_wxid = groupid, status = isShow ? 1 : 0 } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SaveGroupToContact(string groupid, bool status)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_SAVE_ROOM_TO_CONTACT_MSG, data = new { room_wxid = groupid, status = status ? 1 : 0 } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void ForwardAny(string username, string msgid)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_FORWARD_ANY_MSG, data = new { to_wxid = username, msgid = msgid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override string TransVoice(string msgid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_TRANS_VOICE_MSG, data = new { msgid = msgid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
return Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
DateTime endtime = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
var text = Common.GetCache<String>($"TransVoiceResult-Wechat-{msgid}");
|
|||
|
if (!string.IsNullOrEmpty(text))
|
|||
|
{
|
|||
|
return text;
|
|||
|
}
|
|||
|
Thread.Sleep(500);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
return null;
|
|||
|
}).Result;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error($"语音转文本", ex.Message);
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
public override void ModifyRecvNotify(string username, bool status)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_MOD_RECV_NOTIFY_MSG, data = new { wxid = username, status = status ? 1 : 0 } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void ModifyChatTop(string username, bool status)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_MOD_CHAT_SESSION_TOP_MSG, data = new { wxid = username, status = status ? 1 : 0 } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void AddPublicUser(string username, string source_type = "")
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_ADD_PUBLIC_USER_MSG, data = new { wxid = username, source_type = source_type } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void AddFriend(string username, string remark, int source_type, string groupid)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_ADD_FRIEND_MSG, data = new { wxid = username, remark = remark, source_type = source_type, groupid = groupid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void ModifyFriendRemark(string username, string remark)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_MOD_FRIEND_REMARK_MSG, data = new { wxid = username, remark = remark } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void DeleteFriend(string username)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_DEL_FRIEND_MSG, data = new { wxid = username } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
//public override Task<bool> AcceptFriend(string username, string encryptusername, string ticket, string scene)
|
|||
|
public override void AcceptFriend(string text)
|
|||
|
{
|
|||
|
var v1 = string.Empty;
|
|||
|
var v2 = string.Empty;
|
|||
|
var scene = 0;
|
|||
|
|
|||
|
var reg = Regex.Match(text, @"encryptusername=\\?""([^""]+?)\\?""");
|
|||
|
if (reg.Success)
|
|||
|
v1 = reg.Groups[1].Value;
|
|||
|
reg = Regex.Match(text, @"ticket=\\?""([^""]+?)\\?""");
|
|||
|
if (reg.Success)
|
|||
|
v2 = reg.Groups[1].Value;
|
|||
|
reg = Regex.Match(text, @"scene=\\?""([^""]+?)\\?""");
|
|||
|
if (reg.Success)
|
|||
|
scene = int.Parse(reg.Groups[1].Value);
|
|||
|
|
|||
|
LogHelper.GetSingleObj().Info("------", $"v1 = {v1} v2 = {v1} scene = {scene}");
|
|||
|
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_ACCEPT_FRIEND_MSG, data = new { v1 = v1, v2 = v2, scene = scene } });
|
|||
|
//var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_ACCEPT_FRIEND_MSG, data = new { v1 = v1, v2 = v2 } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void AcceptFriendTransfer(string data)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var transferid = string.Empty;
|
|||
|
var dic = HttpExtend.JsonToDictionary(data);
|
|||
|
if (dic.ContainsKey("Transferid"))
|
|||
|
transferid = dic["Transferid"].ToString();
|
|||
|
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_ACCEPT_WCPAY_MSG, data = new { transferid = transferid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void RefuseFriendTransfer(string transferid)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_REFUSE_FRIEND_WCPAY_MSG, data = new { transferid = transferid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void AcceptFriendInviteToGroup(string username, string inviteUrl)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_ACCEPT_ROOM_MSG, data = new { wxid = username, invite_url = inviteUrl } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void AddOnewayFriend(string username)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_ACCEPT_ONEWAY_FRIEND_MSG, data = new { wxid = username } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override Task<Dictionary<string, FriendInfo>> GetFriendInfos()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var type = RobotIsRunType.获取好友列表;
|
|||
|
//这里判断是否已经存在在获取所有好友信息,没有就去获取
|
|||
|
if (!User.IsGetDic.ContainsKey(type))
|
|||
|
{
|
|||
|
User.IsGetDic[type] = false;//这里添加要查询类型,状态为flase(还没收到微信那边返回的数据)
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_DATA_FRIENDS_MSG, data = new { } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
return Task.Factory.StartNew<Dictionary<string, FriendInfo>>(delegate ()
|
|||
|
{
|
|||
|
DateTime endtime = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.IsGetDic.ContainsKey(type) && User.IsGetDic[type])//等待收到微信查询的消息
|
|||
|
{
|
|||
|
do
|
|||
|
{
|
|||
|
if (!User.IsGetDic.ContainsKey(type))//等到解析完消息,解析完消息IsGetDic中的消息会被删除
|
|||
|
{
|
|||
|
return User.Friends;
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
break;
|
|||
|
}
|
|||
|
Thread.Sleep(20);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
return null;
|
|||
|
});
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error($"获取好友列表", ex.Message);
|
|||
|
}
|
|||
|
return Task.FromResult<Dictionary<string, FriendInfo>>(null);
|
|||
|
}
|
|||
|
|
|||
|
public override Task<FriendBase> UpdateFriendInfo(string username)
|
|||
|
{ //这里判断是否已经存在在获取的群邀请信息,没有就去获取
|
|||
|
if (!User.IsGetContactDic.ContainsKey(username))
|
|||
|
{
|
|||
|
User.IsGetContactDic[username] = false;//这里添加要查询的群ID,状态为flase(还没收到微信那边返回的数据)
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_UPDATE_WXID_MSG, data = new { wxid = username } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
return Task.Factory.StartNew<FriendBase>(delegate ()
|
|||
|
{
|
|||
|
DateTime endtime = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.IsGetContactDic.ContainsKey(username) && User.IsGetContactDic[username])//等待收到微信查询的消息
|
|||
|
{
|
|||
|
do
|
|||
|
{
|
|||
|
if (!User.IsGetContactDic.ContainsKey(username))//等到解析完消息,解析完消息IsGetContactDic中的消息会被删除
|
|||
|
{
|
|||
|
if (User.Friends.ContainsKey(username))
|
|||
|
return User.Friends[username];
|
|||
|
return null;
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
break;
|
|||
|
}
|
|||
|
Thread.Sleep(20);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
return null;
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
public override void UpdateGroupMemberInfo(string groupid)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_UPDATE_ROOM_MEMBER_MSG, data = new { room_wxid = groupid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override Task<string> CheckZombie(string username)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_ZOMBIE_CHECK_MSG, data = new { wxid = username } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
return Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
DateTime endtime = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
var text = Common.GetCache<String>($"CheckZombieResult-Wechat-{User.Wxid}-{username}");
|
|||
|
if (!string.IsNullOrEmpty(text))
|
|||
|
{
|
|||
|
return text;
|
|||
|
}
|
|||
|
Thread.Sleep(500);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
return null;
|
|||
|
});
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error($"僵尸粉检测:{username}", ex.Message);
|
|||
|
}
|
|||
|
return Task.FromResult<string>(null);
|
|||
|
}
|
|||
|
|
|||
|
public override void AutoAcceptFriend(bool isAuto)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_AUTO_ACCEPT_FRIEND_MSG, data = new { auto = isAuto ? 1 : 0 } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void AutoAcceptFriendTransfer(bool isAuto)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_AUTO_ACCEPT_WCPAY_MSG, data = new { auto = isAuto ? 1 : 0 } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void AutoAcceptCard(bool isAuto)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_AUTO_ACCPET_CARD_MSG, data = new { auto = isAuto ? 1 : 0 } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void DecryptImage(string src_file, string dest_file)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_DECRYPT_IMG_MSG, data = new { src_file = src_file, dest_file = dest_file } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void OpenBrowser(string url)
|
|||
|
{
|
|||
|
url = url.Trim();
|
|||
|
if (!string.IsNullOrWhiteSpace(url))
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_OPEN_BROWSER_MSG, data = new { url = url } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override Task<int> GetUnReadMsgCount()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_UNREAD_MSG_COUNT_CHANGE_MSG, data = new { } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
return Task.Factory.StartNew<int>(delegate ()
|
|||
|
{
|
|||
|
DateTime endtime = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
var text = Common.GetCache<String>($"UnReadMsgCountResult-Wechat-{User.Wxid}");
|
|||
|
if (!string.IsNullOrEmpty(text))
|
|||
|
{
|
|||
|
return int.Parse(text);
|
|||
|
}
|
|||
|
Thread.Sleep(500);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
return 0;
|
|||
|
});
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error($"获取未读取消息数量:{User.Nickname}({User.Wxid})", ex.Message);
|
|||
|
}
|
|||
|
return Task.FromResult<int>(0);
|
|||
|
}
|
|||
|
|
|||
|
public override void SetMsgReaded(string username)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SET_SESSION_READED_MSG, data = new { wxid = username } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void ToChatWindow(string username)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_TO_CHAT_MSG, data = new { to_wxid = username } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void ClearChatHistoryMsg()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CLEAR_CHAT_HISTORY_MSG, data = new { } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void AutoAuthMiniAPPLogin(string appid)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_AUTO_AUTH_MINIAPP_LOGIN, data = new { appid = appid } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
var result = Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.AutoAuthLoginMiNiApps.ContainsKey(appid))
|
|||
|
{
|
|||
|
return User.AutoAuthLoginMiNiApps[appid];
|
|||
|
}
|
|||
|
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.rcvMiniAppCode;
|
|||
|
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 DisableRevoke(bool status)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_DISABLE_REVOKE_MSG, data = new { status = status ? 1 : 0 } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void AddSearchContact(string v1, string v2, string remark, int source_type)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_ADD_SEARCH_CONTACT_MSG, data = new { v1 = v1, v2 = v2, remark = remark, source_type = source_type } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void GerFriendDetails(string username)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_UPDATE_WXID_MSG, data = new { wxid = username } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void CheckUrlStatus(string url)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
url = url.Trim();
|
|||
|
if (!string.IsNullOrWhiteSpace(url))
|
|||
|
{
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CHECK_URL_STATUS_MSG, data = new { url = url } });
|
|||
|
//var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_CHECK_URL_STATUS2_MSG, data = new { url = url } });
|
|||
|
SendWeChatData(this.User.DwClientId, json);
|
|||
|
}
|
|||
|
var result = Task.Factory.StartNew<int>(delegate ()
|
|||
|
{
|
|||
|
var awaitTime = DateTime.Now.AddSeconds(10);
|
|||
|
do
|
|||
|
{
|
|||
|
Thread.Sleep(200);
|
|||
|
//if (CheckUrlCache.ContainsKey(url)) return CheckUrlCache[url];
|
|||
|
Cache cache = HttpRuntime.Cache;
|
|||
|
object item = cache[url];
|
|||
|
if (item != null)
|
|||
|
return int.Parse(item.ToString());
|
|||
|
} while (awaitTime >= DateTime.Now);
|
|||
|
return -1;
|
|||
|
}).Result;
|
|||
|
|
|||
|
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 = result;
|
|||
|
|
|||
|
socketClient.Send(msg);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error(new StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void Ser_GetCircles(string max_id = "0", string username = "")
|
|||
|
{
|
|||
|
var result = GetCircles(max_id, username).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);
|
|||
|
}
|
|||
|
|
|||
|
public override Task<string> GetCircles(string max_id = "0", string username = "")
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var key = username;
|
|||
|
if (!string.IsNullOrWhiteSpace(username))
|
|||
|
{
|
|||
|
User.IsOperCirCleInfoDic[key] = false;
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_TIMELINE_USER_MSG, data = new { username = username, first_page_md5 = "", max_id = max_id } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
key = "0";
|
|||
|
|
|||
|
//这里判断是否已经存在在获取的群邀请信息,没有就去获取
|
|||
|
if (!User.IsOperCirCleInfoDic.ContainsKey(key))
|
|||
|
{
|
|||
|
User.IsOperCirCleInfoDic[key] = false;//这里添加要查询的群ID,状态为flase(还没收到微信那边返回的数据)
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_SNS_TIMELINE_MSG, data = new { max_id = max_id } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return Task.Factory.StartNew(delegate ()
|
|||
|
{
|
|||
|
DateTime endtime = DateTime.Now.AddSeconds(20);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.IsOperCirCleInfoDic.ContainsKey(key) && User.IsOperCirCleInfoDic[key])//等待收到微信查询的消息
|
|||
|
{
|
|||
|
do
|
|||
|
{
|
|||
|
if (!User.IsOperCirCleInfoDic.ContainsKey(key))//等到解析完消息,解析完消息IsOperCirCleInfoDic中的消息会被删除
|
|||
|
{
|
|||
|
if (User.CirCleInfoOriDic.ContainsKey(key))
|
|||
|
return User.CirCleInfoOriDic[key];
|
|||
|
return null;
|
|||
|
}
|
|||
|
Thread.Sleep(200);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
break;
|
|||
|
}
|
|||
|
Thread.Sleep(20);
|
|||
|
} while (endtime > DateTime.Now);
|
|||
|
return null;
|
|||
|
});
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Error($"获取朋友圈数据,{max_id} - {username}", ex.Message);
|
|||
|
}
|
|||
|
return Task.FromResult<string>(null);
|
|||
|
}
|
|||
|
|
|||
|
public override void CircleLink(string object_id)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_SNS_LIKE_MSG, data = new { object_id = object_id } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
}
|
|||
|
|
|||
|
public override void CircleComment(string object_id, string content)
|
|||
|
{
|
|||
|
if (string.IsNullOrWhiteSpace(content)) return;
|
|||
|
var comments = content.Split(new string[] { "[分段]" }, StringSplitOptions.RemoveEmptyEntries);
|
|||
|
foreach (var comment in comments)
|
|||
|
{
|
|||
|
var json = JsonConvert.SerializeObject(new { type = MsgType.MT_SNS_COMMENT_MSG, data = new { object_id = object_id, content = comment } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
Thread.Sleep(1000);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
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($@"{DateTime.Now.ToString("MMddhhmmssfff")}.{Common.GetImageExt(bitmap)}", @"Cache\IMAGE");
|
|||
|
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($@"{DateTime.Now.ToString("MMddhhmmssfff")}.{Common.GetImageExt(bitmap)}", @"Cache\IMAGE");
|
|||
|
|
|||
|
bitmap.Save(path);
|
|||
|
bitmap.Dispose();
|
|||
|
}
|
|||
|
|
|||
|
if (!string.IsNullOrWhiteSpace(path) && File.Exists(path))
|
|||
|
{
|
|||
|
LogHelper.GetSingleObj().Info(new StackTrace().GetFrame(0).GetMethod().Name, $"开始上传朋友圈图片:" + path);
|
|||
|
|
|||
|
var json = HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_UPLOAD_IMAGE_MSG, data = new { path = path } });
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
var result = Task.Factory.StartNew<string>(delegate ()
|
|||
|
{
|
|||
|
DateTime end_time = DateTime.Now.AddSeconds(60);
|
|||
|
do
|
|||
|
{
|
|||
|
if (User.UpLoadImages.ContainsKey(path))
|
|||
|
{
|
|||
|
return User.UpLoadImages[path];
|
|||
|
}
|
|||
|
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},{ex.StackTrace}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendCircle(string object_desc)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var json = CsharpHttpHelper.HttpHelper.ObjectToJson(new { type = MsgType.MT_SNS_POST_MSG, data = new { object_desc = object_desc } });
|
|||
|
User.SendCircleId = string.Empty;
|
|||
|
SendWeChatData(User.DwClientId, json);
|
|||
|
|
|||
|
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 System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name, ex.Message);
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
User.SendCircleId = string.Empty;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|