diff --git a/RoBot.Core/Helper/RedisHelper.cs b/RoBot.Core/Helper/RedisHelper.cs index 9a608ed..5ed1469 100644 --- a/RoBot.Core/Helper/RedisHelper.cs +++ b/RoBot.Core/Helper/RedisHelper.cs @@ -19,6 +19,7 @@ namespace RoBot.Core.Helper Deserialize = JsonConvert.DeserializeObject }; Client.Set(Guid.NewGuid().ToString(), "", 10); + Console.WriteLine("初始化Redis..."); } } } diff --git a/XiaoXiaoRoBot/Cmd/MiJingNotify.cs b/XiaoXiaoRoBot/Cmd/MiJingNotify.cs new file mode 100644 index 0000000..bcd505c --- /dev/null +++ b/XiaoXiaoRoBot/Cmd/MiJingNotify.cs @@ -0,0 +1,82 @@ +using Lagrange.Core.Message; +using Lagrange.Core.Message.Entity; +using RoBot.Start.Global; +using RoBot.Start.LogConfig; +using RoBot.Start.Message; +using System.Globalization; +using System.Text.RegularExpressions; + +namespace RoBot.Start.Cmd +{ + /// + /// 秘境结束通知 + /// + public class MiJingNotify + { + public static async Task Execute(MessageChain chain) + { + try + { + MarkdownEntity miJingEntity = chain.Where(o => o is MarkdownEntity) + .Cast() + .Where(o => o.Data.Content.Contains("进入秘境")) + .FirstOrDefault(); + if (miJingEntity is not null) + { + MentionEntity callQQMember = chain.Where(o => o is MentionEntity).Cast().FirstOrDefault(); + if (callQQMember is not null) + { + string miJingContent = miJingEntity.Data.Content; + var minutes = ParseMinutes(miJingContent); + if (minutes > 0) + { + uint qqNumber = callQQMember.Uin; + ScheduleReminder(qqNumber, minutes); + } + } + } + } + catch (Exception ex) + { + Logs.Write($@"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 秘境结束通知 发生异常,异常信息:{ex.Message},异常堆栈:{ex.StackTrace}", true); + } + return await Task.FromResult(true); + } + + private static void ScheduleReminder(uint userId, int minutes) + { + TimeSpan delay = TimeSpan.FromMinutes(minutes); + + Logs.Write($@"{DateTime.Now:yyyy-MM-dd HH:mm:ss} {userId} 秘境通知 {minutes}分钟"); + + _ = Task.Run(async () => + { + await Task.Delay(delay); + Dto.ConfigDto.ConfigSetting systemConfig = GlobalConfig.ConfigSetting; + Lagrange.Core.BotContext bot = GlobalConfig.BotContext; + await bot.SendMentionMsg((uint)systemConfig.GroupQQ, userId, $"秘境结算通知,该结算奖励了!({minutes} 分钟)"); + }); + } + + private static int ParseMinutes(string content) + { + if (string.IsNullOrWhiteSpace(content)) return 0; + + var match = Regex.Match(content, @"花费时间[::]\s*(\d+(?:\.\d+)?)", RegexOptions.Compiled); + if (!match.Success) + { + match = Regex.Match(content, @"(\d+(?:\.\d+)?)", RegexOptions.Compiled); + } + + if (match.Success) + { + if (double.TryParse(match.Groups[1].Value, NumberStyles.Float, CultureInfo.InvariantCulture, out double val)) + { + return (int)Math.Round(val); + } + } + + return 0; + } + } +} diff --git a/XiaoXiaoRoBot/Message/RoBotMessage.cs b/XiaoXiaoRoBot/Message/RoBotMessage.cs index b2275f1..bad2f2a 100644 --- a/XiaoXiaoRoBot/Message/RoBotMessage.cs +++ b/XiaoXiaoRoBot/Message/RoBotMessage.cs @@ -17,5 +17,19 @@ namespace RoBot.Start.Message var groupMessageChain = MessageBuilder.Group(groupId).Text(message); return await bot.SendMessage(groupMessageChain.Build()); } + + /// + /// 给指定QQ发送消息 + /// + /// bo + /// 群组 + /// 指定QQ + /// 消息 + /// + public static async Task SendMentionMsg(this Lagrange.Core.BotContext bot, uint groupId, uint mentionId, string message) + { + var groupMessageChain = MessageBuilder.Group(groupId).Mention(mentionId).Text(message); + return await bot.SendMessage(groupMessageChain.Build()); + } } } diff --git a/XiaoXiaoRoBot/Program.cs b/XiaoXiaoRoBot/Program.cs index 5405880..8381f62 100644 --- a/XiaoXiaoRoBot/Program.cs +++ b/XiaoXiaoRoBot/Program.cs @@ -87,6 +87,10 @@ else LoadLoginConfig(); } + + + + void HandleGroupMessage(MessageChain chain) { // 悬赏令查价 @@ -109,6 +113,9 @@ void HandleGroupMessage(MessageChain chain) // 查丹方 _ = ImmortalElixirCmd.Execute(chain); + + // 秘境通知 + _ = MiJingNotify.Execute(chain); } void Init() diff --git a/XiaoXiaoRoBot/appsettings.json b/XiaoXiaoRoBot/appsettings.json index 4c7464c..fc98553 100644 --- a/XiaoXiaoRoBot/appsettings.json +++ b/XiaoXiaoRoBot/appsettings.json @@ -118,6 +118,11 @@ "🍊🐠⬇️🐦": "沉鱼落雁", "🤍🐳🥩💃": "心惊肉跳", "👚💉🚀☃️": "一针见血", - "💍🌸🧶🛕": "借花献佛" + "💍🌸🧶🛕": "借花献佛", + "🍊👗🎀✔️": "成群结队", + "☝️️👏🏻🐔🈴": "一拍即合", + "🍏♣🎋🐎": "青梅竹马", + "🚬👦👂👀": "掩人耳目", + "🌾💊😣👄": "良药苦口" } } \ No newline at end of file