old_flsystem/应用/监听违规/Class1.cs

340 lines
15 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Api.Framework;
using Api.Framework.Model;
using Api.Framework.SDK;
using Api.Framework.Tools;
using Chat.Framework;
using Chat.Framework.WXSdk.Implement;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using .Entitys;
using .Properties;
namespace
{
public class Class1 : Plugin
{
public Class1()
{
this.Name = "维护工具";
this.Note = "维护工具";
this.Logo = Resources._3;
}
#region
public static Config Config;
private MainForm mainForm = null;
#endregion
public override void Start()
{
try
{
var session = ApiClient.GetSession();
#region
if (!session.TableExist<UserLists_db>())
{
session.CreateTable<UserLists_db>();
session.AddIndex<UserLists_db>("wxid");//增加索引.以后数据多了.查询速度会比较快
session.AddUnique<UserLists_db>("wxid");//增加唯一约束
}
#endregion
//创建配置文件
Config = this.ReadConfig<Config>();
SDK.ReciveIMEvent += SDK_ReciveIMEvent;
}
catch (Exception ex)
{
this.OnLog(ex.Message);
}
}
private List<string> GetSplit(string str)
{
if (string.IsNullOrWhiteSpace(str)) return null;
try
{
return str.Replace("", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
}
catch (Exception ex)
{
this.OnLog(ex.Message);
}
return null;
}
private string Reg_CheckIsUrl = @"(?<链接>((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)";
private void SDK_ReciveIMEvent(object sender, ReciveIMEvent e)
{
if (!string.IsNullOrWhiteSpace(e.Groupid))
{
if (Regex.IsMatch(e.Message.Trim(), @"<msg>(\s*)?<emoji(.+)</msg>") || (e.Message.Trim().StartsWith(@"<?xml version=") && Regex.IsMatch(e.Message.Trim(), @"<emoticonmd5>(.*?)</emoticonmd5>"))) return;
var session = ApiClient.GetSession();
//var white = session.FindSingle<UserLists_db>("wxid = @wxid and user_type", new { wxid = e.Username, user_type = UserType.白名单 });
if (Common.IsWhite(e.Username))
return;
Task.Run(() =>
{
var db = ApiClient.GetSession();
try
{
var client = e.Sender as WeixinBase;
if (client == null) return;
var black = db.FindSingle<UserLists_db>("wxid = @wxid and user_type", new { wxid = e.Username, user_type = UserType. });
if (black != null)
{
Action(e, client, false);
this.OnLog($"{e.NickName}({e.Username}) 发送消息的用户为黑名单,踢出");
var member = e.GetMemberinfo();
if (member != null)
{
member.status = Api.Framework.Enums.MemberType.;
//e.SendMessage(new VariateReplace().CommonReplace(Config.expelmess, e.GetMemberinfo(), e.RobotInfo));
db.SaveOrUpdate(member);
var user = db.FindSingle<UserLists_db>("wxid = @wxid", new { wxid = e.Username });
if (user == null)
db.Insertable(new UserLists_db() { user_type = UserType., wxid = e.Username, nick_name = e.NickName }).ExecuteCommand();
}
return;
}
#region
if (Config.is_nickkey)
{
var list = GetSplit(Config.nickkey);
if (list != null && list.FirstOrDefault(f => e.NickName.Contains(f)) != null)
{
Action(e, client, false);
//e.SendMessage(new VariateReplace().CommonReplace(Config.expelmess, e.GetMemberinfo(), e.RobotInfo));
return;
}
}
#endregion
#region
if (Config.is_messkey && !e.Message.StartsWith(@"<?xml version=") && !e.Message.StartsWith("[图片=") && !e.Message.StartsWith("[视频="))
{
var list = GetSplit(Config.messkey);
if (list != null && list.FirstOrDefault(f => e.Message.Contains(f)) != null)
{
Action(e, client);
this.OnLog($"{e.NickName}({e.Username}) 发送的消息包含关键词,踢出");
return;
}
}
#endregion
if (!e.Message.Trim().StartsWith(@"<?xml version=", StringComparison.OrdinalIgnoreCase) && !e.Message.Trim().StartsWith("[图片=") && !e.Message.StartsWith("[视频=") && !e.Message.Trim().StartsWith("<msg>", StringComparison.OrdinalIgnoreCase) && !e.Message.Trim().EndsWith("</msg>", StringComparison.OrdinalIgnoreCase))
{
#region
var rows = e.Message.Split('\n').Length;
if (Config.is_messrows && rows >= Config.messrows)
{
Action(e, client);
this.OnLog($"{e.NickName}({e.Username}) 发送的消息行数大于{Config.messrows},踢出");
return;
}
#endregion
#region
if (Config.is_messwords && e.Message.Trim().Length >= Config.messwords)
{
Action(e, client);
this.OnLog($"{e.NickName}({e.Username}) 发送的消息字数大于{Config.messwords},踢出");
return;
}
#endregion
}
#region
if (Config.is_link && ((e.Message.Contains(@"<appmsg appid=") && e.Message.StartsWith(@"<?xml version=")) || Regex.IsMatch(e.Message.Replace("&amp;", "&"), @"(?<链接>((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)")))
{
Action(e, client);
this.OnLog($"{e.NickName}({e.Username}) 发送连接或小程序,踢出");
return;
}
#endregion
#region
if (Config.is_card)
{
if (Regex.IsMatch(e.Message, @"^<\?xml version=.+antispamticket=(.+) />$"))
{
Action(e, client);
this.OnLog($"{e.NickName}({e.Username}) 发送名片,踢出");
return;
}
}
#endregion
#region
if (Config.is_qrcord)
{
//var regs = Regex.Matches(e.Message, Reg_CheckIsUrl);
//if (regs.Count != 0)
//{
// foreach (Match reg in regs)
// {
// var link = reg.Groups["链接"].Value;
// Bitmap img = null;
// Image mainpic = null;
// try
// {
// string imagePath = string.Empty;
// try
// {
// mainpic = null;
// imagePath = Util.MapFile(DateTime.Now.Ticks.ToString() + ".jpg", "Cache\\image");
// if (!link.StartsWith("http")) link = "http:" + link;
// mainpic = FileTools.DownloadImage(link, imagePath);
// img = new Bitmap(mainpic);
// var QRCodeData = Util.DecodeQRCode(img);//解析机器人二维码,获取到二维码的链接
// if (!string.IsNullOrWhiteSpace(QRCodeData))
// {
// client.DeleteGroupMember(e.Username, e.Groupid);
// return;
// }
// }
// catch (Exception ex)
// {
// throw new Exception($"读取文件异常:图片路径 = {imagePath} .{ex.Message} - {ex.StackTrace}");
// }
// if (mainpic == null) throw new Exception($"下载失败url = {link}");
// }
// catch (Exception)
// {
// if (img != null) img.Dispose();
// if (mainpic != null) mainpic.Dispose();
// }
// }
//}
var reg = Regex.Match(e.Message, @"\[图片=(.+?)\]");
if (reg.Success)
{
var file = reg.Groups[1].Value;
if (!File.Exists(file)) return;
Bitmap img = null;
//Image mainpic = null;
try
{
string imagePath = string.Empty;
try
{
//mainpic = null;
//imagePath = Util.MapFile(DateTime.Now.Ticks.ToString() + ".jpg", "Cache\\image");
//if (!link.StartsWith("http")) link = "http:" + link;
//mainpic = FileTools.DownloadImage(link, imagePath);
//img = new Bitmap(mainpic);
img = Util.ReadImageFile(file);
var QRCodeData = Util.DecodeQRCode(img);//解析机器人二维码,获取到二维码的链接
if (!string.IsNullOrWhiteSpace(QRCodeData))
{
//client.DeleteGroupMember(e.Username, e.Groupid);
//e.SendMessage(new VariateReplace().CommonReplace(Config.expelmess, e.GetMemberinfo(), e.RobotInfo));
Action(e, client);
this.OnLog($"{e.NickName}({e.Username}) 发送的图片中带有二维码,踢出");
return;
}
}
catch (Exception ex)
{
throw new Exception($"读取文件异常:图片路径 = {imagePath} .{ex.Message} - {ex.StackTrace}");
}
//if (mainpic == null) throw new Exception($"下载失败url = {link}");
}
catch (Exception)
{
if (img != null) img.Dispose();
//if (mainpic != null) mainpic.Dispose();
}
//}
}
}
#endregion
}
catch (Exception ex)
{
this.OnLog(ex.Message);
}
});
}
}
public void Action(ReciveIMEvent e, WeixinBase client, bool isSend = true)
{
try
{
string key = "fl_jianting_key_" + e.Username;
var falg = ApiClient.Cache.Get<string>(key);
if (!string.IsNullOrWhiteSpace(falg)) return;
client.DeleteGroupMember(e.Username, e.Groupid);
if (isSend)
e.SendMessage(new VariateReplace().CommonReplace(Config.expelmess, e.GetMemberinfo(), e.RobotInfo));
ApiClient.Cache.Set(key, "1", 2);
}
catch (Exception ex)
{
this.OnLog("缓存异常:" + ex.Message);
}
}
public override void ShowForm()
{
try
{
if (mainForm == null || mainForm.IsDisposed)
{
mainForm = new MainForm();
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);
}
}
}
}