using Api.Framework.SDK; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WacheCheckUrl.Properties; using Chat.Framework; namespace WacheCheckUrl { public class Class1 : Plugin { public Class1() { this.Logo = Resources.检测; this.Name = "链接有效性"; this.Note = "检测链接有效性"; } public override void Start() { SDK.WebRequestEvent += SDK_WebRequestEvent; } private Dictionary dic = new Dictionary(); private void SDK_WebRequestEvent(object sender, Api.Framework.Events.WebRequestEvents e) { try { if (e.Param.ContainsKey("url")) { var url = e.Param["url"]; if (string.IsNullOrWhiteSpace(url)) throw new Exception("url不能为空"); var wxList = ChatClient.WXClient.Values.Where(f => f.Status == Chat.Framework.WXSdk.WxStatus.在线 && f.WeixinType == Chat.Framework.WXSdk.Implement.WeixinType.Hook微信).ToList(); if (wxList.Count > 0) { Random rd = new Random(Guid.NewGuid().GetHashCode()); int index = rd.Next(wxList.Count); var wx = wxList[index]; if (dic.ContainsKey(wx.WeixinHao)) { var sb = new StringBuilder(); sb.Append("重新获取开始->"); if (dic[wx.WeixinHao] > 6) { dic[wx.WeixinHao] = 0; } rd = new Random(Guid.NewGuid().GetHashCode()); if (wxList.Count > 1) { dic[wx.WeixinHao]++; while (true) { var indexTmp = rd.Next(wxList.Count); if (index != indexTmp) { index = indexTmp; sb.Append("重新获取成功A"); break; } } if (dic[wx.WeixinHao] > 4) { dic.Remove(wx.WeixinHao); } } else { sb.Append("重新获取成功B"); index = rd.Next(wxList.Count); } sb.Append("->结束"); this.OnLog($"{sb}"); wx = wxList[index]; } var strb = new StringBuilder(); var startTime = DateTime.Now; var status = wx.CheckUrl(url); var endTime = DateTime.Now; strb.AppendLine($"微信:{wx.User.Nick}({wx.User.Username})"); strb.AppendLine($"开始:{startTime}"); strb.AppendLine($"结束:{endTime}"); strb.AppendLine(); var totalSeconds = (endTime - startTime).TotalSeconds; strb.AppendLine($"间隔:{totalSeconds}"); strb.AppendLine($"{url} = {status}"); if (totalSeconds > 10) { if (!dic.ContainsKey(wx.WeixinHao)) { dic[wx.WeixinHao] = 0; } } this.OnLog($"{strb}"); e.Send("", status ? 1 : 0); } else throw new Exception("当前没有可用pc协议微信"); } } catch (Exception ex) { e.Send(ex.Message, -1); this.OnLog($"检测链接异常:{ex.Message} - {ex.StackTrace}"); } } public override void Stop() { SDK.WebRequestEvent -= SDK_WebRequestEvent; } } }