340 lines
20 KiB
C#
340 lines
20 KiB
C#
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<Config>();
|
|
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);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 字符串转换成平台类型(ChatType)
|
|
/// </summary>
|
|
/// <param name="chattype"></param>
|
|
/// <returns></returns>
|
|
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<Object> _robots = new List<object>();
|
|
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)
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|