public void ProcessGroupMessage(GroupMessageReceivedContext context) { //throw new NotImplementedException(); //复读计数器计数,连续两个消息内容相同,计数器+1并将发言的群成员加入复读机成员名单,反之重置计数器和名单 if (Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.msg == context.Message) { Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeatTime++; Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeaterList.Add(context.FromQq); } else { Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.msg = context.Message; Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeaterList.Clear(); Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeatTime = 0; } //复读事件触发,根据执行模式进行禁言操作 if (Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeatTime == Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeatExecuate) { //正常禁言:禁言最后一个发言的复读机 if (Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.execuateMode == 0) { _mahuaApi.BanGroupMember(context.FromGroup, context.FromQq, TimeSpan.FromMinutes(Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.execuateTime)); } //随机禁言:从复读机名单中随机选择一个禁言 if (Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.execuateMode == 1) { Random ran = new Random(); int RandKey = ran.Next(0, Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeaterList.Count() - 1); _mahuaApi.BanGroupMember(context.FromGroup, Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeaterList[RandKey], TimeSpan.FromMinutes(Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.execuateTime)); } //强力禁言:禁言在复读机名单中的额所有人 if (Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.execuateMode == 2) { for (int k = 0; k <= Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeaterList.Count; k++) { _mahuaApi.BanGroupMember(context.FromGroup, Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeaterList[k], TimeSpan.FromMinutes(Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.execuateTime)); } } //重置计数器和复读机名单 Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeatTime = 0; Newbe.Mahua.Plugins.RepeaterBreaker.MahuaEvents.Common.repeaterList.Clear(); } // 不要忘记在MahuaModule中注册 }
/// <summary> /// 解禁某人 /// </summary> /// <param name="fromqq"></param> /// <param name="banqq"></param> /// <param name="group"></param> /// <param name="_mahuaApi"></param> /// <returns></returns> public static string UnbanSomebody(string fromqq, string banqq, string group, IMahuaApi _mahuaApi) { int fk = 0; string fks = XmlSolve.xml_get("ban_card", fromqq); if (fks != "") { fk = int.Parse(fks); } if (fk > 0) { try { TimeSpan span = new TimeSpan(0, 0, 0, 0); _mahuaApi.BanGroupMember(group, banqq, span); fk--; XmlSolve.del("ban_card", fromqq); XmlSolve.insert("ban_card", fromqq, fk.ToString()); return(Tools.At(fromqq) + "\r\n[CQ:emoji,id=9989]已将" + banqq + "解除禁言"); } catch { return(Tools.At(fromqq) + "\r\n执行失败。"); } } else { return(Tools.At(fromqq) + "\r\n[CQ:emoji,id=128162]你哪儿有禁言卡?"); } }
/// <summary> /// 禁言某人 /// </summary> /// <param name="fromqq"></param> /// <param name="banqq"></param> /// <param name="group"></param> /// <param name="_mahuaApi"></param> /// <returns></returns> public static string BanSomebody(string fromqq, string banqq, string group, IMahuaApi _mahuaApi) { int fk = 0; string fks = XmlSolve.xml_get("ban_card", fromqq); if (fks != "") { fk = int.Parse(fks); } if (fk > 0) { try { Random ran = new Random(System.DateTime.Now.Millisecond); int RandKey = ran.Next(0, 60 + Tools.GetXmlNumber("gift", fromqq)); TimeSpan span = new TimeSpan(0, 0, RandKey, 0); _mahuaApi.BanGroupMember(group, banqq, span); fk--; XmlSolve.del("ban_card", fromqq); XmlSolve.insert("ban_card", fromqq, fk.ToString()); return(Tools.At(fromqq) + "\r\n[CQ:emoji,id=128683]已将" + banqq + "禁言" + RandKey + "分钟"); } catch { return(Tools.At(fromqq) + "\r\n执行失败。"); } } else { return(Tools.At(fromqq) + "\r\n[CQ:emoji,id=128162]你哪儿有禁言卡?"); } }
public void BanPostLotto(IMahuaApi _mahuaApi, string group, string qq) { mangerConfig = GraceGroupMangerConfig.Instance; int ret = QQinMangerConfig(group, mangerConfig); if (ret < 0) { GraceGroupConfig cfg = new GraceGroupConfig(); cfg.GroupQQ = group; mangerConfig.groupConfigs.Add(cfg); mangerConfig.ToJsonString().SaveToFile(GraceGroupMangerConfig.SavePath); } else { if (!GraceGroupMangerConfig.Instance.groupConfigs[ret].IsBanPostLotto) { Messenger.SendGroup(group, "禁言抽奖功能已被禁用,请输入[开启禁言抽奖]来启用此功能(需要管理员或群主权限)"); return; } } GroupMemberInfo botInfo = GetGroupMemberInfo(_mahuaApi, group, _mahuaApi.GetLoginQq()); GroupMemberAuthority botAuthority = botInfo.Authority; if (GroupMemberAuthority.Unknown == botAuthority || GroupMemberAuthority.Normal == botAuthority) { Messenger.SendGroup(group, "机器人的权限不足,想要使用禁言抽奖功能,请将机器人设置为管理员!"); return; } int hours = 0, minutes = 0, seconds = 0; Random rd = new Random(); minutes = rd.Next(1, 11); TimeSpan time = new TimeSpan(hours, minutes, seconds); GroupMemberInfo member = GetGroupMemberInfo(_mahuaApi, group, qq); if (member.Authority < botAuthority) { _mahuaApi.BanGroupMember(group, qq, time); string nick = member.InGroupName; if (nick == "") { nick = qq; } Messenger.SendGroup(group, $"恭喜 {nick} 抽中{minutes}分钟套餐"); } else { Messenger.SendGroup(group, $"[CQ:at,qq={qq}] ,权限不足,抽个鸡儿"); } }
public void ProcessGroupMessage(GroupMessageReceivedContext context) { //throw new NotImplementedException(); //复读计数器计数,连续两个消息内容相同,计数器+1并将发言的群成员加入复读机成员名单,反之重置计数器和名单 if (Common.msg == context.Message) { Common.repeatTime++; Common.repeaterList.Add(context.FromQq); } else { Common.msg = context.Message; Common.repeaterList.Clear(); Common.repeatTime = 0; } //复读事件触发,根据执行模式进行禁言操作 if (Common.repeatTime == Common.repeatExecuate) { //正常禁言:禁言最后一个发言的复读机 if (Common.execuateMode == 0) { _mahuaApi.BanGroupMember(context.FromGroup, context.FromQq, TimeSpan.FromMinutes(Common.execuateTime)); _mahuaApi.SendGroupMessage(context.FromGroup) .Text("复读机") .At(context.FromQq) .Text("已被当场逮捕") .Done(); } //随机禁言:从复读机名单中随机选择一个禁言 if (Common.execuateMode == 1) { Random ran = new Random(); int RandKey = ran.Next(0, Common.repeaterList.Count() - 1); _mahuaApi.BanGroupMember(context.FromGroup, Common.repeaterList[RandKey], TimeSpan.FromMinutes(Common.execuateTime)); _mahuaApi.SendGroupMessage(context.FromGroup) .Text("复读机") .At(Common.repeaterList[RandKey]) .Text("已被当场逮捕") .Done(); } //强力禁言:禁言在复读机名单中的额所有人 if (Common.execuateMode == 2) { for (int k = 0; k <= Common.repeaterList.Count; k++) { _mahuaApi.BanGroupMember(context.FromGroup, Common.repeaterList[k], TimeSpan.FromMinutes(Common.execuateTime)); } _mahuaApi.SendGroupMessage(context.FromGroup) .Text("所有复读机均已被逮捕") .Newline() .Text("///Powerful Mode Enabled///强力模式启用中///Powerful Mode Enabled///") .Done(); } //重置计数器和复读机名单 Common.repeatTime = 0; Common.repeaterList.Clear(); } //复读模块 Random ran1 = new Random(); double RandKey1 = ran1.Next(0, 100); if (RandKey1 <= Common.RandMax) { _mahuaApi.SendGroupMessage(context.FromGroup) .Text(context.Message) .Done(); } //全随机模块 Random ran2 = new Random(); double RandKey2 = ran2.Next(0, 100); if (RandKey2 <= Common.RandMax) { _mahuaApi.BanGroupMember(context.FromGroup, context.FromQq, TimeSpan.FromMinutes(Common.execuateTime)); _mahuaApi.SendGroupMessage(context.FromGroup) .At(context.FromQq) .Text("已被丢入小黑屋并穿上小裙子") .Done(); } //口球抽奖模块 if (Common.msg == "口球抽奖") { Random ran3 = new Random(); int RandKey3 = ran3.Next(0, 43200); _mahuaApi.BanGroupMember(context.FromGroup, context.FromQq, TimeSpan.FromMinutes(RandKey3)); _mahuaApi.SendGroupMessage(context.FromGroup) .Text("恭喜") .At(context.FromQq) .Text("中奖!口球时间为") .Text(RandKey3.ToString()) .Text("分钟") .Done(); } //骑空士杀手 // 不要忘记在MahuaModule中注册 }
public void ProcessGroupMessage(GroupMessageReceivedContext context) { var managerQQ = RuntimeConfig.Config.ManagerQq.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var message = context.Message; var fromQQ = context.FromQq; var group = context.FromGroup; var loginQQ = _mahuaApi.GetLoginQq(); if (managerQQ.Any(x => x == fromQQ)) { var ats = CQNumberHelper.GetAtQQ(context.Message)?.ToList(); if (!ats?.Any(x => x == loginQQ) ?? false) { return; } //解除禁言 if (message.IndexOf("解除禁言") > -1) { foreach (var item in ats.Where(x => x != loginQQ)) { _mahuaApi.RemoveBanGroupMember(group, item); } } else { var m = banRegex.Match(message); //禁言 if (m.Success) { var time = Convert.ToDouble(m.Groups[1].Value); foreach (var item in ats?.Where(x => x != loginQQ)) { _mahuaApi.BanGroupMember(context.FromGroup, item, TimeSpan.FromMinutes(time)); } return; } //修改复读禁言时间 m = repeatBanTimeChangeRegex.Match(message); if (m.Success) { var time = Convert.ToDouble(m.Groups[1].Value); if (time > 0) { RuntimeConfig.Config.RepeatMessageBanDuration = time; RuntimeConfig.Save(AppSetting.ConfigFilePath, RuntimeConfig.Config.ToJosn()); } return; } //修改复读禁言概率 m = repeatBanProbabilityChangeRegex.Match(message); if (m.Success) { var time = Convert.ToDouble(m.Groups[1].Value); if (time > 0) { RuntimeConfig.Config.RepeatMessageBanProbability = time; RuntimeConfig.Save(AppSetting.ConfigFilePath, RuntimeConfig.Config.ToJosn()); } return; } } } }
public void ProcessGroupMessage(GroupMessageReceivedContext context) { var group = context.FromGroup; var message = context.Message; var currentGroupMessageCache = messageCache.GetOrAdd(group, new ConcurrentQueue <string>()); //当前缓存消息出现的次数 var currentGroupMessageCacheCount = messageCacheCount.GetOrAdd(group, new ConcurrentDictionary <string, byte>()); //已复读 var currentGroupRepeatMessageCache = repeatMessageCache.GetOrAdd(group, new ConcurrentDictionary <string, bool>()); //已禁言 //var currentGroupBanMessageCache = banMessageCache.GetOrAdd(group, new ConcurrentDictionary<string, bool>()); while (currentGroupMessageCache.Count >= MessageCacheCount) { lock (ClearMessageCacheLock) { if (currentGroupMessageCache.Count >= MessageCacheCount && currentGroupMessageCache.TryDequeue(out string oldMessage)) { //确保队列缓存被处理了 byte oldCount = 0; while (currentGroupMessageCacheCount.TryGetValue(oldMessage, out oldCount)) { if (currentGroupMessageCacheCount.TryUpdate(oldMessage, (byte)(oldCount - 1), oldCount)) { break; } } if (oldMessage != message && oldCount <= 1) { currentGroupMessageCacheCount.TryRemove(oldMessage, out _); currentGroupRepeatMessageCache.TryRemove(oldMessage, out _); break; } } } } currentGroupMessageCache.Enqueue(message); var messageCount = currentGroupMessageCacheCount.AddOrUpdate(message, 1, (_, count) => (byte)(count + 1)); //3条起 20%增长, 60%封顶 var maxProbality = (100 - (messageCount - 2 >= 3 ? 3 : messageCount - 2) * 20); var probability = 0; lock (randLock) { probability = random.Next(1, 101); } if (messageCount > 2) { //复读 if (RuntimeConfig.Config.IsRepeatMessage && probability > maxProbality && !currentGroupRepeatMessageCache.ContainsKey(message)) { currentGroupRepeatMessageCache.TryAdd(message, true); _mahuaApi.SendGroupMessageExtension(group, message); } //禁言 var p = 100 - RuntimeConfig.Config.RepeatMessageBanProbability; if (RuntimeConfig.Config.IsBanRepeatMessage && probability > p) { _mahuaApi.BanGroupMember(group, context.FromQq, TimeSpan.FromMinutes(RuntimeConfig.Config.RepeatMessageBanDuration)); } } }
/// <summary> /// 抽奖方法,获取抽奖结果并执行禁言 /// </summary> /// <param name="qq"></param> /// <param name="_mahuaApi"></param> /// <param name="group"></param> /// <returns></returns> public static string Lottery(string qq, IMahuaApi _mahuaApi, string group) { if (CheckCount(qq)) { return(Tools.At(qq) + "[CQ:emoji,id=127539]今日抽奖次数已用完!"); } string result = ""; int need_add = 0; Random ran = new Random(System.DateTime.Now.Millisecond); int RandKey = ran.Next(1, 22); int RandKey2 = ran.Next(0, 10); if (RandKey > 19) { result += Tools.At(qq) + "\r\n[CQ:emoji,id=127881]恭喜你!什么也没有抽中!"; } else if (RandKey == 1 && RandKey2 != 0) { if (Tools.GetXmlNumber("gift", qq) < 10) { need_add += 10; TimeSpan span = new TimeSpan(0, 10, 0, 0); _mahuaApi.BanGroupMember(group, qq, span); result += Tools.At(qq) + "\r\n[CQ:emoji,id=127882]恭喜你抽中了超豪华禁言套餐,并附赠10张禁言卡!奖励已发放!"; } else { result += Tools.At(qq) + "\r\n是超豪华禁言套餐呢。。。这次套餐我请客吧ww"; } } else if (RandKey == 1 && RandKey2 == 0) { if (Tools.GetXmlNumber("gift", qq) < 10) { need_add -= 200; TimeSpan span = new TimeSpan(30, 0, 0, 0); _mahuaApi.BanGroupMember(group, qq, span); result += Tools.At(qq) + "\r\n[CQ:emoji,id=127882]恭喜你抽中了顶级豪华月卡禁言套餐,并扣除200张禁言卡!奖励已发放!"; } else { result += Tools.At(qq) + "\r\n是顶级豪华月卡禁言套餐呢。。。这次套餐我请客吧ww"; } } else if (RandKey < 11 - Tools.GetXmlNumber("gift", qq) / 10) { TimeSpan span = new TimeSpan(0, RandKey, 0, 0); _mahuaApi.BanGroupMember(group, qq, span); need_add -= RandKey; result += Tools.At(qq) + "\r\n[CQ:emoji,id=127882]恭喜你抽中了禁言" + RandKey + "小时,并扣除" + RandKey + "张禁言卡!奖励已发放到你的QQ~\r\n送我礼物可以提升好感度降低禁言几率哦~"; } else { int lucky = ran.Next(1, Tools.GetXmlNumber("gift", qq) / 10 + 1); need_add += lucky; result += Tools.At(qq) + "\r\n[CQ:emoji,id=127873]恭喜你抽中了" + need_add + "张禁言卡,回复“禁言卡”可以查看使用帮助。"; } if (need_add != 0) { Tools.AddXmlNumber("ban_card", qq, need_add); } return(result); }