497 lines
20 KiB
C#
497 lines
20 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Text.RegularExpressions;
|
|||
|
using System.Threading;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using Chat.Framework.QQSdk.Events;
|
|||
|
using QQPlus.Framework;
|
|||
|
using QQPlus.Framework.Entities;
|
|||
|
using QQPlus.Framework.SDK;
|
|||
|
|
|||
|
namespace Chat.Framework.QQSdk.PCQQ
|
|||
|
{
|
|||
|
public class PCQQClient : QQBase
|
|||
|
{
|
|||
|
private void Close()
|
|||
|
{
|
|||
|
if (qqclient != null)
|
|||
|
{
|
|||
|
if (qqclient.User != null) qqclient.Logout();
|
|||
|
qqclient.LoginSuccessed -= Qqclient_LoginSuccessed;
|
|||
|
qqclient.LoginStatusChanged -= Qqclient_LoginStatusChanged;
|
|||
|
}
|
|||
|
this.UnRegisterEvent();
|
|||
|
qqclient = null;
|
|||
|
}
|
|||
|
public override void AutoLogin()
|
|||
|
{
|
|||
|
this.Login(base.QQ.ToString(), base.Password);
|
|||
|
}
|
|||
|
private void Qqclient_LoginStatusChanged(object sender, LoginStatusChangedQQEventArgs e)
|
|||
|
{
|
|||
|
var msg = $"{e.LoginStatus}-{e.Other}";
|
|||
|
if (msg.Contains("0836"))
|
|||
|
{
|
|||
|
qqclient.Login();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
this.IsLogin = (e.LoginStatus == LoginStatus.Login);
|
|||
|
if (!this.IsLogin) OnLog("状态修改为:" + e.Other);
|
|||
|
if (IsLogin) this.Nickname = this.qqclient.User.NickName;
|
|||
|
var x = new QQLoginChangeEvents(this, IsLogin, msg);
|
|||
|
ChatClient.QQPool.OnEvent(x);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void Qqclient_LoginSuccessed(object sender, LoginSuccessedQQEventArgs e)
|
|||
|
{
|
|||
|
var client = sender as QQClient;
|
|||
|
var x = new QQLoginChangeEvents(this, true, $"登陆成功!");
|
|||
|
ChatClient.QQPool.OnEvent(x);
|
|||
|
OnLog($"QQ:{(client == null ? string.Empty : client.User.NickName)}({(client == null ? 0 : client.User.QQ)}) 登陆成功!");
|
|||
|
}
|
|||
|
|
|||
|
internal QQPlus.Framework.QQClient qqclient { get; private set; }
|
|||
|
public bool IsUDP { get; private set; }
|
|||
|
public string Version { get; private set; }
|
|||
|
public void Login(string Username, string Userpass, string Version, bool IsUDP)
|
|||
|
{
|
|||
|
this.Version = Version;
|
|||
|
this.IsUDP = IsUDP;
|
|||
|
this.Login(Username, Userpass);
|
|||
|
}
|
|||
|
|
|||
|
public override void Logout()
|
|||
|
{
|
|||
|
this.Close();
|
|||
|
}
|
|||
|
|
|||
|
public override void Login(string Username, string Userpass)
|
|||
|
{
|
|||
|
uint QQ;
|
|||
|
if (string.IsNullOrEmpty(Username) || string.IsNullOrEmpty(Userpass) || !uint.TryParse(Username, out QQ)) throw new Exception("您输入的QQ或密码格式不正确!");
|
|||
|
this.Close();
|
|||
|
this.QQ = QQ;
|
|||
|
this.QQReLoginDic[QQ] = 0;//重置计时器
|
|||
|
this.Password = Userpass;
|
|||
|
qqclient = new QQPlus.Framework.QQClient(QQ, Userpass);
|
|||
|
qqclient.User.IsUdp = this.IsUDP;
|
|||
|
qqclient.Config.QQProtocol = this.Version;
|
|||
|
qqclient.LoginSuccessed += Qqclient_LoginSuccessed;
|
|||
|
qqclient.LoginStatusChanged += Qqclient_LoginStatusChanged;
|
|||
|
qqclient.Login();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
internal override void RegisterEvent()
|
|||
|
{
|
|||
|
if (qqclient != null && !IsRegisterEvent)
|
|||
|
{
|
|||
|
IsRegisterEvent = true;
|
|||
|
qqclient.LostConnection += Qqclient_LostConnection;
|
|||
|
qqclient.ReceiveNormalIM += Qqclient_ReceiveNormalIM;
|
|||
|
qqclient.ReceiveClusterIM += Qqclient_ReceiveClusterIM;
|
|||
|
qqclient.ReceiveTempIM += Qqclient_ReceiveTempIM;
|
|||
|
qqclient.AddMeFriend += Qqclient_AddMeFriend;
|
|||
|
qqclient.AddMeFriendNeedAuth += Qqclient_AddMeFriendNeedAuth;
|
|||
|
qqclient.AddedToCluster += Qqclient_AddedToCluster;
|
|||
|
//qqclient.AddToClusterNeedAuth += Qqclient_AddToClusterNeedAuth;
|
|||
|
qqclient.AddedToClusterInvite += Qqclient_AddedToClusterInvite;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// QQ群新人申请进群需要审核
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender"></param>
|
|||
|
/// <param name="e"></param>
|
|||
|
private void Qqclient_AddedToClusterInvite(object sender, AddedToClusterInviteQQEventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
//var evt = new QQNewGroupMemberEvents(this) { GroupId = e.Cluster.ExternalId, GroupName = e.Cluster.Name, Creator = e.Cluster.Creator, NewFriendQQ = e.ClusterMember.QQ, NewFriendNick = e.ClusterMember.Nick == null ? string.Empty : e.ClusterMember.Nick, OldFriendNick = e.ClusterMemberAdmin.Nick, OldFriendQQ = e.ClusterMemberAdmin.QQ };
|
|||
|
//ChatClient.QQPool.OnEvent(evt);
|
|||
|
var evt = new InviteAddClusterNeedAuthEvents(this) { GroupId = e.Cluster.ExternalId, GroupName = e.Cluster.Name, Creator = e.Cluster.Creator, NewFriendQQ = e.ClusterMember.QQ, NewFriendNick = e.ClusterMember.Nick == null ? string.Empty : e.ClusterMember.Nick, OldFriendNick = e.ClusterMemberAdmin.Nick, OldFriendQQ = e.ClusterMemberAdmin.QQ };
|
|||
|
ChatClient.QQPool.OnEvent(evt);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
this.OnLog($"Qqclient_AddedToClusterInvite Error:{ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 1视乎是通过群申请以后进这个事件
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender"></param>
|
|||
|
/// <param name="e"></param>
|
|||
|
private void Qqclient_AddedToCluster(object sender, AddedToClusterQQEventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var evt = new QQNewGroupMemberEvents(this) { GroupId = e.Cluster.ExternalId, GroupName = e.Cluster.Name, Creator = e.Cluster.Creator, NewFriendQQ = e.ClusterMember.QQ, NewFriendNick = e.ClusterMember.Nick == null ? string.Empty : e.ClusterMember.Nick, OldFriendNick = e.ClusterMemberAdmin.Nick, OldFriendQQ = e.ClusterMemberAdmin.QQ };
|
|||
|
ChatClient.QQPool.OnEvent(evt);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
this.OnLog($"Qqclient_AddedToCluster Error:{ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void Qqclient_AddMeFriend(object sender, AddMeFriendQQEventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var friend = qqclient.GetFriend(e.QQ);
|
|||
|
var evt = new QQNewFriendEvents(this) { QQ = e.QQ, Nickname = friend != null ? friend.NickName : string.Empty };
|
|||
|
ChatClient.QQPool.OnEvent(evt);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
this.OnLog($"Qqclient_AddMeFriend Error:{ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
///// <summary>
|
|||
|
///// 添加到集群需要验证
|
|||
|
///// </summary>
|
|||
|
///// <param name="sender"></param>
|
|||
|
///// <param name="e"></param>
|
|||
|
//private void Qqclient_AddToClusterNeedAuth(object sender, AddToClusterNeedAuthQQEventArgs e)
|
|||
|
//{
|
|||
|
// try
|
|||
|
// {
|
|||
|
// var evt = new QQAddToClusterNeedAuthEvents(this) { QQ = e.QQ, Message = e.Message, Cluster = e.Cluster };
|
|||
|
// ChatClient.QQPool.OnEvent(evt);
|
|||
|
// }
|
|||
|
// catch (Exception ex)
|
|||
|
// {
|
|||
|
// this.OnLog($"Qqclient_AddToClusterNeedAuth Error:{ex.Message}");
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
private void Qqclient_AddMeFriendNeedAuth(object sender, AddMeFriendNeedAuthQQEventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var evt = new QQAddMeNeedAuthEvents(this) { QQ = e.QQ, Nickname = e.Nick, Message = e.Message };
|
|||
|
ChatClient.QQPool.OnEvent(evt);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
this.OnLog($"Qqclient_AddMeFriendNeedAuth Error:{ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void Qqclient_ReceiveTempIM(object sender, ReceiveTempIMQQEventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var friend = qqclient.GetFriend(e.QQ);
|
|||
|
var temp = new QQReceiveFriendMsgEvents(this) { TempMsgID = e.ExternalId, QQ = e.QQ, Message = e.Message, Nickname = (friend == null ? string.Empty : friend.NickName) };
|
|||
|
ChatClient.QQPool.OnEvent(temp);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
this.OnLog($"Qqclient_ReceiveTempIM Error:{ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 记录QQ重新登录
|
|||
|
/// </summary>
|
|||
|
Dictionary<uint, int> QQReLoginDic = new Dictionary<uint, int>();
|
|||
|
|
|||
|
private void Qqclient_LostConnection(object sender, LostConnectionQQEventArgs e)
|
|||
|
{
|
|||
|
//看看是否有已登录的,并且自己还没有被移除
|
|||
|
var v = ChatClient.QQPool.QQClients.Where(f => f.Value.IsLogin);
|
|||
|
if (v != null && ChatClient.QQPool.QQClients.Values.Contains(this))
|
|||
|
{
|
|||
|
ChatClient.QQPool.OnEvent(new QQLostConnectionEvents(this, e.Message));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
internal override void UnRegisterEvent()
|
|||
|
{
|
|||
|
|
|||
|
if (qqclient != null && IsRegisterEvent)
|
|||
|
{
|
|||
|
IsRegisterEvent = false;
|
|||
|
qqclient.ReceiveClusterIM -= Qqclient_ReceiveClusterIM;
|
|||
|
qqclient.LostConnection -= Qqclient_LostConnection;
|
|||
|
qqclient.ReceiveNormalIM -= Qqclient_ReceiveNormalIM;
|
|||
|
qqclient.ReceiveTempIM -= Qqclient_ReceiveTempIM;
|
|||
|
qqclient.AddMeFriend -= Qqclient_AddMeFriend;
|
|||
|
qqclient.AddMeFriendNeedAuth -= Qqclient_AddMeFriendNeedAuth;
|
|||
|
qqclient.AddedToCluster -= Qqclient_AddedToCluster;
|
|||
|
//qqclient.AddToClusterNeedAuth -= Qqclient_AddToClusterNeedAuth;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private void Qqclient_ReceiveClusterIM(object sender, ReceiveClusterIMQQEventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (e.ClusterMember.QQ == this.QQ) return;
|
|||
|
var client = sender as QQClient;
|
|||
|
this.OnLog($"QQ({(client == null ? 0 : client.User.QQ)})->群消息->{e.ClusterMember.Nick}({e.ClusterMember.QQ})在[{e.Cluster.Name}({e.Cluster.ExternalId})]群说:{e.Message}");
|
|||
|
var temp = new QQReceiveGroupMsgEvents(this) { QQ = e.ClusterMember.QQ, Message = e.Message, Nickname = e.ClusterMember.Nick, GroupName = e.Cluster.Name, GroupId = e.Cluster.ExternalId };
|
|||
|
ChatClient.QQPool.OnEvent(temp);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
this.OnLog($"Qqclient_ReceiveNormalIM Error:{ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private void Qqclient_ReceiveNormalIM(object sender, ReceiveNormalIMQQEventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (e.QQ == this.QQ) return;
|
|||
|
var client = sender as QQClient;
|
|||
|
this.OnLog($"QQ({(client == null ? 0 : client.User.QQ)})->私消息->{string.Empty}({e.QQ})说:{e.Message}");
|
|||
|
var friend = qqclient.GetFriend(e.QQ);
|
|||
|
var temp = new QQReceiveFriendMsgEvents(this) { QQ = e.QQ, Message = e.Message, Nickname = (friend != null ? friend.NickName : string.Empty) };
|
|||
|
ChatClient.QQPool.OnEvent(temp);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
this.OnLog($"Qqclient_ReceiveNormalIM Error:{ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void AerifyAddMe(uint QQ, bool Agree)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (IsLogin) qqclient.AgreeFriendInvite(QQ, (byte)(Agree ? 4 : 5));
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
this.OnLog($"Qqclient_ReceiveNormalIM Error:{ex.Message}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
class QQMessagePack
|
|||
|
{
|
|||
|
private string content;
|
|||
|
List<string> needMessage;
|
|||
|
public QQMessagePack(string Message)
|
|||
|
{
|
|||
|
this.content = Message;
|
|||
|
this.needMessage = GetNeedMessage();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#region 返回一个随机表情
|
|||
|
private static string Expression = "[微笑],[憨笑],[呲牙],[爱心],[啤酒],[太阳],[礼物],[抱拳],[咖啡],[调皮],[激动],[回头],[色],[愉快],[爱情],[飞吻],[跳跳],[发抖],[转圈],[献吻],[耶],[红包],[嘿哈]";
|
|||
|
private static List<string> ExpressionList = null;
|
|||
|
private static Random random = new Random();
|
|||
|
public static string FindRandomExpression()
|
|||
|
{
|
|||
|
if (ExpressionList == null)
|
|||
|
ExpressionList = Expression.Split(',').ToList();
|
|||
|
return ExpressionList[random.Next(ExpressionList.Count)];
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
private List<string> GetNeedMessage()
|
|||
|
{
|
|||
|
List<string> _msgs = new List<string>();
|
|||
|
|
|||
|
if (string.IsNullOrEmpty(content)) return _msgs;
|
|||
|
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 message = msg.Trim();
|
|||
|
if (string.IsNullOrEmpty(message)) continue;
|
|||
|
|
|||
|
message = message.Contains("[随机表情]") ? message.Replace("[随机表情]", FindRandomExpression()) : message;
|
|||
|
|
|||
|
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}");
|
|||
|
//_msgs.Add(reg.Groups[1].Value);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//发送XML消息
|
|||
|
if (message.StartsWith("<appmsg appid=") && message.EndsWith("</appmsg>"))
|
|||
|
{
|
|||
|
_msgs.Add("暂不支持微信卡片消息!");
|
|||
|
}
|
|||
|
|
|||
|
//发送图片消息
|
|||
|
var matchs = Regex.Matches(message, @"\[图片\=([^\]]+)\]", RegexOptions.IgnoreCase);
|
|||
|
foreach (Match match in matchs)
|
|||
|
{
|
|||
|
_msgs.Add($"[image={ match.Groups[1].Value}]");
|
|||
|
}
|
|||
|
message = Regex.Replace(message, @"\[图片\=([^\]]+)\]", "");
|
|||
|
|
|||
|
//发送语音消息
|
|||
|
matchs = Regex.Matches(message, @"\[语音\=([^\]]+)\]", RegexOptions.IgnoreCase);
|
|||
|
foreach (Match item in matchs)
|
|||
|
{
|
|||
|
//暂不支持语音消息
|
|||
|
}
|
|||
|
message = Regex.Replace(message, @"\[语音\=([^\]]+)\]", "");
|
|||
|
|
|||
|
matchs = Regex.Matches(message, @"\[视频\=([^\]]+)\]", RegexOptions.IgnoreCase);
|
|||
|
foreach (Match item in matchs)
|
|||
|
{
|
|||
|
var video = Util.StrToHex(item.Groups[1].Value);
|
|||
|
if (video != null)
|
|||
|
{
|
|||
|
var video_json = Encoding.UTF8.GetString(video);
|
|||
|
var video_data = CsharpHttpHelper.HttpExtend.JsonToDictionary(video_json);
|
|||
|
if (video_data != null)
|
|||
|
{
|
|||
|
//暂不支持视频消息
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
message = Regex.Replace(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, @"\[卡片\=([^\]]+)\]", "");
|
|||
|
|
|||
|
if (string.IsNullOrEmpty(message)) continue;
|
|||
|
if (message.StartsWith("\r\n")) message = message.Substring("\r\n".Length);
|
|||
|
if (message.StartsWith("\n")) message = message.Substring("\n".Length);
|
|||
|
_msgs.Add(message);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
}
|
|||
|
return _msgs;
|
|||
|
}
|
|||
|
private int index = 0;
|
|||
|
public string NextMessage()
|
|||
|
{
|
|||
|
if (needMessage.Count == index) return string.Empty;
|
|||
|
string msg = needMessage[index];
|
|||
|
var reg = Regex.Match(msg, @"\[延迟=(\d+)\]");
|
|||
|
if (reg.Success)
|
|||
|
{
|
|||
|
Thread.Sleep(int.Parse(reg.Groups[1].Value) * 1000);
|
|||
|
}
|
|||
|
index++;
|
|||
|
return msg;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendFriendImage(uint QQ, string ImageSrc)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (qqclient != null) qqclient.SendMessage(QQ, $"[image={ImageSrc}]");
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendFriendMessage(uint QQ, string Message)
|
|||
|
{
|
|||
|
if (IsLogin)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
QQMessagePack pack = new QQMessagePack(Message);
|
|||
|
do
|
|||
|
{
|
|||
|
var msg = pack.NextMessage();
|
|||
|
if (string.IsNullOrEmpty(msg)) break;
|
|||
|
qqclient.SendMessage(QQ, msg);
|
|||
|
} while (true);
|
|||
|
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public override void SendGroupImage(uint GroupId, string ImageSrc)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (qqclient != null) qqclient.SendClusterMessage(GroupId, $"[image={ImageSrc}]");
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendGroupMessage(uint GroupId, string Message)
|
|||
|
{
|
|||
|
if (IsLogin)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
QQMessagePack pack = new QQMessagePack(Message);
|
|||
|
do
|
|||
|
{
|
|||
|
var msg = pack.NextMessage();
|
|||
|
if (string.IsNullOrEmpty(msg)) break;
|
|||
|
//this.OnLog($"准备发送{GroupId}-{Message}");
|
|||
|
qqclient.SendClusterMessage(GroupId, msg);
|
|||
|
} while (true);
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void SendTempMessage(uint QQ, string Message)
|
|||
|
{
|
|||
|
if (IsLogin)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
QQMessagePack pack = new QQMessagePack(Message);
|
|||
|
do
|
|||
|
{
|
|||
|
var msg = pack.NextMessage();
|
|||
|
if (string.IsNullOrEmpty(msg)) break;
|
|||
|
var result = qqclient.SendTempMessage(QQ, msg);
|
|||
|
Console.WriteLine("result = " + result);
|
|||
|
} while (true);
|
|||
|
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|