245 lines
10 KiB
C#
245 lines
10 KiB
C#
|
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}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|