old_flsystem/应用/FissionData/Class1.cs

245 lines
10 KiB
C#
Raw Permalink Normal View History

2022-09-20 03:10:29 +00:00
using Api.Framework;
using Api.Framework.SDK;
using Api.Framework.Tools;
using Chat.Framework.WXSdk.Implement;
using FissionData.Properties;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace FissionData
{
public class Class1 : Plugin
{
public Class1()
{
this.Name = "裂变数据";
this.Note = "随便啦";
this.Logo = Resources.aaaaaaa;
}
#region
public static Config Config;
private MainForm mainForm = null;
// public static VariateReplace variateReplace = null;
#endregion
#region
public override void Start()
{
try
{
var session = ApiClient.GetSession();
#region
if (!session.TableExist<FissionClass>())
{
session.CreateTable<FissionClass>();
session.AddUnique<FissionClass>("groupid", "username");
}
#endregion
//创建配置文件
Config = this.ReadConfig<Config>();
SDK.ReciveIMEvent += SDK_ReciveIMEvent;
SDK.WXNewMemerEvent += SDK_WXNewMemerEvent;
}
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);
}
}
#endregion
private void SDK_WXNewMemerEvent(object sender, Chat.Framework.WXSdk.Events.WXNewMemer e)
{
try
{
if (sender.GetType() != typeof(WXClientImpl_IPAD)) return;
var ipad = sender as WXClientImpl_IPAD;
if (ipad == null) throw new Exception();
var session = ApiClient.GetSession();
var group = ipad.GetContact(e.GroupId);
if (group == null) throw new Exception($"无法获取群{e.GroupId}信息");
var members = ipad.GetMembers(e.GroupId, true);
if (members == null) throw new Exception($"无法获取群{group.NickName}({e.GroupId})用户信息");
var fcList = session.Queryable<FissionClass>().Where(f => f.groupid == e.GroupId).ToList();
#region
foreach (var item in members)
{
if (null == fcList.FirstOrDefault(f => f.username == item.Username))
{
var member = new FissionClass() { groupid = e.GroupId, groupnick = group.NickName, username = item.Username, nickname = Util.RemoveEmoji(item.NickName), logo = item.SmallHeadImgUrl, invitername = item.InviterUserName, GetIn = DateTime.Now, CurrentState = MemState. };
session.Insertable(member).ExecuteCommand();
}
}
#endregion
#region
members = members.Where(f => !string.IsNullOrWhiteSpace(f.InviterUserName)).ToArray();
var inviterUserNames = members.GroupBy(f => f.InviterUserName).Select(f => f.Key).ToList();
foreach (var username in inviterUserNames)
{
var fc = fcList.FirstOrDefault(f => f.username == username);
if (fc == null) continue;
fc.invited = members.Count(f => f.InviterUserName == username);
fc.fle = fc.invited - fc.consumed;
session.Saveable(fc).ExecuteCommand();
}
#endregion
}
catch (Exception ex)
{
this.OnLog($"{ex.Message} - {ex.StackTrace}");
}
}
private static object _lock1 = new object();
private static object _lock2 = new object();
private void SDK_ReciveIMEvent(object sender, ReciveIMEvent e)
{
try
{
if (string.IsNullOrWhiteSpace(e.Groupid)) return;
if (sender.GetType() != typeof(WXClientImpl_IPAD)) return;
var ipad = sender as WXClientImpl_IPAD;
if (ipad == null) return;
var mess = e.Message.Trim();
var session = ApiClient.GetSession();
#region
if (!string.IsNullOrWhiteSpace(Config.cmd) && Regex.IsMatch(mess, Config.cmd))
{
lock (_lock1)
{
var groupTemp = session.FindSingle<FissionClass>("groupid = @groupid", new { groupid = e.Groupid });
var group = ipad.GetContact(e.Groupid);
if (group == null) throw new Exception($"无法获取群{e.Groupid}信息");
if (groupTemp == null)//数据中不存在该群,获取群用户列表进行保存
{
var members = ipad.GetMembers(e.Groupid, true);
if (members == null) throw new Exception($"无法获取群{group.NickName}({e.Groupid})用户信息");
foreach (var item in members)
{
var member = new FissionClass() { groupid = e.Groupid, groupnick = group.NickName, username = item.Username, nickname = Util.RemoveEmoji(item.NickName), logo = item.SmallHeadImgUrl, invitername = item.InviterUserName, GetIn = DateTime.Now, CurrentState = MemState. };
if (item.Username == e.Username)
{
member.CurrentState = MemState.;
member.paidCnt++;
member.lastPr = DateTime.Now;
member.lastTime = DateTime.Now;
}
session.Insertable(member).ExecuteCommand();
}
}
else
{
var member = session.FindSingle<FissionClass>("groupid = @groupid and username = @username", new { groupid = e.Groupid, username = e.Username });
if (member == null)//用户不存在,添加用户
{
var memberTemp = ipad.GetMember(e.Groupid, e.Username);
if (memberTemp == null) throw new Exception($"获取群 {group.NickName}({e.Groupid})成员 {e.NickName}({e.Username})失败");
member = new FissionClass() { groupid = e.Groupid, username = memberTemp.Username, nickname = Util.RemoveEmoji(memberTemp.NickName), logo = memberTemp.SmallHeadImgUrl, invitername = memberTemp.InviterUserName, GetIn = DateTime.Now, paidCnt = 1, lastPr = DateTime.Now, lastTime = DateTime.Now, CurrentState = MemState. };
}
else
{
if (member.lastTime >= DateTime.Now.AddMinutes(-Config.valid_send_interval)) return;
member.paidCnt++;
member.lastTime = DateTime.Now;
}
session.Saveable(member).ExecuteCommand();
}
}
}
#endregion
#region
if (!string.IsNullOrWhiteSpace(Config.query_cmd) && Regex.IsMatch(mess, Config.query_cmd))
{
lock (_lock2)
{
var groupTemp = session.FindSingle<FissionClass>("groupid = @groupid", new { groupid = e.Groupid });
var group = ipad.GetContact(e.Groupid);
if (group == null) throw new Exception($"无法获取群{e.Groupid}信息");
if (groupTemp == null)//数据中不存在该群,获取群用户列表进行保存
{
var members = ipad.GetMembers(e.Groupid, true);
if (members == null) throw new Exception($"无法获取群{group.NickName}({e.Groupid})用户信息");
foreach (var item in members)
{
var _member = new FissionClass() { groupid = e.Groupid, groupnick = group.NickName, username = item.Username, nickname = Util.RemoveEmoji(item.NickName), logo = item.SmallHeadImgUrl, invitername = item.InviterUserName, GetIn = DateTime.Now, CurrentState = MemState. };
session.Insertable(_member).ExecuteCommand();
}
}
var member = session.FindSingle<FissionClass>("groupid = @groupid and username = @username", new { groupid = e.Groupid, username = e.Username });
if (member == null) return;
e.SendMessage(new VariateReplace().CommonReplace(Config.msg_statistic.Replace("[邀请人数]", member.invited.ToString()).Replace("[已拍数量]", member.paidCnt.ToString()).Replace("[有效积分]", member.fle.ToString()).Replace("[编码]", e.GetMemberinfo().id.ToString()), e.GetMemberinfo()));
}
}
#endregion
}
catch (Exception ex)
{
this.OnLog($"{ex.Message} - {ex.StackTrace}");
}
}
}
}