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;
}
}
}