添加刷屏禁言

This commit is contained in:
milimoe 2025-11-20 01:38:04 +08:00
parent 45ad0e3b47
commit 15958d6bfa
Signed by: milimoe
GPG Key ID: 9554D37E4B8991D0
3 changed files with 81 additions and 1 deletions

View File

@ -40,6 +40,15 @@ namespace Milimoe.RainBOT.ListeningTask
if (MuteRecall.Muted.TryGetValue(e.group_id, out Dictionary<long, long>? mute_group) && mute_group != null) mute_group.Remove(e.user_id);
if (NoSpamming.NoSpammingData.TryGetValue(e.group_id, out NoSpamming? value) && value != null)
{
if (await value.Check(e.user_id))
{
await Bot.SendGroupMessage(e.group_id, "刷屏检测", "喜欢刷屏?吔屎啦你!");
return quick_reply;
}
}
bool onOSMCore = GeneralSettings.OSMCoreGroup.Contains(e.group_id);
// OSM指令
if (e.detail.Length >= 4 && e.detail[..4] == ".osm")
@ -376,7 +385,7 @@ namespace Milimoe.RainBOT.ListeningTask
{
if (long.TryParse(str_qq.Trim().Replace("@", ""), out long qq))
{
string msg = await Bot.HttpPost<string>($"https://{GeneralSettings.FunGameServer}/userdaily/remove/" + e.user_id, "") ?? "";
string msg = await Bot.HttpPost<string>($"https://{GeneralSettings.FunGameServer}/userdaily/remove/" + qq, "") ?? "";
if (msg != "")
{
await Bot.SendGroupMessage(e.group_id, "重置运势", "已重置" + Bot.GetMemberNickName(e.group_id, qq) + "" + qq + ")的今日运势。");

View File

@ -110,6 +110,7 @@ try
SayNo.InitSayNo();
Ignore.InitIgnore();
QQOpenID.LoadConfig();
NoSpamming.Init(Bot.Groups);
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("初始化完毕!");
@ -212,6 +213,16 @@ try
}
// 重置AI状态
AI.CD = false;
// 刷屏检测重置
foreach (NoSpamming ns in NoSpamming.NoSpammingData.Values)
{
ns.Times.Clear();
if (NoSpamming.Refresh++ > 4)
{
ns.History.Clear();
NoSpamming.Refresh = 0;
}
}
}
catch (Exception e)
{

View File

@ -0,0 +1,60 @@
using System.Collections.Concurrent;
using Milimoe.OneBot.Framework;
using Milimoe.OneBot.Model.Content;
using Milimoe.OneBot.Model.Other;
namespace Milimoe.RainBOT.Settings
{
public class NoSpamming(long groupId)
{
public static int Refresh { get; set; } = 0;
public static ConcurrentDictionary<long, NoSpamming> NoSpammingData { get; } = [];
public List<long> History { get; } = [];
public long GroupId { get; set; } = groupId;
public Dictionary<long, int> Times { get; } = [];
public static void Init(IEnumerable<Group> groups)
{
foreach (Group group in groups)
{
if (!GeneralSettings.OSMCoreGroup.Contains(group.group_id))
{
continue;
}
NoSpammingData.TryAdd(group.group_id, new(group.group_id));
}
}
public async Task<bool> Check(long qq)
{
if (!Bot.BotIsAdmin(GroupId))
{
return false;
}
History.Add(qq);
if (Times.TryGetValue(qq, out int times))
{
Times[qq] = ++times;
int total = Times.Values.Sum();
double check = total > 8 ? times / total : 0;
if (qq != GeneralSettings.Master && (check > 0.9 || (History.Count > 8 && History.TakeLast(8).All(q => q == qq))))
{
Times.Remove(qq);
await Bot.SendMessage(SupportedAPI.set_group_ban, GroupId, "禁言", new SetGroupBanContent(GroupId, qq, 120), true);
await OshimaController.Instance.SCAdd(qq, GroupId, "刷屏惩罚", -5);
return true;
}
}
else
{
Times[qq] = 1;
}
if (History.Count > 200)
{
History.Clear();
}
return false;
}
}
}