/// <summary> /// 取群成员信息。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnGetGroupMember_Click(object sender, RoutedEventArgs e) { CQGroupMemberInfo info = CQ.GetGroupMemberInfo(Convert.ToInt64(txtGroupNumber.Text), Convert.ToInt64(txtQQNumber.Text)); this.AddLog(String.Format("[{0}] [=][测试] QQ:{1} 的群名片:{2}, 入群时间:{3}, 最后发言:{4}", DateTime.Now, txtQQNumber.Text, info.GroupCard, info.JoinTime, info.LastSpeakingTime)); }
/// <summary> /// Type=2 群消息。 /// </summary> /// <param name="subType">子类型,目前固定为1。</param> /// <param name="sendTime">发送时间(时间戳)。</param> /// <param name="fromGroup">来源群号。</param> /// <param name="fromQQ">来源QQ。</param> /// <param name="fromAnonymous">来源匿名者。</param> /// <param name="msg">消息内容。</param> /// <param name="font">字体。</param> public override void GroupMessage(int subType, int sendTime, long fromGroup, long fromQQ, string fromAnonymous, string msg, int font) { //string Name = ""; //decimal Money = 0; //string UPUser = ""; //long QQ = 0, QQ2 = 0; //string Date; var groupMember = CQ.GetGroupMemberInfo(fromGroup, fromQQ); if (msg.Contains("搜索")) { CQ.SendGroupMessage(fromGroup, "正在搜索,请耐心等待。"); string URL = "https://www.bturl.cc/search/" + msg.Replace("搜索", "") + "_ctime_1.html"; try { System.Net.WebClient myWebClient = new System.Net.WebClient(); myWebClient.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 133; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CIBA; InfoPath.2)"); byte[] myDataBuffer = myWebClient.DownloadData(URL); string SourceCode = Encoding.GetEncoding("utf-8").GetString(myDataBuffer); string temp = SourceCode; string temp2 = GetPathPoints(temp, "/" + @"(\w{40})" + ".html"); CQ.SendGroupMessage(fromGroup, "magnet:?xt=urn:btih:" + temp2.Replace("/", "").Replace(".html", "")); } catch (Exception e) { CQ.SendGroupMessage(Group, "[查询失败]\r\n" + e.ToString()); } } }
/// <summary> /// Type=2 群消息。 /// </summary> /// <param name="subType">子类型,目前固定为1。</param> /// <param name="sendTime">发送时间(时间戳)。</param> /// <param name="fromGroup">来源群号。</param> /// <param name="fromQQ">来源QQ。</param> /// <param name="fromAnonymous">来源匿名者。</param> /// <param name="msg">消息内容。</param> /// <param name="font">字体。</param> public override void GroupMessage(int subType, int sendTime, long fromGroup, long fromQQ, string fromAnonymous, string msg, int font) { // 处理群消息。 var groupMember = CQ.GetGroupMemberInfo(fromGroup, fromQQ); CQ.SendGroupMessage(fromGroup, String.Format("[{4}]{0} 你的群名片:{1}, 入群时间:{2}, 最后发言:{3}。", CQ.CQ码_At(fromQQ), groupMember.GroupCard, groupMember.JoinTime, groupMember.LastSpeakingTime, CQ.ProxyType)); CQ.SendGroupMessage(fromGroup, String.Format("[{0}]{1}你发的群消息是:{2}", CQ.ProxyType, CQ.CQCode_At(fromQQ), msg)); }
private static string OBList(byte type, long fromGroup, long fromQQ) { Dictionary <long, List <long> > OBMap = type == 0 ? OBGroupMap : OBDiscussMap; if (OBMap.TryGetValue(fromGroup, out List <long> list) && list.Count > 0) { StringBuilder sb = new StringBuilder(); foreach (long qq in list) { var groupMember = CQ.GetGroupMemberInfo(fromGroup, qq); string nn = string.IsNullOrWhiteSpace(groupMember.GroupCard) ? groupMember.QQName : groupMember.GroupCard; sb.Append(nn).Append(" "); } return(string.Format("当前OB人数为{0},名单:{1}", list.Count, sb.ToString())); } return(string.Format("当前OB列表为空,还未有用户加入OB。")); }
/// <summary> /// Type=2 群消息。 /// </summary> /// <param name="subType">子类型,目前固定为1。</param> /// <param name="sendTime">发送时间(时间戳)。</param> /// <param name="fromGroup">来源群号。</param> /// <param name="fromQQ">来源QQ。</param> /// <param name="fromAnonymous">来源匿名者。</param> /// <param name="msg">消息内容。</param> /// <param name="font">字体。</param> public override void GroupMessage(int subType, int sendTime, long fromGroup, long fromQQ, string fromAnonymous, string msg, int font) { //string Name = ""; //decimal Money = 0; //string UPUser = ""; //long QQ = 0, QQ2 = 0; //string Date; Master master = new Master(); if (msg.Contains("%群搜索开") && fromQQ == master.QQ) { grouplist.Add(fromGroup); CQ.SendGroupMessage(fromGroup, "该群群搜索已开。"); } if (msg.Contains("%群搜索关") && fromQQ == master.QQ) { for (int i = grouplist.Count - 1; i >= 0; i--) { if (grouplist[i].Equals(fromGroup)) { grouplist.Remove(grouplist[i]); } } CQ.SendGroupMessage(fromGroup, "该群群搜索已关。"); } var groupMember = CQ.GetGroupMemberInfo(fromGroup, fromQQ); if (msg.Contains("%更改条数")) { bool IsNume = int.TryParse(msg.Replace("%更改条数", ""), out num); if (!IsNume) { num = 5; CQ.SendGroupMessage(fromGroup, "更改失败,请确认指令“%更改条数5”。\n搜索条数已还原回5条。"); } else if (num > 15 || num < 1) { num = 5; CQ.SendGroupMessage(fromGroup, "更改失败,请输入大于1小于15的数字。\n搜索条数已还原回5条。"); } else { CQ.SendGroupMessage(fromGroup, "搜索条数已更改为" + num + "条"); } } if (msg.Contains("%搜索")) { bool on = false; for (int i = grouplist.Count - 1; i >= 0; i--) { if (grouplist[i].Equals(fromGroup)) { on = true; break; } } if (!on) { CQ.SendGroupMessage(fromGroup, "该群群搜索已关。"); return; } CQ.SendGroupMessage(fromGroup, "少女祈祷中……"); string URL = "https://www.bturl.cc/search/" + msg.Replace("%搜索", "") + "_click_1.html"; try { System.Net.WebClient myWebClient = new System.Net.WebClient(); myWebClient.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 133; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CIBA; InfoPath.2)"); byte[] myDataBuffer = myWebClient.DownloadData(URL); string SourceCode = Encoding.GetEncoding("utf-8").GetString(myDataBuffer); string temp = SourceCode; for (int i = 0; i < num; i++) { string magnet = GetPathPoints(temp, "/" + @"(\w{40})" + ".html", i); if (magnet != null) { CQ.SendGroupMessage(fromGroup, "magnet:?xt=urn:btih:" + magnet.Replace("/", "").Replace(".html", "")); OutOfNumber = true; } } } catch (Exception e) { if (!OutOfNumber) { CQ.SendGroupMessage(Group, "[查询失败]\r\n" + e.ToString()); } } if (!OutOfNumber) { CQ.SendPrivateMessage(fromQQ, "无结果"); } OutOfNumber = false; } }
/// <summary> /// 接收群消息 /// </summary> /// <param name="fromQQ"></param> /// <param name="fromGroup"></param> /// <param name="message"></param> /// <returns></returns> public static string ReceivedGroupMessage(long fromQQ, long fromGroup, string message) { try { message = message.Trim(' '); if (string.IsNullOrWhiteSpace(message)) { return(null); } int index = message.ToLower().IndexOf(".rh"); if (index >= 0) { return(help); } index = message.ToLower().IndexOf(".r"); if (index >= 0) { var groupMember = CQ.GetGroupMemberInfo(fromGroup, fromQQ); string nickname = string.IsNullOrWhiteSpace(groupMember.GroupCard) ? groupMember.QQName : groupMember.GroupCard; return(Roll(message, index, nickname)); } index = message.ToLower().IndexOf(".ww"); if (index >= 0) { var groupMember = CQ.GetGroupMemberInfo(fromGroup, fromQQ); string nickname = string.IsNullOrWhiteSpace(groupMember.GroupCard) ? groupMember.QQName : groupMember.GroupCard; return(WW(message, index, nickname)); } index = message.ToLower().IndexOf(".f"); if (index >= 0) { var groupMember = CQ.GetGroupMemberInfo(fromGroup, fromQQ); string nickname = string.IsNullOrWhiteSpace(groupMember.GroupCard) ? groupMember.QQName : groupMember.GroupCard; return(Fata(message, index, nickname)); } index = message.ToLower().IndexOf(".oblist"); if (index >= 0) { return(OBList(0, fromGroup, fromQQ)); } index = message.ToLower().IndexOf(".clob"); if (index >= 0) { return(CLOB(0, fromGroup, fromQQ)); } index = message.ToLower().IndexOf(".exob"); if (index >= 0) { var groupMember = CQ.GetGroupMemberInfo(fromGroup, fromQQ); string nickname = string.IsNullOrWhiteSpace(groupMember.GroupCard) ? groupMember.QQName : groupMember.GroupCard; return(EXOB(0, fromGroup, fromQQ, nickname)); } index = message.ToLower().IndexOf(".ob"); if (index >= 0) { var groupMember = CQ.GetGroupMemberInfo(fromGroup, fromQQ); string nickname = string.IsNullOrWhiteSpace(groupMember.GroupCard) ? groupMember.QQName : groupMember.GroupCard; return(ADDOB(0, fromGroup, fromQQ, nickname)); } } catch (Exception ex) { Console.WriteLine(ex.StackTrace); return(ErrorMessage); } return(null); }
// // Summary: // 取群成员信息。 // 多线程同步等待,采用阻塞线程的方式等待客户端返回群成员信息,响应时间较慢,建议使用缓存。 // 缓存时长1天,超过1天的成员,在下次访问时会通过酷Q重新获取最新信息。 // // Parameters: // groupNumber: // 群号码。 // // qqNumber: // 被操作的QQ号码。 // // cache: // 是否使用缓存(使用缓存后,当后第一次访问会通过客户端读取,之后每次都通过缓存获得)。 public static CQGroupMemberInfo GetGroupMemberInfo(long groupNumber, long qqNumber, bool cache = true) { return(CQ.GetGroupMemberInfo(groupNumber, qqNumber, cache)); }