using Api.Framework; using Api.Framework.Events; using Api.Framework.Model; using Api.Framework.SDK; using Chat.Framework; using Chat.Framework.WXSdk; using Chat.Framework.WXSdk.Implement; using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using UI.Framework.Forms; using WebTools.Properties; using Plugin = Api.Framework.SDK.Plugin; namespace WebTools { public class Class1 : Plugin { public Class1() { this.Name = Resources.PluginName; this.Note = Resources.PluginNote; this.Logo = Resources.web工具; } #region 自定义变量 public static Config Config; #endregion public override void Start() { try { var session = ApiClient.GetSession(); //创建配置文件 Config = this.ReadConfig(); SDK.WebRequestEvent += SDK_WebRequestEvent; } catch (Exception ex) { this.OnLog(ex.Message); } } public override void ShowForm() { try { //Clipboard.SetDataObject("https://docs.qq.com/doc/DWkNod0luR29acExG"); Clipboard.SetDataObject("https://docs.qq.com/doc/DWlRVYWxTY1dHc01B"); BaseForm.ShowSuccessAutoClose("已经复制使用说明地址,请到本机浏览器粘贴查看!"); } catch (Exception ex) { this.OnLog(ex.Message); } } /// /// 字符串转换成平台类型(ChatType) /// /// /// private ChatType ConvertChatType(string chattype) { //wechat|QQ|wempchat //微信,QQ,微信公众号 chattype = chattype.Trim().ToLower(); if ("wechat" == chattype) return ChatType.微信; //if ("workwechat" == chattype) // return ChatType.企业微信; else if ("qq" == chattype) return ChatType.QQ; //else if ("wempchat" == chattype) // return ChatType.微信公众号; new Exception("账号类型不存在.类型包含(wechat)"); return ChatType.未知来源; } private void SDK_WebRequestEvent(object sender, WebRequestEvents e) { try { #region if (e.Param.ContainsKey("method"))//方法名称 { var method = e.Param["method"].ToLower(); switch (method) { case "getrobots"://获取机器人状态 { var session = ApiClient.GetSession(); var robots = session.FindRobots(true); var wxBases = ChatClient.WXClient.Values.Where(f => f.Status == WxStatus.在线); //var qqBases = Chat.Framework.ChatClient.QQPool.QQClients.Values; List _robots = new List(); foreach (var robot in robots) { if (robot.type == ChatType.微信 || robot.type == ChatType.企业微信) { var _robot = wxBases.FirstOrDefault(f => f.WeixinHao == robot.name); _robots.Add(new { name = robot.name, nick = robot.nick, type = robot.type.ToString(), status = _robot == null ? "未登录" : _robot.Status.ToString() }); } } e.Send(CsharpHttpHelper.HttpHelper.ObjectToJson(_robots), 200); } break; case "getgroupinfo"://获取群信息 { try { if (!e.Param.ContainsKey("robotname") || string.IsNullOrWhiteSpace(e.Param["robotname"])) throw new Exception("缺少参数robotname或者参数robotname值为空"); //if (!e.Param.ContainsKey("chattype") || string.IsNullOrWhiteSpace(e.Param["chattype"])) throw new Exception("缺少参数chattype或者参数chattype值为空.类型包含(wechat)"); if (!e.Param.ContainsKey("groupid") || string.IsNullOrWhiteSpace(e.Param["groupid"])) throw new Exception("缺少参数groupid或者参数groupid值为空"); //var type = e.Param["chattype"]; //机器人类型 var chatType = ChatType.微信;//ConvertChatType(type); var robotname = e.Param["robotname"]; //机器人账号 var groupid = e.Param["groupid"]; //群id var session = ApiClient.GetSession(); switch (chatType) { case ChatType.微信: { var wxBase = Chat.Framework.ChatClient.WXClient.Values.FirstOrDefault(f => f.WeixinType == Chat.Framework.WXSdk.Implement.WeixinType.Grpc微信 && f.WeixinHao.Trim() == robotname.Trim() && f.Status == Chat.Framework.WXSdk.WxStatus.在线); if (wxBase == null) throw new Exception($"{robotname}机器人不存在或为离线状态"); var groupinfo = wxBase.GetContact(groupid, true); if (groupinfo == null || string.IsNullOrWhiteSpace(groupinfo.ExtInfo)) throw new Exception($"没有获取到{robotname}机器人{groupid}群信息"); var result = new { groupname = groupinfo.NickName, groupid = groupinfo.UserName, creator = groupinfo.ChatRoomOwner, membercount = groupinfo.ExtInfo.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Length, memberlist = groupinfo.ExtInfo }; e.Send(result, 200); } break; case ChatType.微信公众号: { throw new Exception("开发中..."); } case ChatType.未知来源: default: throw new Exception("未知错误"); //break; } } catch (Exception ex) { e.Send(ex.Message); } } break; case "sendmsg"://发送消息 { try { if (!e.Param.ContainsKey("robotname") || string.IsNullOrWhiteSpace(e.Param["robotname"])) throw new Exception("缺少参数robotname或者参数robotname值为空"); //if (!e.Param.ContainsKey("chattype") || string.IsNullOrWhiteSpace(e.Param["chattype"])) throw new Exception("缺少参数chattype或者参数chattype值为空.类型包含(wechat)"); if (!e.Param.ContainsKey("touser") || string.IsNullOrWhiteSpace(e.Param["touser"])) throw new Exception("缺少参数touser或者参数touser值为空"); //if (!e.Param.ContainsKey("msgtype") || string.IsNullOrWhiteSpace(e.Param["msgtype"])) throw new Exception("缺少参数msgtype或者参数msgtype值为空.类型包含(q|s)"); if (!e.Param.ContainsKey("msg") || string.IsNullOrWhiteSpace(e.Param["msg"])) throw new Exception("缺少参数msg或者参数msg值为空"); //var type = e.Param["chattype"]; //机器人类型 var chatType = ChatType.微信;// ConvertChatType(type); //var msgtype = e.Param["msgtype"]; //if (msgtype != "q" && msgtype != "s") throw new Exception("msgtype值有误.类型包含(q|s)"); var robotname = e.Param["robotname"]; //机器人账号 var touser = e.Param["touser"]; //发送给谁 var msg = e.Param["msg"]; //发送内容 var session = ApiClient.GetSession(); switch (chatType) { case ChatType.微信: { var wxBase = ChatClient.WXClient.Values.FirstOrDefault(f => /*f.WeixinType == WeixinType.Grpc微信 &&*/ f.WeixinHao.Trim() == robotname.Trim() && f.Status == WxStatus.在线); if (wxBase == null) throw new Exception($"{robotname}机器人不存在或为离线状态"); wxBase.SendMessage(touser, msg); e.Send("执行成功", 200); } break; case ChatType.微信公众号: throw new Exception("开发中..."); case ChatType.未知来源: default: throw new Exception("未知错误"); } } catch (Exception ex) { e.Send(ex.Message); } } break; case "groupinvitemember"://邀请入群 { try { if (!e.Param.ContainsKey("robotname") || string.IsNullOrWhiteSpace(e.Param["robotname"])) throw new Exception("缺少参数robotname或者参数robotname值为空"); //if (!e.Param.ContainsKey("chattype") || string.IsNullOrWhiteSpace(e.Param["chattype"])) throw new Exception("缺少参数chattype或者参数chattype值为空.类型包含(wechat|workwechat)"); if (!e.Param.ContainsKey("username") || string.IsNullOrWhiteSpace(e.Param["username"])) throw new Exception("缺少参数username或者参数username值为空"); if (!e.Param.ContainsKey("groupid") || string.IsNullOrWhiteSpace(e.Param["groupid"])) throw new Exception("缺少参数groupid或者参数groupid值为空"); //var type = e.Param["chattype"]; //机器人类型 var chatType = ChatType.微信;//ConvertChatType(type); var robotname = e.Param["robotname"]; //机器人账号 var username = e.Param["username"]; //入群用户账号 var groupid = e.Param["groupid"]; //群id var session = ApiClient.GetSession(); switch (chatType) { case ChatType.微信: { var wx = ChatClient.WXClient.FirstOrDefault(f => f.Key == robotname).Value; if (wx != null && wx.Status == WxStatus.在线) { var ipad = wx; var result = ipad.InviteIntoGroup(username, groupid); e.Send($"执行成功", 200); } else throw new Exception($"{robotname}机器人不存在或为离线状态"); } break; case ChatType.微信公众号: throw new Exception("开发中..."); //break; case ChatType.未知来源: default: throw new Exception("未知错误"); //break; } } catch (Exception ex) { e.Send(ex.Message); } } break; case "groupexit"://退出群 { try { if (!e.Param.ContainsKey("robotname") || string.IsNullOrWhiteSpace(e.Param["robotname"])) throw new Exception("缺少参数robotname或者参数robotname值为空"); //if (!e.Param.ContainsKey("chattype") || string.IsNullOrWhiteSpace(e.Param["chattype"])) throw new Exception("缺少参数chattype或者参数chattype值为空.类型包含(wechat|workwechat)"); if (!e.Param.ContainsKey("groupid") || string.IsNullOrWhiteSpace(e.Param["groupid"])) throw new Exception("缺少参数groupid或者参数groupid值为空"); //var type = e.Param["chattype"]; //机器人类型 var chatType = ChatType.微信;//ConvertChatType(type); var robotname = e.Param["robotname"]; //机器人账号 var groupid = e.Param["groupid"]; //群id var session = ApiClient.GetSession(); switch (chatType) { case ChatType.微信: { var wx = ChatClient.WXClient.FirstOrDefault(f => f.Key == robotname).Value; if (wx != null && wx.WeixinType == WeixinType.Grpc微信 && wx.Status == Chat.Framework.WXSdk.WxStatus.在线) { var ipad = wx as WXClientImpl_IPAD; e.Send($"执行成功", 200); } else throw new Exception($"{robotname}机器人不存在或为离线状态"); } break; case ChatType.微信公众号: throw new Exception("开发中..."); case ChatType.未知来源: default: throw new Exception("未知错误"); } } catch (Exception ex) { e.Send(ex.Message); } } break; case "refreshcontact"://更新联系人 { try { if (!e.Param.ContainsKey("robotname") || string.IsNullOrWhiteSpace(e.Param["robotname"])) throw new Exception("缺少参数robotname或者参数robotname值为空"); //if (!e.Param.ContainsKey("chattype") || string.IsNullOrWhiteSpace(e.Param["chattype"])) throw new Exception("缺少参数chattype或者参数chattype值为空.类型包含(wechat|workwechat)"); //var type = e.Param["chattype"]; //机器人类型 var chatType = ChatType.微信;//ConvertChatType(type); var robotname = e.Param["robotname"]; //机器人账号 var session = ApiClient.GetSession(); switch (chatType) { case ChatType.微信: { var wx = ChatClient.WXClient.FirstOrDefault(f => f.Key == robotname).Value; if (wx != null && wx.WeixinType == WeixinType.Grpc微信 && wx.Status == Chat.Framework.WXSdk.WxStatus.在线) { var ipad = wx as WXClientImpl_IPAD; ipad.Initialization(); ipad.RefreshContact(); e.Send($"执行成功", 200); } else throw new Exception($"{robotname}机器人不存在或为离线状态"); } break; case ChatType.微信公众号: throw new Exception("开发中..."); case ChatType.未知来源: default: throw new Exception("未知错误"); } } catch (Exception ex) { e.Send(ex.Message); } } break; default: break; } } #endregion } catch (Exception ex) { } } } }