diff --git a/NapCatRobotClient/NapCatRobotClient.API/.config/dotnet-tools.json b/NapCatRobotClient/NapCatRobotClient.API/.config/dotnet-tools.json new file mode 100644 index 0000000..d4937e0 --- /dev/null +++ b/NapCatRobotClient/NapCatRobotClient.API/.config/dotnet-tools.json @@ -0,0 +1,13 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "9.0.10", + "commands": [ + "dotnet-ef" + ], + "rollForward": false + } + } +} \ No newline at end of file diff --git a/NapCatRobotClient/NapCatRobotClient.API/Controllers/EntryController.cs b/NapCatRobotClient/NapCatRobotClient.API/Controllers/EntryController.cs index 1b0e8bc..66dde85 100644 --- a/NapCatRobotClient/NapCatRobotClient.API/Controllers/EntryController.cs +++ b/NapCatRobotClient/NapCatRobotClient.API/Controllers/EntryController.cs @@ -1,3 +1,4 @@ +锘縰sing Furion.Logging; using Microsoft.AspNetCore.Mvc; using NapCatRobotClient.Service.Dispatcher.Service; @@ -15,7 +16,7 @@ namespace NapCatRobotClient.API.Controllers } /// - /// 接收消息入口 + /// 鎺ユ敹娑堟伅鍏ュ彛 /// /// [HttpPost] @@ -23,6 +24,7 @@ namespace NapCatRobotClient.API.Controllers { using StreamReader reader = new(Request.Body); string body = await reader.ReadToEndAsync(); + Log.Information($"鎺ユ敹鍒扮兢娑堟伅:{body}"); bool result = await _dispatcherService.ReceiveMessageAndProcess(body); return Ok(result); } diff --git a/NapCatRobotClient/NapCatRobotClient.API/appsettings.json b/NapCatRobotClient/NapCatRobotClient.API/appsettings.json index 9c15ef2..bb67b33 100644 --- a/NapCatRobotClient/NapCatRobotClient.API/appsettings.json +++ b/NapCatRobotClient/NapCatRobotClient.API/appsettings.json @@ -13,11 +13,13 @@ "Redis": "127.0.0.1:6379,defaultDatabase=0,max pool size=50,tryit=0" }, "QQConfig": { - "SendApiUrl": "http://192.168.142.133:3000",// NapCat HTTP鏈嶅姟绔湴鍧 - "AccessToken": "123456",// NapCat HTTP鏈嶅姟绔疶oken - "RobotQQ": "3902582794",// 褰撳墠鐧诲綍鏈哄櫒浜篞Q鍙 - "XiaoXiaoRobotQQ": "3889001741",// 灏忓皬鏈哄櫒浜篞Q鍙 - "XiuXianGroupId": [ 705807264 ] // 瑕佺洃鍚殑缇ゅ彿 + "SendApiUrl": "http://192.168.142.133:3000", // NapCat HTTP鏈嶅姟绔湴鍧 + "AccessToken": "123456", // NapCat HTTP鏈嶅姟绔疶oken + "RobotQQ": "3902582794", // 褰撳墠鐧诲綍鏈哄櫒浜篞Q鍙 + "XiaoXiaoRobotQQ": "3889001741", // 灏忓皬鏈哄櫒浜篞Q鍙 + "XiuXianGroupId": [ 705807264 ], // 瑕佺洃鍚殑缇ゅ彿 + "AutoTaskGroupId": [ 1035078191 ], // 鑷姩鍋氫换鍔$殑缇,涓昏妫鏌ユ槸鍚﹁Е鍙戜簡楠岃瘉鐮 缁欐寚瀹歈Q鍙戞秷鎭 + "SendMsgQQ": "123456789" // 鍙戦佺鑱婃秷鎭殑QQ }, "涓规柟": { "鐏鍙や父": "閰嶆柟涓昏嵂涓夊熬椋庡彾1鑽紩琛鑿╂彁1杈呰嵂娣峰厓鏋1涓圭倝瀵掗搧閾稿績鐐塡r\n閰嶆柟涓昏嵂鍐扮伒鐒拌崏1鑽紩璇卞鑽1杈呰嵂娣峰厓鏋1涓圭倝瀵掗搧閾稿績鐐", diff --git a/NapCatRobotClient/NapCatRobotClient.Core/RobotAPI/Dto/Request/PrivateSendMessageRequest.cs b/NapCatRobotClient/NapCatRobotClient.Core/RobotAPI/Dto/Request/PrivateSendMessageRequest.cs new file mode 100644 index 0000000..cb067af --- /dev/null +++ b/NapCatRobotClient/NapCatRobotClient.Core/RobotAPI/Dto/Request/PrivateSendMessageRequest.cs @@ -0,0 +1,20 @@ +锘縩amespace NapCatRobotClient.Core.RobotAPI.Dto.Request +{ + /// + /// 鍙戦佺鑱婃秷鎭姹 + /// + public class PrivateSendMessageRequest + { + /// + /// QQ鍙风爜 + /// + [JsonProperty("user_id")] + public string UserId { get; set; } + + /// + /// 娑堟伅鍐呭 + /// + [JsonProperty("message")] + public List Message { get; set; } + } +} diff --git a/NapCatRobotClient/NapCatRobotClient.Core/RobotAPI/RobotAPI.cs b/NapCatRobotClient/NapCatRobotClient.Core/RobotAPI/RobotAPI.cs index c5dd606..4e4b738 100644 --- a/NapCatRobotClient/NapCatRobotClient.Core/RobotAPI/RobotAPI.cs +++ b/NapCatRobotClient/NapCatRobotClient.Core/RobotAPI/RobotAPI.cs @@ -1,4 +1,5 @@ 锘縰sing Flurl.Http; +using Furion.Logging; using NapCatRobotClient.Core.RobotAPI.Dto.Request; namespace NapCatRobotClient.Core.RobotAPI @@ -6,16 +7,25 @@ namespace NapCatRobotClient.Core.RobotAPI public class RobotAPI { /// - /// 鍙戦佺兢鏂囨湰娑堟伅 + /// 鍙戦佺兢娑堟伅 /// - /// - /// + /// /// public static async Task SendGroupText(GroupSendMessageRequest request) { return await Post(JsonConvert.SerializeObject(request), "/send_group_msg"); } + /// + /// 鍙戦佺鑱婃秷鎭 + /// + /// + /// + public static async Task SendPrivateText(PrivateSendMessageRequest request) + { + return await Post(JsonConvert.SerializeObject(request), "/send_private_msg"); + } + private static async Task Post(string parameters, string action) { string url = App.Configuration["QQConfig:SendApiUrl"] + action; diff --git a/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/GroupService.cs b/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/GroupService.cs index 39f28be..f3a0cd6 100644 --- a/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/GroupService.cs +++ b/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/GroupService.cs @@ -4,7 +4,15 @@ namespace NapCatRobotClient.Service.Group.Service { public class GroupService : IGroupService, IScoped { - private static List GroupQQ = App.GetConfig>("QQConfig:XiuXianGroupId"); + /// + /// 淇粰澶х兢 + /// + private static List XiuXianGroup = App.GetConfig>("QQConfig:XiuXianGroupId"); + + /// + /// 鑷姩鍋氫换鍔$兢 + /// + private static List AutoTaskGroup = App.GetConfig>("QQConfig:AutoTaskGroupId"); /// /// 澶勭悊缇ゆ秷鎭 @@ -16,7 +24,7 @@ namespace NapCatRobotClient.Service.Group.Service JObject json = JObject.Parse(message); string groupId = json["group_id"]?.ToString() ?? string.Empty; string groupMsg = json["message"]?.ToString() ?? string.Empty; - if (GroupQQ.Contains(groupId) && string.IsNullOrWhiteSpace(groupMsg) is false) + if (XiuXianGroup.Contains(groupId) && string.IsNullOrWhiteSpace(groupMsg) is false) { _ = WantedPriceProcess.ProcessGroupRequest(groupId, message); @@ -32,6 +40,10 @@ namespace NapCatRobotClient.Service.Group.Service _ = ImmortalElixirProcess.ProcessGroupRequest(groupId, message); } + if (AutoTaskGroup.Contains(groupId) && string.IsNullOrWhiteSpace(groupMsg) is false) + { + _= VerifyMsgProcess.ProcessGroupRequest(groupId, message); + } return await Task.FromResult(true); } diff --git a/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/IGroupService.cs b/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/IGroupService.cs index dc94116..4d089d5 100644 --- a/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/IGroupService.cs +++ b/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/IGroupService.cs @@ -7,6 +7,6 @@ /// /// /// - public Task ProcessGroupRequest(string message); + public TaskProcessGroupRequest(string message); } } diff --git a/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/LingTianProcess.cs b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/LingTianProcess.cs index 9427b37..1aaf683 100644 --- a/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/LingTianProcess.cs +++ b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/LingTianProcess.cs @@ -18,6 +18,12 @@ namespace NapCatRobotClient.Service.Group.TextProcess try { JObject json = JObject.Parse(message); + string xx = json["user_id"]?.ToString(); + if (xx != App.Configuration["QQConfig:XiaoXiaoRobotQQ"]) + { + return false; + } + string groupMsg = JArray.Parse(json["message"].ToString()).FirstOrDefault(o => o["type"].ToString() == "text" && !string.IsNullOrWhiteSpace(o["data"]["text"].ToString()) && (o["data"]["text"].ToString().Contains("閬撳弸鏈閲囬泦鎴愭灉") || o["data"]["text"].ToString().Contains("閬撳弸鎴愬姛鏀惰幏鑽潗")))?["data"]?["text"]?.ToString(); if (string.IsNullOrWhiteSpace(groupMsg)) return false; diff --git a/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/MiJingNotifyProcess.cs b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/MiJingNotifyProcess.cs index f88a368..731ac73 100644 --- a/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/MiJingNotifyProcess.cs +++ b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/MiJingNotifyProcess.cs @@ -14,11 +14,22 @@ namespace NapCatRobotClient.Service.Group.TextProcess try { JObject json = JObject.Parse(message); + string xx = json["user_id"]?.ToString(); + if (xx != App.Configuration["QQConfig:XiaoXiaoRobotQQ"]) + { + return false; + } + var messageArray = JArray.Parse(json["message"].ToString()); - string groupMsg = messageArray.FirstOrDefault(o => o["type"].ToString() == "text" - && !string.IsNullOrWhiteSpace(o["data"]["text"].ToString()) - && (o["data"]["text"].ToString().Contains("杩涘叆绉樺锛") || o["data"]["text"].ToString().Contains("閬撳弸宸茶笍鍏ワ細")) - )?["data"]?["text"]?.ToString(); + + List keywords = new() { "杩涘叆绉樺", "閬撳弸宸茶笍鍏", "閬撳弸宸茬牬鐣", "閬撳弸宸查亖鍏", "閬撳弸宸查檷涓" }; + + string groupMsg = messageArray + .FirstOrDefault(o => + o["type"]?.ToString() == "text" + && !string.IsNullOrWhiteSpace(o["data"]?["text"]?.ToString()) + && keywords.Any(k => o["data"]["text"].ToString().Contains(k)) + )?["data"]?["text"]?.ToString(); if (string.IsNullOrWhiteSpace(groupMsg)) return false; var minutes = ParseMinutes(groupMsg); diff --git a/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/VerifyMsgProcess.cs b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/VerifyMsgProcess.cs new file mode 100644 index 0000000..08bf07d --- /dev/null +++ b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/VerifyMsgProcess.cs @@ -0,0 +1,57 @@ +锘縰sing Furion.Logging; +using NapCatRobotClient.Core.RobotAPI.Dto.Request; + +namespace NapCatRobotClient.Service.Group.TextProcess +{ + /// + /// 鑷姩鍋氫换鍔$兢瑙﹀彂楠岃瘉娑堟伅缁欐寚瀹氱殑QQ鎻愮ず + /// + public class VerifyMsgProcess + { + /// + /// 澶勭悊缇ゆ秷鎭 + /// + /// + /// + public static async Task ProcessGroupRequest(string groupId, string message) + { + try + { + JObject json = JObject.Parse(message); + + string xx = json["user_id"]?.ToString(); + if (xx != App.Configuration["QQConfig:XiaoXiaoRobotQQ"]) + { + return false; + } + string groupName = json["group_name"]?.ToString(); + List text = ["璇峰厛楠岃瘉", "璇烽獙璇", "娣辫壊鏂囧瓧"]; + if (text.Any(message.Contains)) + { + PrivateSendMessageRequest request = new() + { + UserId = App.Configuration["QQConfig:SendMsgQQ"], + Message = new() + { + new MessageItem() + { + Type = "text", + Data = new() + { + Text = $"{DateTime.Now}\r\n瑙﹀彂灏忓皬楠岃瘉娑堟伅\r\n缇ゆ樀绉:{groupName}\r\n缇ゅ彿:{groupId}" + } + } + } + }; + await RobotAPI.SendPrivateText(request); + } + } + catch (Exception ex) + { + Log.Error($@"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 鑷姩淇偧缇よЕ鍙戦獙璇佹秷鎭 鍙戠敓寮傚父锛屽紓甯镐俊鎭細{ex.Message}锛屽紓甯稿爢鏍堬細{ex.StackTrace}", true); + } + return await Task.FromResult(true); + } + + } +}