From 6c213e086d8d561ea9f975a83c6f4e1ad2e1fa3d Mon Sep 17 00:00:00 2001 From: milimoe Date: Thu, 16 Jan 2025 01:35:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ws=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ListeningTask/GroupMessageTask.cs | 20 +++++++++ src/Settings/OshimaController.cs | 60 +++++++++++++++++++++------ 2 files changed, 67 insertions(+), 13 deletions(-) diff --git a/src/ListeningTask/GroupMessageTask.cs b/src/ListeningTask/GroupMessageTask.cs index 867e103..a56f6b6 100644 --- a/src/ListeningTask/GroupMessageTask.cs +++ b/src/ListeningTask/GroupMessageTask.cs @@ -109,6 +109,13 @@ namespace Milimoe.RainBOT.ListeningTask return quick_reply; } + if (e.detail == "圣人榜") + { + if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return quick_reply; + _ = OshimaController.Instance.SCList(e.group_id); + return quick_reply; + } + if (e.detail == "查询服务器启动时间") { if (!await Bot.CheckBlackList(true, e.user_id, e.group_id)) return quick_reply; @@ -454,6 +461,7 @@ namespace Milimoe.RainBOT.ListeningTask if (content.message.Count > 0) { await Bot.SendGroupMessage(e.group_id, "随机反驳不", content); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); } } else if (SayNo.TriggerBeforeNo.Any(e.detail.Contains) && GeneralSettings.IsSayNo && e.CheckThrow(GeneralSettings.PSayNo, out dice)) @@ -507,6 +515,7 @@ namespace Milimoe.RainBOT.ListeningTask if (content.message.Count > 0) { await Bot.SendGroupMessage(e.group_id, "随机反驳不", content); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); } } else if (e.detail.Contains("可以") && !e.detail.Contains('不') && e.CheckThrow(GeneralSettings.PSayNo, out dice)) @@ -515,10 +524,12 @@ namespace Milimoe.RainBOT.ListeningTask if (dice < (GeneralSettings.PSayNo / 2)) { await Bot.SendGroupMessage(e.group_id, "随机反驳不", "可以"); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); } else { await Bot.SendGroupMessage(e.group_id, "随机反驳不", "不可以"); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); } } else if (e.detail.Contains('能') && !e.detail.Contains('不') && !SayNo.IgnoreTriggerBeforeCan.Any(e.detail.Contains) && e.CheckThrow(GeneralSettings.PSayNo, out dice)) @@ -527,10 +538,12 @@ namespace Milimoe.RainBOT.ListeningTask if (dice < (GeneralSettings.PSayNo / 2)) { await Bot.SendGroupMessage(e.group_id, "随机反驳不", "能"); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); } else { await Bot.SendGroupMessage(e.group_id, "随机反驳不", "不能"); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); } } else if (e.detail.Contains("可能") && !e.detail.Contains('不') && e.CheckThrow(GeneralSettings.PSayNo, out dice)) @@ -539,21 +552,25 @@ namespace Milimoe.RainBOT.ListeningTask if (dice < (GeneralSettings.PSayNo / 2)) { await Bot.SendGroupMessage(e.group_id, "随机反驳不", "可能"); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); } else { await Bot.SendGroupMessage(e.group_id, "随机反驳不", "不可能"); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); } } else if (e.detail.Contains('要') && !e.detail.Contains('不') && e.CheckThrow(GeneralSettings.PSayNo, out dice)) { Bot.ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo); await Bot.SendGroupMessage(e.group_id, "随机反驳不", SayNo.SayWantWords[new Random().Next(SayNo.SayWantWords.Count)]); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); } else if (e.detail.Contains('想') && !e.detail.Contains('不') && e.CheckThrow(GeneralSettings.PSayNo, out dice)) { Bot.ColorfulCheckPass(sender, "随机反驳不", dice, GeneralSettings.PSayNo); await Bot.SendGroupMessage(e.group_id, "随机反驳不", SayNo.SayThinkWords[new Random().Next(SayNo.SayThinkWords.Count)]); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); } // 反向艾特 @@ -587,6 +604,7 @@ namespace Milimoe.RainBOT.ListeningTask }; content.message.Add(new ImageMessage(img)); await Bot.SendGroupMessage(e.group_id, "Image", content); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); return quick_reply; } @@ -599,6 +617,7 @@ namespace Milimoe.RainBOT.ListeningTask GroupMessageContent content = new(e.group_id); content.message.AddRange(e.message); await Bot.SendGroupMessage(e.group_id, "随机复读", content, delay * 1000); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); return quick_reply; } @@ -630,6 +649,7 @@ namespace Milimoe.RainBOT.ListeningTask break; } await Bot.SendGroupMessage(e.group_id, "随机叫哥", content, delay * 1000); + _ = OshimaController.Instance.SCAdd(e.user_id, e.group_id); return quick_reply; } } diff --git a/src/Settings/OshimaController.cs b/src/Settings/OshimaController.cs index 0c8910c..9e2bdb4 100644 --- a/src/Settings/OshimaController.cs +++ b/src/Settings/OshimaController.cs @@ -11,11 +11,10 @@ namespace Milimoe.RainBOT.Settings public class OshimaController : RunTimeController { public static OshimaController Instance { get; set; } = new(); - public static FunGameConfig Config { get; set; } = new(); - public static int CurrentRetryTimes { get; set; } = -1; - public static int MaxRetryTimes => 10; + public static int MaxRetryTimes => 30; + public const string ServerName = "oshima.fungame.anonymous"; public override bool BeforeConnect(ref string addr, ref int port, ArrayList args) { @@ -70,7 +69,7 @@ namespace Milimoe.RainBOT.Settings { result = await ConnectAsync(TransmittalType.WebSocket, GeneralSettings.FunGameServer, ssl: true, subUrl: "ws"); Config.FunGame_isRetrying = false; - await Task.Delay(2000); + await Task.Delay(5000); } catch (Exception e) { @@ -98,7 +97,7 @@ namespace Milimoe.RainBOT.Settings Console.WriteLine("重连失败!"); if (!Config.FunGame_isRetrying && Config.FunGame_isAutoRetry) { - await Task.Delay(2000); + await Task.Delay(5000); if (!Config.FunGame_isRetrying && Config.FunGame_isAutoRetry) { await Retry(); @@ -114,7 +113,7 @@ namespace Milimoe.RainBOT.Settings { if (HTTPClient != null) { - await HTTPClient.Send(SocketMessageType.AnonymousGameServer, "oshima.fungame.anonymous"); + await HTTPClient.Send(SocketMessageType.AnonymousGameServer, ServerName); } } @@ -143,7 +142,7 @@ namespace Milimoe.RainBOT.Settings { CurrentRetryTimes = -1; Config.FunGame_isAutoRetry = true; - await Task.Delay(2000); + await Task.Delay(5000); if (!Config.FunGame_isRetrying && Config.FunGame_isAutoRetry) { await Retry(); @@ -168,19 +167,54 @@ namespace Milimoe.RainBOT.Settings { long qq = NetworkUtility.JsonDeserializeFromDictionary(data, "qq"); string msg = NetworkUtility.JsonDeserializeFromDictionary(data, "msg") ?? ""; - if (qq > 0 && msg != "") + if (msg != "") { - foreach (Group g in Bot.Groups.Where(g => GeneralSettings.FunGameWebSocketGroup.Contains(g.group_id))) + if (qq > 0) { - Member m = Bot.GetMember(g.group_id, qq); - if (m.user_id == qq) + foreach (Group g in Bot.Groups.Where(g => GeneralSettings.FunGameWebSocketGroup.Contains(g.group_id))) { - await Bot.SendGroupMessageAt(qq, g.group_id, "FunGame推送", msg); - break; + Member m = Bot.GetMember(g.group_id, qq); + if (m.user_id == qq) + { + await Bot.SendGroupMessageAt(qq, g.group_id, "FunGame推送", msg); + break; + } + } + } + else + { + long groupid = NetworkUtility.JsonDeserializeFromDictionary(data, "groupid"); + if (groupid > 0 && Bot.Groups.Any(g => g.group_id == groupid)) + { + await Bot.SendGroupMessage(groupid, "匿名服务器消息", msg); } } } } } + + public async Task SCAdd(long qq, long groupid, double sc = 1) + { + if (HTTPClient != null) + { + Dictionary data = []; + data.Add("command", "scadd"); + data.Add("qq", qq); + data.Add("groupid", groupid); + data.Add("sc", sc); + await HTTPClient.Send(SocketMessageType.AnonymousGameServer, ServerName, data); + } + } + + public async Task SCList(long groupid) + { + if (HTTPClient != null) + { + Dictionary data = []; + data.Add("command", "sclist"); + data.Add("groupid", groupid); + await HTTPClient.Send(SocketMessageType.AnonymousGameServer, ServerName, data); + } + } } }