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()) { session.CreateTable(); session.AddUnique("groupid", "username"); } #endregion //创建配置文件 Config = this.ReadConfig(); 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().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("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("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("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("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}"); } } } }