old_flsystem/类库/Chat.Framework/QQSdk/QPlus/QQClientImpl_QQPlus.cs

1024 lines
40 KiB
C#
Raw Normal View History

2022-09-20 03:10:29 +00:00
using Chat.Framework.QQSdk.Events;
using Chat.Framework.Utils;
using Robot.Framework;
using Robot.Framework.Entities;
using Robot.Framework.SDK;
using System;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
namespace Chat.Framework.QQSdk.QPlus
{
/// <summary>
/// QQ客户端管理
/// </summary>
public class QQClientImpl_QQPlus : QQBase, IDisposable
{
/// <summary>
/// QQ客户端
/// </summary>
public QQClient QQClient { get; internal set; }
/// <summary>
/// 启动时间
/// </summary>
private DateTime StartTime = DateTime.MinValue;
private QQClientImpl_QQPlus() { }
int register = 1;
internal QQClientImpl_QQPlus(QQClient QQClient)
{
this.QQClient = QQClient;
this.QQ = QQClient.User.QQ;
this.Nickname = QQClient.User.NickName;
this.IsLogin = QQClient.User.LoginStatus == LoginStatus.Login;
//this.Password = Robot.Framework.Utils.Util.ToHex(QQClient.User.md5_1, "", "{0}");
//this.Password = QQClient.ToString();
this.IsEQQ = QQClient.QQProtocol != "PCQQ";
if (QQClient != null)
{
LogHelper.GetSingleObj().Debug("登录日志", $"账号:{QQ},注册事件 {register}");
register++;
StartTime = DateTime.Now;
QQClient.LoginStatusChanged += client_LoginStatusChanged;
//QQClient.LoginSuccessed += client_LoginSuccessed;
QQClient.SystemMessage += client_SystemMessage;
QQClient.ReceiveNormalIM += client_ReceiveNormalIM;
QQClient.AddedToCluster += client_AddedToCluster;
QQClient.AddedToClusterInvite += client_AddedToClusterInvite;
QQClient.AddMeFriend += client_AddMeFriend;
QQClient.AddMeFriendNeedAuth += client_AddMeFriendNeedAuth;
QQClient.AddToClusterNeedAuth += client_AddToClusterNeedAuth;
QQClient.CardChanged += client_CardChanged;
QQClient.ClusterAdminChanged += client_ClusterAdminChanged;
QQClient.KeepAlive += client_KeepAlive;
QQClient.LostConnection += client_LostConnection;
QQClient.MemberExitCluster += client_MemberExitCluster;
QQClient.QQLevel += client_QQLevel;
QQClient.ReceiveClusterIM += client_ReceiveClusterIM;
QQClient.ReceiveSubjectIM += client_ReceiveSubjectIM;
QQClient.ReceiveTempIM += client_ReceiveTempIM;
QQClient.ReceiveVibration += client_ReceiveVibration;
QQClient.RejectJoinCluster += client_RejectJoinCluster;
QQClient.SignatureChanged += client_SignatureChanged;
QQClient.StatusChanged += client_StatusChanged;
QQClient.ClusterEvent += client_ClusterEvent;
QQClient.ClusterNoticeChanged += client_ClusterNoticeChanged;
QQClient.VerifyImage += client_VerifyImage;
QQClient.AddMeSubject += client_AddMeSubject;
QQClient.QQClientStatusChanged += client_QQClientStatusChanged;
QQClient.SilencedQQEvent += client_SilencedQQEvent;
QQClient.SignQQEvent += client_SignQQEvent;
QQClient.QQPayEvent += client_QQPayEvent;
QQClient.RecallEvent += client_RecallEvent;
QQClient.RedBagEvent += Client_RedBagEvent;
}
}
//public override void Login(string Username, string Userpass)
//{
// QQClient.Login();
//}
public override void Login()
{
QQClient.Login();
}
public override void Logout()
{
Dispose();
QQClient.Logout();
}
public override void SendTempMessage(uint QQ, string Message)
{
QQClient.SendTempMessage(QQ, Message);
}
public override void SendTempMessage(uint QQ, string Message, byte[] Token)
{
QQClient.SendTempMessage(QQ, Message);
}
public override void SendFriendImage(uint QQ, string ImageSrc)
{
QQClient.SendMessage(QQ, $"[图片={ImageSrc}/]");
}
public override void SendFriendMessage(uint QQ, string Message)
{
QQClient.SendMessage(QQ, Message);
LogHelper.GetSingleObj().Debug("发送私聊消息", $"接收:{QQ},内容:{Message}");
}
public override void SendGroupImage(uint GroupId, string ImageSrc)
{
count++;
StringBuilder strb = new StringBuilder();
strb.AppendLine($"发送群图片:群:{GroupId},内容:{ImageSrc}");
var flag = QQClient.SendClusterMessage(GroupId, ImageSrc);
strb.AppendLine($"发送状态:{flag}");
LogHelper.GetSingleObj().Debug("发送群图片", $"{strb} -> {count}");
}
public int count = 0;
public override void SendGroupMessage(uint GroupId, string Message)
{
count++;
StringBuilder strb = new StringBuilder();
strb.AppendLine($"发送群消息:群:{GroupId},内容:{Message}");
var flag = QQClient.SendClusterMessage(GroupId, Message);
strb.AppendLine($"发送状态:{flag} -> " + count);
LogHelper.GetSingleObj().Debug("发送群消息", $"{strb}");
}
//---------------
private void client_SystemMessage(object sender, SystemMessageQQEventArgs e)
{
try
{
Console.WriteLine("##########" + e.Message);
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_LoginStatusChanged(object sender, LoginStatusChangedQQEventArgs e)
{
try
{
if (sender is QQClient)
{
var client = sender as QQClient;
ChatClient.QQEvents.OnEvent(new QQLogEvents(null) { Message = $"QQ({client.User.NickName}【{client.User.QQ}】) {e.LoginStatus} {e.Other}" });
var logstatusTmp = client.User.LoginStatus;
this.QQClient = client;
if (e.LoginStatus == LoginStatus.Login)
{
this.QQ = QQClient.User.QQ;
this.Nickname = QQClient.User.NickName;
this.IsLogin = QQClient.User.LoginStatus == LoginStatus.Login;
//this.Password = Robot.Framework.Utils.Util.ToHex(QQClient.User.md5_1, "", "{0}");
ChatClient.UpdateQQClient(this);
//if (client != null && logstatusTmp != e.LoginStatus)
{
QQBase qBase = null;
if (ChatClient.QQClients.ContainsKey(client.QQ.ToString()))
qBase = ChatClient.QQClients[client.QQ.ToString()];
else
qBase = new QQClientImpl_QQPlus(client);
var x = new QQLoginChangeEvents(qBase, true, "在线");
ChatClient.QQEvents.OnEvent(x);
}
}
else if (e.LoginStatus == LoginStatus.Logout || e.LoginStatus == LoginStatus.WrongPassword || e.LoginStatus == LoginStatus.JiHuo)
{
this.IsLogin = QQClient.User.LoginStatus == LoginStatus.Login;
ChatClient.LoginOutQQ(this.QQ.ToString());
}
}
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 用户被邀请进群
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_AddedToCluster(object sender, AddedToClusterQQEventArgs e)
{
try
{
QQNewGroupMemberEvents evt = null;
if (e.IsInvite)
{
evt = new QQNewGroupMemberEvents(this) { GroupId = e.Cluster.ExternalId, GroupName = e.Cluster.Name, Creator = e.ClusterMemberAdmin.QQ, InviteQQ = e.ClusterMemberInviter.QQ, InviteNick = e.ClusterMemberInviter.OldCard, NewFriendNick = e.ClusterMember.Nick, NewFriendQQ = e.ClusterMember.QQ };
}
else
{
evt = new QQNewGroupMemberEvents(this) { GroupId = e.Cluster.ExternalId, GroupName = e.Cluster.Name, Creator = e.ClusterMemberAdmin.QQ, InviteQQ = 0, NewFriendNick = e.ClusterMember.Nick, NewFriendQQ = e.ClusterMember.QQ };
}
ChatClient.QQEvents.OnEvent(evt);
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 用户进群
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_AddedToClusterInvite(object sender, AddedToClusterInviteQQEventArgs e)
{
try
{
var evt = new QQNewGroupMemberEvents(this) { GroupId = e.Cluster.ExternalId, GroupName = e.Cluster.Name, Creator = e.ClusterMemberAdmin.QQ, InviteQQ = e.ClusterMemberAdmin.QQ, InviteNick = e.ClusterMemberAdmin.CardOrName, NewFriendNick = e.ClusterMember.Nick, NewFriendQQ = e.ClusterMember.QQ };
ChatClient.QQEvents.OnEvent(evt);
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_AddMeFriend(object sender, AddMeFriendQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 添加好友需要审核
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_AddMeFriendNeedAuth(object sender, AddMeFriendNeedAuthQQEventArgs e)
{
try
{
//OnLog($"QQ({this.QQ})->用户【{e.Nick}({e.QQ})】申请添加好友!");
var evt = new QQAddMeNeedAuthEvents(this) { QQ = e.QQ, Message = e.Message, Nickname = e.Nick };
ChatClient.QQEvents.OnEvent(evt);
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 添加群需要审核
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_AddToClusterNeedAuth(object sender, AddToClusterNeedAuthQQEventArgs e)
{
try
{
//OnLog($"QQ({this.QQ})->用户({e.QQ})申请加入群 {e.Cluster.Name}({e.Cluster.ExternalId}) 申请内容:{e.Message}");
var evt = new QQAddToClusterNeedAuthEvents(this) { QQ = e.QQ, Message = e.Message, Nickname = string.Empty, ClusterId = e.Cluster.ExternalId, GroupId = e.Cluster.GroupId, Creator = e.Cluster.Creator, GroupName = e.Cluster.Name };
ChatClient.QQEvents.OnEvent(evt);
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
public override void AerifyAddMe(uint QQ, byte Agree = 4, string Message = "")
{
QQClient.AgreeFriendInvite(QQ, Agree, Message);
}
public override void AerifyAddGroup(uint groupId, uint QQ, bool Agree = true, string Message = "")
{
QQClient.AgreeJoinCluster(groupId, QQ);
}
private void client_CardChanged(object sender, CardChangedQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 群管理变更
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_ClusterAdminChanged(object sender, ClusterAdminChangedQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 心跳
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_KeepAlive(object sender, KeepAliveQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 断开连接
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_LostConnection(object sender, LostConnectionQQEventArgs e)
{
try
{
this.Login();
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 用户退出群
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_MemberExitCluster(object sender, MemberExitClusterQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_QQLevel(object sender, QQLevelQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 群消息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_ReceiveClusterIM(object sender, ReceiveClusterIMQQEventArgs e)
{
try
{
if (StartTime.AddSeconds(20) > DateTime.Now)
return;
if (e.SendTime.AddSeconds(60) < DateTime.Now)
return;
QQClient q = null;
if (sender is QQClient)
{
q = sender as QQClient;
if (q != null && q.QQ == e.ClusterMember.QQ)
return;
}
var nickname = string.Empty;
if (e.ClusterMember != null && !string.IsNullOrWhiteSpace(e.ClusterMember.CardOrName))
{
nickname = e.ClusterMember.CardOrName;
}
else
{
if (q != null && q.User.Friends != null)
{
var friend = q.User.Friends.FirstOrDefault(f => f.QQ == e.ClusterMember.QQ);
if (friend != null)
nickname = friend.NickName;
}
}
var mess = QQMessReplace(e.Message);
if (string.IsNullOrWhiteSpace(mess)) return;
ChatClient.QQEvents.OnEvent(new Events.QQReceiveGroupMsgEvents(this) { QQ = e.ClusterMember.QQ, GroupId = e.Cluster.ExternalId, GroupName = e.Cluster.Name, Nickname = nickname, Message = mess });
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_ReceiveSubjectIM(object sender, ReceiveSubjectIMQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 正常私人消息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_ReceiveNormalIM(object sender, ReceiveNormalIMQQEventArgs e)
{
try
{
if (StartTime.AddSeconds(20) > DateTime.Now)
return;
if (e.SendTime.AddSeconds(60) < DateTime.Now)
return;
var nickname = string.Empty;
if (sender is QQClient)
{
var q = sender as QQClient;
if (q != null && q.User.Friends != null)
{
var friend = q.User.Friends.FirstOrDefault(f => f.QQ == e.QQ);
if (friend != null)
nickname = friend.NickName;
}
}
//你的QQ暂不支持查看视频短片请期待后续版本。[视频=51A933ED15D1F8969C0D12CD423F54F5.mp4/]
var mess = QQMessReplace(e.Message);
if (string.IsNullOrWhiteSpace(mess)) return;
ChatClient.QQEvents.OnEvent(new Events.QQReceiveFriendMsgEvents(this) { QQ = e.QQ, Nickname = nickname, Message = mess });
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 过来QQ的消息
/// </summary>
/// <param name="_mess"></param>
/// <returns></returns>
private string QQMessReplace(string _mess)
{
try
{
var mess = _mess;
mess = mess.Replace("你的QQ暂不支持查看视频短片请期待后续版本。", "");
mess = Regex.Replace(mess, @"(\[(?:声音|图片|视频)=.+?/\])", "", RegexOptions.IgnoreCase);
return mess;
}
catch (Exception ex)
{ }
return _mess;
}
private void client_ReceiveTempIM(object sender, ReceiveTempIMQQEventArgs e)
{
try
{
if (StartTime.AddSeconds(20) > DateTime.Now)
return;
if (e.SendTime.AddSeconds(60) < DateTime.Now)
return;
var nickname = string.Empty;
if (sender is QQClient)
{
var q = sender as QQClient;
if (q != null && q.User.Friends != null)
{
var friend = q.User.Friends.FirstOrDefault(f => f.QQ == e.QQ);
if (friend != null)
nickname = friend.NickName;
}
}
var mess = QQMessReplace(e.Message);
if (string.IsNullOrWhiteSpace(mess)) return;
ChatClient.QQEvents.OnEvent(new Events.QQReceiveFriendMsgEvents(this) { QQ = e.QQ, Nickname = nickname, Message = mess, IsTemp = true });
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 震动
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_ReceiveVibration(object sender, ReceiveVibrationQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_RejectJoinCluster(object sender, RejectJoinClusterQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_SignatureChanged(object sender, SignatureChangedQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_StatusChanged(object sender, StatusChangedQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_ClusterEvent(object sender, ClusterEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 群公告修改
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_ClusterNoticeChanged(object sender, ClusterNoticeChangedEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_VerifyImage(object sender, VerifyImageQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_AddMeSubject(object sender, AddMeSubjectQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_QQClientStatusChanged(object sender, QQClientStatusChangedQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_SilencedQQEvent(object sender, SilencedQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
private void client_SignQQEvent(object sender, SignQQEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// QQ支付
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_QQPayEvent(object sender, QQPayEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 撤回
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void client_RecallEvent(object sender, RecallEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
/// <summary>
/// 红包
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Client_RedBagEvent(object sender, RedBagEventArgs e)
{
try
{
}
catch (Exception ex)
{
OnLog(System.Reflection.MethodBase.GetCurrentMethod().Name + " : " + ex.Message + " - " + ex.StackTrace);
}
}
public void Dispose()
{
if (QQClient != null)
{
QQClient.LoginStatusChanged -= client_LoginStatusChanged;
//QQClient.LoginSuccessed -= client_LoginSuccessed;
QQClient.SystemMessage -= client_SystemMessage;
QQClient.ReceiveNormalIM -= client_ReceiveNormalIM;
QQClient.AddedToCluster -= client_AddedToCluster;
QQClient.AddedToClusterInvite -= client_AddedToClusterInvite;
QQClient.AddMeFriend -= client_AddMeFriend;
QQClient.AddMeFriendNeedAuth -= client_AddMeFriendNeedAuth;
QQClient.AddToClusterNeedAuth -= client_AddToClusterNeedAuth;
QQClient.CardChanged -= client_CardChanged;
QQClient.ClusterAdminChanged -= client_ClusterAdminChanged;
QQClient.KeepAlive -= client_KeepAlive;
QQClient.LostConnection -= client_LostConnection;
QQClient.MemberExitCluster -= client_MemberExitCluster;
QQClient.QQLevel -= client_QQLevel;
QQClient.ReceiveClusterIM -= client_ReceiveClusterIM;
QQClient.ReceiveSubjectIM -= client_ReceiveSubjectIM;
QQClient.ReceiveTempIM -= client_ReceiveTempIM;
QQClient.ReceiveVibration -= client_ReceiveVibration;
QQClient.RejectJoinCluster -= client_RejectJoinCluster;
QQClient.SignatureChanged -= client_SignatureChanged;
QQClient.StatusChanged -= client_StatusChanged;
QQClient.ClusterEvent -= client_ClusterEvent;
QQClient.ClusterNoticeChanged -= client_ClusterNoticeChanged;
QQClient.VerifyImage -= client_VerifyImage;
QQClient.AddMeSubject -= client_AddMeSubject;
QQClient.QQClientStatusChanged -= client_QQClientStatusChanged;
QQClient.SilencedQQEvent -= client_SilencedQQEvent;
QQClient.SignQQEvent -= client_SignQQEvent;
QQClient.QQPayEvent -= client_QQPayEvent;
QQClient.RecallEvent -= client_RecallEvent;
QQClient.RedBagEvent -= Client_RedBagEvent;
}
}
public override Task<bool> SendMessage(uint _username, string _content, bool _isGroup = false, bool _isTemp = false)
{
uint username = _username;
string content = _content;
bool isGroup = _isGroup;
bool isTemp = _isTemp;
return Task.Run(() =>
{
if (string.IsNullOrEmpty(content)) return true;
content = content.Replace("\r\n", "\n").Trim().Replace("[时间]", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
var msgs = content.Split(new string[] { "[分段]" }, StringSplitOptions.RemoveEmptyEntries);
try
{
foreach (var msg in msgs)
{
var m = msg.Trim();
if (string.IsNullOrEmpty(m)) continue;
var message = m.RandomMess();
message = message.Contains("[随机表情]") ? message.Replace("[随机表情]", "") : message;
message = DelayMess(message);
//发送XML消息
//if (message.StartsWith("<appmsg appid=") && message.EndsWith("</appmsg>"))
//{
// WechatPack pack = new WechatPack(this);
// var sendJson = new
// {
// ToUserName = username,
// AppId = "",
// Type = 5,
// Content = message
// };
// pack.SendAll(WechatCmd.发送XML消息, false, sendJson);
// return true;
//}
////发送公告消息
//var matchs = Regex.Matches(message, @"\[公告\=([^\]]+)\]", RegexOptions.IgnoreCase);
//if (username.Contains("@"))
//{
// foreach (Match match in matchs)
// {
// SetRoomNotice(match.Groups[1].Value, username);
// }
//}
//message = Regex.Replace(message, @"\[公告\=([^\]]+)\]", "");
//message = DelayMess(message);
//发送图片消息
var matchs = Regex.Matches(message, @"\[图片\=([^\]]+)\]", RegexOptions.IgnoreCase);
foreach (Match match in matchs)
{
if (isGroup)
SendGroupMessage(username, $"[图片={match.Groups[1].Value}/]");
else
{
if (isTemp)
SendTempMessage(username, $"[图片={match.Groups[1].Value}/]");
else
SendFriendMessage(username, $"[图片={match.Groups[1].Value}/]");
}
}
message = Regex.Replace(message, @"\[图片\=([^\]]+)\]", "");
message = DelayMess(message);
//发送语音消息
matchs = Regex.Matches(message, @"\[语音\=([^\]]+)\]", RegexOptions.IgnoreCase);
foreach (Match item in matchs)
{
if (isGroup)
{
var g = QQClient.GetCluster(username);
QQClient.SendClusterAudio(g, $"{item.Groups[1].Value}");
}
else
{
if (isTemp)
{
//SendTempMessage(username, $"[语音={item.Groups[1].Value}/]");
}
else
QQClient.SendAudio(username, $"{item.Groups[1].Value}");
}
}
message = Regex.Replace(message, @"\[语音\=([^\]]+)\]", "");
message = DelayMess(message);
matchs = Regex.Matches(message, @"\[视频\=([^\]]+)\]", RegexOptions.IgnoreCase);
//foreach (Match item in matchs)
//{
// var temp = item.Groups[1].Value;
// if (!File.Exists(temp)) continue;
// if (isGroup)
// SendGroupMessage(username, $"[视频={item.Groups[1].Value}/]");
// else
// {
// if (isTemp)
// SendTempMessage(username, $"[视频={item.Groups[1].Value}/]");
// else
// SendFriendMessage(username, $"[视频={item.Groups[1].Value}]");
// }
//}
message = Regex.Replace(message, @"\[视频\=([^\]]+)\]", "");
message = DelayMess(message);
matchs = Regex.Matches(message, @"\[卡片\=([^\]]+)\]", RegexOptions.IgnoreCase);
foreach (Match item in matchs)
{
//SendCard(username, item.Groups[1].Value == "自己" ? User.Username : item.Groups[1].Value);
}
message = Regex.Replace(message, @"\[卡片\=([^\]]+)\]", "");
message = DelayMess(message);
if (string.IsNullOrWhiteSpace(message)) continue;
if (message.StartsWith("\r\n")) message = message.Substring("\r\n".Length);
if (message.StartsWith("\n")) message = message.Substring("\n".Length);
//QQchatPack send = new QQchatPack(this);
#region id
//List<string> atWxidList = new List<string>();
//var regTmp = Regex.Matches(message, @"(?<全部>\[@(?<账号>[A-Za-z0-9_]+)\])");
//foreach (Match item in regTmp)
//{
// if (item.Success)
// {
// var name = item.Groups["账号"].Value;
// atWxidList.Add(name);
// var friend = GetContact(name);
// if (friend != null)
// message = message.Replace(item.Groups["全部"].Value, $"@{friend.NickName} ");
// }
//}
//if (atWxidList.Count != 0)
//{
// atUsername = string.Join(",", atWxidList);
//}
#endregion
//var sendData = new { ToUserName = username, Content = message.Trim(), Type = 0, MsgSource = atUsername };
//send.SetNextData(new WechatPack.PackMsg() { cmd = WechatCmd.发送文本消息, data = sendData });
//RunSendMessageQueue(send);
if (isGroup)
SendGroupMessage(username, message.Trim());
else
{
if (isTemp)
SendTempMessage(username, message.Trim());
else
SendFriendMessage(username, message.Trim());
}
}
return true;
}
catch (Exception ex)
{
this.OnLog("QQSendMessage ERROR:" + ex.Message + "," + ex.StackTrace);
return false;
}
});
}
/// <summary>
/// 消息延迟
/// </summary>
/// <param name="message"></param>
public string DelayMess(string message)
{
try
{
message = message.Trim();
if (message.StartsWith("[延迟="))
{
var reg = Regex.Match(message, @"\[延迟=(\d+)\]");
if (reg.Success)
{
message = Regex.Replace(message, @"\[延迟=(\d+)\]", "").Trim();
// this.WriteLog($"需要延迟{reg.Groups[1].Value}秒,再发送:{message}");
Thread.Sleep(int.Parse(reg.Groups[1].Value) * 1000);
}
}
}
catch (Exception ex)
{ }
return message;
}
/// <summary>
/// 需要发送的消息队列
/// </summary>
//private ConcurrentQueue<QQchatPack> SendMessageQueue { get; set; } = new ConcurrentQueue<QQchatPack>();
//private object lock_sendmessage = new object();
//private bool lock_sendmessage_ing = false;
//Thread SendMessageThread;
//private DateTime fragmentTime = DateTime.MinValue;
//private int fragmentCount = 0;
//private void RunSendMessageQueue(QQchatPack sendPack)
//{
// SendMessageQueue.Enqueue(sendPack);
// if (lock_sendmessage_ing) return;
// lock (lock_sendmessage)
// {
// if (lock_sendmessage_ing) return;
// lock_sendmessage_ing = true;
// ThreadPool.QueueUserWorkItem(x =>
// {
// try
// {
// QQchatPack pack = null;
// while (SendMessageQueue.TryDequeue(out pack))
// {
// if (this.IsLogin)
// {
// pack.SendNextData();
// #region 消息防止频繁,休眠操作
// if (ChatClient.MessFrequentSleepTime != 0)
// {
// fragmentCount++;
// var totalSeconds = (DateTime.Now - fragmentTime).TotalSeconds;//上次休眠的时间差
// bool rest = totalSeconds > 10;
// if (fragmentCount >= 10 && totalSeconds <= 10)
// {
// rest = true;
// Thread.Sleep(ChatClient.MessFrequentSleepTime * 1000);
// }
// if (rest)
// {
// fragmentCount = 1;
// fragmentTime = DateTime.Now;
// }
// }
// #endregion
// }
// }
// }
// catch (Exception)
// {
// }
// finally
// {
// lock_sendmessage_ing = false;
// }
// });
// }
//}
}
}