From 4ba00e7a907a843311e22f0b69aa3dc2e95ac4cb Mon Sep 17 00:00:00 2001 From: milimoe Date: Thu, 16 May 2024 01:16:13 +0800 Subject: [PATCH] release --- src/Command/MasterCommand.cs | 57 +++++++++++++++++++- src/Settings/GeneralSettings.cs | 7 +++ src/Settings/OSMCore.cs | 2 +- src/Settings/SayNo.cs | 92 ++++++++++++++++++++++++++++++++- 4 files changed, 154 insertions(+), 4 deletions(-) diff --git a/src/Command/MasterCommand.cs b/src/Command/MasterCommand.cs index 11d3b80..0aa83a0 100644 --- a/src/Command/MasterCommand.cs +++ b/src/Command/MasterCommand.cs @@ -101,6 +101,37 @@ namespace Milimoe.RainBOT.Command { TaskUtility.NewTask(async () => await Bot.Mute(user_id, target_id, command)); } + else if (command.Contains(".osm sayno")) + { + string str = command.Replace(".osm sayno", "").Trim(); + string[] strs = Regex.Split(str, @"\s+"); + if (strs.Length >= 3) + { + string part = strs[0].ToString().Trim(); + string addorremove = strs[1].ToString().Trim(); + string value = string.Join("", strs[2..]).Trim(); + if (addorremove == "add" || addorremove == "remove" || addorremove == "+" || addorremove == "-") + { + bool isadd = addorremove == "add" || addorremove == "+"; + bool access = (isadd && (GeneralSettings.Master == user_id || GeneralSettings.SayNoAccessGroup.Contains(user_id))) || (!isadd && GeneralSettings.Master == user_id); + if (access) + { + if (SayNo.AddWord(part, isadd, value)) + { + string msg = AddValue_SayNo(part, isadd, value); + SendMessage(send_group, target_id, msg); + return; + } + } + else + { + Access_Denied(send_group, target_id); + return; + } + } + } + SendMessage(send_group, target_id, Execute_Worker(".osm missingcommand", "")); + } else if (command.Contains(".osm refresh")) { if (user_id == GeneralSettings.Master) @@ -458,6 +489,20 @@ namespace Milimoe.RainBOT.Command } } break; + case "saynoaccessgroup": + if (args.Length > 1 && long.TryParse(args[1].Replace("@", "").Trim(), out long saynoaccess_qq)) + { + string args0 = args[0].ToString().Trim(); + if (args0 == "add" || args0 == "remove" || args0 == "+" || args0 == "-") + { + isadd = args0 == "add" || args0 == "+"; + if (isadd) GeneralSettings.SayNoAccessGroup.Add(saynoaccess_qq); + else GeneralSettings.SayNoAccessGroup.Remove(saynoaccess_qq); + msg = AddRemoveAccessGroupMember("词汇编写组成员", isadd, saynoaccess_qq); + return msg; + } + } + break; case "osmcoregroup": if (args.Length > 1 && long.TryParse(args[1].Trim(), out long osmcoregroup_id)) { @@ -479,7 +524,7 @@ namespace Milimoe.RainBOT.Command } public static void Access_Denied(bool send_group, long target_id) => SendMessage(send_group, target_id, "你没有权限使用此指令。"); - + public static void SendMessage(bool send_group, long target_id, string msg) { _ = send_group ? Bot.SendGroupMessage(target_id, "OSM指令", msg) : Bot.SendFriendMessage(target_id, "OSM指令", msg); @@ -504,5 +549,15 @@ namespace Milimoe.RainBOT.Command GeneralSettings.SaveConfig(); return msg; } + + public static string AddValue_SayNo(string part, bool isadd, string value, ConsoleColor color = ConsoleColor.Cyan) + { + string msg = "OSM Core:" + part + $"已{(isadd ? "添加" : "移除")}:" + value + "。"; + Console.ForegroundColor = color; + Console.WriteLine(msg); + Console.ForegroundColor = ConsoleColor.Gray; + SayNo.SaveConfig(); + return msg; + } } } diff --git a/src/Settings/GeneralSettings.cs b/src/Settings/GeneralSettings.cs index a7dea0d..d6db5f4 100644 --- a/src/Settings/GeneralSettings.cs +++ b/src/Settings/GeneralSettings.cs @@ -48,6 +48,8 @@ namespace Milimoe.RainBOT.Settings public static List RecallAccessGroup { get; set; } = []; + public static List SayNoAccessGroup { get; set; } = []; + public static List OSMCoreGroup { get; set; } = []; public static PluginConfig Configs { get; set; } = new("rainbot", "config"); @@ -140,6 +142,10 @@ namespace Milimoe.RainBOT.Settings { RecallAccessGroup = (List)value; } + if (configs.TryGetValue("SayNoAccessGroup", out value) && value != null) + { + SayNoAccessGroup = (List)value; + } if (configs.TryGetValue("OSMCoreGroup", out value) && value != null) { OSMCoreGroup = (List)value; @@ -168,6 +174,7 @@ namespace Milimoe.RainBOT.Settings Configs.Add("MuteAccessGroup", MuteAccessGroup); Configs.Add("UnMuteAccessGroup", UnMuteAccessGroup); Configs.Add("RecallAccessGroup", RecallAccessGroup); + Configs.Add("SayNoAccessGroup", SayNoAccessGroup); Configs.Add("OSMCoreGroup", OSMCoreGroup); Configs.Save(); } diff --git a/src/Settings/OSMCore.cs b/src/Settings/OSMCore.cs index 49b24e0..3251984 100644 --- a/src/Settings/OSMCore.cs +++ b/src/Settings/OSMCore.cs @@ -4,7 +4,7 @@ { public const string version = "v1.0"; public const string version2 = "Patch4"; - public const string time = "May 12th, 2024"; + public const string time = "May 16th, 2024"; public static string Info => $"OSM Core {version} {version2}\r\nAuthor: Milimoe\r\nBuilt on {time}\r\nSee: https://github.com/milimoe"; } diff --git a/src/Settings/SayNo.cs b/src/Settings/SayNo.cs index 4bf1611..06fa3eb 100644 --- a/src/Settings/SayNo.cs +++ b/src/Settings/SayNo.cs @@ -30,6 +30,8 @@ namespace Milimoe.RainBOT.Settings public static List SaySpecialNoWords { get; set; } = []; + public static PluginConfig Configs { get; set; } = new("rainbot", "sayno"); + public static void InitSayNo() { PluginConfig configs = new("rainbot", "sayno"); @@ -83,6 +85,92 @@ namespace Milimoe.RainBOT.Settings } } } -} - } \ No newline at end of file + public static void SaveConfig() + { + Configs.Add("Trigger", Trigger); + Configs.Add("TriggerBeforeNo", TriggerBeforeNo); + Configs.Add("IgnoreTriggerAfterNo", IgnoreTriggerAfterNo); + Configs.Add("IgnoreTriggerBeforeCan", IgnoreTriggerBeforeCan); + Configs.Add("TriggerAfterYes", TriggerAfterYes); + Configs.Add("WillNotSayNo", WillNotSayNo); + Configs.Add("SayNoWords", SayNoWords); + Configs.Add("SayDontHaveWords", SayDontHaveWords); + Configs.Add("SayNotYesWords", SayNotYesWords); + Configs.Add("SayDontWords", SayDontWords); + Configs.Add("SayWantWords", SayWantWords); + Configs.Add("SayThinkWords", SayThinkWords); + Configs.Add("SaySpecialNoWords", SaySpecialNoWords); + Configs.Save(); + } + + public static bool AddWord(string part, bool isadd, string value) + { + HashSet set = []; + List list = []; + bool islist = false; + switch (part.ToLower()) + { + case "trigger": + set = Trigger; + break; + case "triggerbeforeno": + set = TriggerBeforeNo; + break; + case "ignoretriggerafterno": + set = IgnoreTriggerAfterNo; + break; + case "ignoretriggerbeforecan": + set = IgnoreTriggerBeforeCan; + break; + case "triggerafteryes": + set = TriggerAfterYes; + break; + case "willnotsayno": + set = WillNotSayNo; + break; + case "saynowords": + islist = true; + list = SayNoWords; + break; + case "saydonthavewords": + islist = true; + list = SayDontHaveWords; + break; + case "saynotyeswords": + islist = true; + list = SayNotYesWords; + break; + case "saydontwords": + islist = true; + list = SayDontWords; + break; + case "saywantwords": + islist = true; + list = SayWantWords; + break; + case "saythinkwords": + islist = true; + list = SayThinkWords; + break; + case "sayspecialnowords": + islist = true; + list = SaySpecialNoWords; + break; + default: + return false; + } + if (isadd) + { + if (islist) list.Add(value); + else set.Add(value); + } + else + { + if (islist) list.Remove(value); + else set.Remove(value); + } + return true; + } + } +} \ No newline at end of file