old_flsystem/应用/FissionSend/Class1.cs

241 lines
9.3 KiB
C#
Raw Permalink Normal View History

2022-09-20 03:10:29 +00:00
using Api.Framework.SDK;
using Chat.Framework.WXSdk;
using Chat.Framework.WXSdk.Implement;
using CsharpHttpHelper;
using FissionSend.Properties;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace FissionSend
{
public class Class1 : Plugin
{
public Class1()
{
this.Name = "裂变-辅助发送";
this.Note = "随便啦";
this.Logo = Resources.bbbbbbbb;
}
#region
public static Config Config;
private Form1 mainForm = null;
#endregion
#region
public override void Start()
{
Config = this.ReadConfig<Config>();
SDK.WebRequestEvent += SDK_WebRequestEvent;
SDK.ReciveIMEvent += SDK_ReciveIMEvent;
}
public override void ShowForm()
{
try
{
if (mainForm == null || mainForm.IsDisposed)
{
mainForm = new Form1();
mainForm.Show();
}
mainForm.TopMost = true;
mainForm.TopMost = false;
}
catch (Exception ex)
{
this.OnLog(ex.Message);
}
}
public override void Stop()
{
try
{
if (mainForm != null)
{
mainForm.CloseForm();
mainForm = null;
}
}
catch (Exception ex)
{
this.OnLog(ex.Message);
}
}
#endregion
private ConcurrentDictionary<string, string> groupDic = new ConcurrentDictionary<string, string>();
private void SDK_ReciveIMEvent(object sender, ReciveIMEvent e)
{
//try
//{
// if (!string.IsNullOrWhiteSpace(e.Groupid))
// {
// if (!groupDic.ContainsKey(e.Groupid))
// {
// groupDic.TryAdd(e.Groupid, e.Groupid);
// if (sender.GetType() == typeof(WXClientImpl_HOOK))
// {
// var hook = sender as WXClientImpl_HOOK;
// if (hook == null) return;
// var group = hook.GetContact(e.Groupid);
// this.OnLog($"添加群缓存 {e.Groupid} - {(group == null ? string.Empty : group.NickName)} ,当前群数量:{groupDic.Count}");
// }
// else this.OnLog($"添加群缓存 {e.Groupid},当前群数量:{groupDic.Count}");
// }
// }
//}
//catch (Exception ex)
//{
// this.OnLog(ex.Message);
//}
}
private void SDK_WebRequestEvent(object sender, Api.Framework.Events.WebRequestEvents e)
{
var method = e.Param.ContainsKey("method") ? e.Param["method"] : string.Empty;
if (string.IsNullOrWhiteSpace(method)) return;
if (method.ToLower() != "fission") return;
var text = string.Empty;
var min = 0;
var max = 0;
var sleepmin = 5000;
var sleepmax = 40000;
var groups = string.Empty;
try
{
if (e.Param.ContainsKey("text"))//方法名称
{
text = e.Param["text"].Trim();
text = HttpHelper.URLEncode(text);
text = HttpHelper.URLDecode(text, Encoding.UTF8);
}
if (e.Param.ContainsKey("min"))//方法名称
min = getInt(e.Param["min"]);
if (e.Param.ContainsKey("max"))//方法名称
max = getInt(e.Param["max"]);
if (e.Param.ContainsKey("sleepmin"))
sleepmin = getInt(e.Param["sleepmin"]) * 1000;
if (e.Param.ContainsKey("sleepmax"))
sleepmax = getInt(e.Param["sleepmax"]) * 1000;
if (e.Param.ContainsKey("groups"))
groups = e.Param["groups"];
if (string.IsNullOrWhiteSpace(text)) throw new Exception("发送的内容不能为空");
if (min <= 0) throw new Exception("min不能小于不能零");
if (max <= 0) throw new Exception("max不能小于等于零");
if (min > max) throw new Exception("min的值不能比max大");
if (sleepmin > sleepmax) throw new Exception("sleepmin的值不能比sleepmax大");
//e.Send("OK");
}
catch (Exception ex)
{
this.OnLog(ex.Message);
e.Send("异常:" + ex.Message, -1);
return;
}
try
{
var wxs = Chat.Framework.ChatClient.WXClient.Values.Where(f => f.WeixinType == WeixinType.Hook微信 && f.Status == WxStatus.线);
if (wxs == null || wxs.Count() == 0) throw new Exception("没有可执行的机器人");
var count = wxs.Count();
//if (groupDic.Count == 0)
//{
// var groupInfos = (wxs.ToArray()[0] as WXClientImpl_HOOK).GetGroupsNotInMember();
// if (groupInfos == null || groupInfos.Count == 0)
// throw new Exception("群缓存列表为空");
// foreach (var item in groupInfos)
// {
// if (!groupDic.ContainsKey(item.UserName))
// {
// groupDic.TryAdd(item.UserName, item.UserName);
// this.OnLog($"添加群缓存 {item.UserName} - {item.NickName} ,当前群数量:{groupDic.Count}");
// }
// }
//}
var _list = new List<string>();
if (string.IsNullOrWhiteSpace(groups))
//_list = groupDic.Keys.ToList();
_list = Config.SendGroups.Replace("", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).Where(f => f.EndsWith("@chatroom")).ToList();
else
_list = groups.Replace("", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).Where(f => f.EndsWith("@chatroom")).ToList();
//if (string.IsNullOrWhiteSpace(Config.SendGroups)) throw new Exception("没有设置要发送群id");
//var _list = Config.SendGroups.Replace("", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).Where(f => f.EndsWith("@chatroom")).ToList();
e.Send(_list.Count);
foreach (var group in _list)
{
//if (notSendGroups.Contains(group)) continue;
var textMsg = text;
var groupTemp = group;
Task.Run(() =>
{
try
{
var num = getnum(count, min, max);
var _wxs = wxs.ToList().Select(a => new { a, newID = Guid.NewGuid() }).OrderBy(b => b.newID).Select(c => c.a).Distinct().ToList();//打乱顺序
_wxs = _wxs.GetRange(0, num);
var sendUCache = new List<string>();//缓存已经发送的账号
foreach (var wx in _wxs)
{
if (sendUCache.Contains(wx.WeixinHao)) continue;
sendUCache.Add(wx.WeixinHao);
wx.SendMessage(groupTemp, textMsg);
this.OnLog($"群:{groupTemp},微信数量:{_wxs.Count}, 机器人:{wx.User.Username}({wx.User.Nick})({wx.User.Uin}),发送内容:text={textMsg} 已经发送");
Thread.Sleep(new Random(Guid.NewGuid().GetHashCode()).Next(sleepmin, sleepmax));
}
}
catch (Exception ex)
{
this.OnLog("!!" + ex.Message);
}
});
Thread.Sleep(10);
}
}
catch (Exception ex)
{
this.OnLog(ex.Message);
e.Send(ex, -1);
}
}
private int getnum(int count, int min, int max)
{
var num = 0;//执行的数量
var random = new Random(Guid.NewGuid().GetHashCode());
if (count >= max)//随机获取min max的区间值
num = random.Next(min, max);
else if (count <= min)//执行count数量
num = count;
else//随机获取min count的区间值
num = random.Next(min, count);
return num;
}
private int getInt(string intStr)
{
int result = 0;
int.TryParse(intStr, out result);
return result;
}
}
}