old_flsystem/应用/FissionData/Class1.cs

245 lines
10 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.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}");
}
}
}
}