diff --git a/RoBot.Core/Utils.cs b/RoBot.Core/Utils.cs
index bab69d5..710aba7 100644
--- a/RoBot.Core/Utils.cs
+++ b/RoBot.Core/Utils.cs
@@ -2,6 +2,11 @@
{
public class Utils
{
+ ///
+ /// 格式化数字为中文单位
+ ///
+ ///
+ ///
public static string FormatNumberToChineseUnit(decimal number)
{
if (number >= 100000000) // 亿
@@ -20,6 +25,11 @@
}
}
+ ///
+ /// 解析中文数字
+ ///
+ ///
+ ///
public static decimal ParseChineseNumber(string chineseNumber)
{
if (string.IsNullOrWhiteSpace(chineseNumber))return 0;
@@ -59,8 +69,5 @@
return amount * rate;
}
-
-
-
}
}
diff --git a/XiaoXiaoRoBot/Cmd/QueryGoodsUpShopPriceCmd.cs b/XiaoXiaoRoBot/Cmd/QueryGoodsUpShopPriceCmd.cs
index 301ab2b..536ae6a 100644
--- a/XiaoXiaoRoBot/Cmd/QueryGoodsUpShopPriceCmd.cs
+++ b/XiaoXiaoRoBot/Cmd/QueryGoodsUpShopPriceCmd.cs
@@ -37,7 +37,10 @@ namespace RoBot.Start.Cmd
{
string desc = convertList[0].Text;
- if (desc.Contains("拥有药材") || (desc.Contains("名字") && desc.Contains("拥有数量")))
+ if (desc.Contains("拥有药材") ||
+ desc.Contains("的丹药背包") ||
+ (desc.Contains("名字") && desc.Contains("拥有数量"))
+ )
{
_ = Herbal(desc);
}
diff --git a/XiaoXiaoRoBot/Cmd/WantedPriceCmd.cs b/XiaoXiaoRoBot/Cmd/WantedPriceCmd.cs
new file mode 100644
index 0000000..0b2ad1f
--- /dev/null
+++ b/XiaoXiaoRoBot/Cmd/WantedPriceCmd.cs
@@ -0,0 +1,154 @@
+using System.Text.RegularExpressions;
+using Lagrange.Core.Message;
+using Lagrange.Core.Message.Entity;
+using RoBot.Core;
+using RoBot.Core.ConstValue;
+using RoBot.Core.Helper;
+using RoBot.Start.Dto.Wanted;
+using RoBot.Start.Global;
+using RoBot.Start.Message;
+using RoBot.Start.Service.Dto;
+
+namespace RoBot.Start.Cmd
+{
+ ///
+ /// 悬赏令
+ ///
+ public class WantedPriceCmd
+ {
+ public static async Task Execute(MessageChain chain)
+ {
+ var textEntities = chain.Where(o => o is TextEntity).ToList();
+ List convertList = textEntities.Cast().ToList().Where(o => o.Text.Contains("道友的个人悬赏令") || o.Text.Contains("天机悬赏令")).ToList();
+
+ foreach (var item in convertList)
+ {
+ List wantedTasks = new();
+ if (item.Text.Contains("个人悬赏令"))
+ {
+ wantedTasks = await SingleWanted(item.Text);
+ }
+ else if (item.Text.Contains("天机悬赏令"))
+ {
+ wantedTasks = await SpecialWanted(item.Text);
+ }
+ if (wantedTasks.Count > 0)
+ {
+ var systemConfig = GlobalConfig.ConfigSetting;
+ var bot = GlobalConfig.BotContext;
+
+ string msg = "";
+ List<(int Id, decimal Price)> prices = new();
+ foreach (var want in wantedTasks)
+ {
+ msg += $"✨悬赏令 {want.Id} 奖励:{want.ExtraReward.Item}\r\n";
+ msg += $"🎁修为:{Utils.FormatNumberToChineseUnit(want.BaseReward)}\r\n";
+ var goodsInfo = RedisHelper.Client.HGet(RedisPrefix.GoodsKey, want.ExtraReward.Item);
+ if (goodsInfo is not null)
+ {
+ msg += $"💵坊市价格:{goodsInfo.ShowPriceDesc}\r\n";
+
+ prices.Add((want.Id, goodsInfo.Price));
+ }
+ //msg += $"炼金价格:\r\n";
+ msg += $"\r\n";
+ }
+ var maxWanted = wantedTasks.MaxBy(o => o.BaseReward);
+
+ msg += "━━━━━━━━━━━━━━━\r\n";
+ msg += $"✨最高修为:悬赏令 {maxWanted.Id} ({Utils.FormatNumberToChineseUnit(maxWanted.BaseReward)})\r\n";
+ if (prices.Count > 0)
+ {
+ var maxPrice = prices.MaxBy(o => o.Price);
+ msg += $"💰最高价格:悬赏令 {maxPrice.Id} ({Utils.FormatNumberToChineseUnit(maxPrice.Price)})";
+ }
+ await bot.SendMsg((uint)systemConfig.GroupQQ, msg);
+ }
+ }
+
+
+ return await Task.FromResult(true);
+ }
+
+ ///
+ /// 个人悬赏令
+ ///
+ ///
+ ///
+ private static async Task> SingleWanted(string message)
+ {
+ List result = new();
+
+ // 解析任务信息
+ var taskRegex = new Regex(
+ @"(?\d+)、(?.*?),
+ 完成几率(?\d+),
+ 基础报酬(?\d+)修为,
+ 预计需(?\d+分钟),
+ 可能额外获得:(?[^::]+):(?- [^!!]+)!?",
+ RegexOptions.IgnorePatternWhitespace);
+
+ foreach (Match match in taskRegex.Matches(message))
+ {
+ result.Add(new()
+ {
+ Id = int.Parse(match.Groups["id"].Value),
+ Name = match.Groups["name"].Value.Trim(),
+ SuccessRate = match.Groups["rate"].Value + "%",
+ BaseReward = long.Parse(match.Groups["reward"].Value),
+ Duration = match.Groups["duration"].Value,
+ ExtraReward = new ExtraReward
+ {
+ Grade = match.Groups["grade"].Value.Trim(),
+ Item = match.Groups["item"].Value.Trim()
+ }
+ });
+ }
+ return await Task.FromResult(result);
+ }
+
+ ///
+ /// 天机悬赏令
+ ///
+ ///
+ ///
+ private static async Task
> SpecialWanted(string message)
+ {
+ List result = new();
+
+ var blockRegex = new Regex(
+ @"悬赏(?[壹贰叁肆伍陆柒捌玖拾])·(?[^\n\r]+)\s+" +
+ @".*?成功率:(?\d+)%\s+" +
+ @".*?预计耗时:(?[\d一二三四五六七八九十]+分钟)\s+" +
+ @".*?基础奖励(?\d+)修为\s+" +
+ @".*?额外机缘:(?[^「」]+)「(?- [^」]+)」",
+ RegexOptions.Multiline);
+
+ foreach (Match match in blockRegex.Matches(message))
+ {
+ string idCN = match.Groups["idCN"].Value;
+ result.Add(new()
+ {
+ Id = ChineseNumberMap.ContainsKey(idCN) ? ChineseNumberMap[idCN] : 0,
+ Name = match.Groups["name"].Value.Trim(),
+ SuccessRate = match.Groups["rate"].Value + "%",
+ Duration = match.Groups["duration"].Value.Trim(),
+ BaseReward = long.Parse(match.Groups["reward"].Value),
+ ExtraReward = new ExtraReward
+ {
+ Grade = match.Groups["grade"].Value.Trim(),
+ Item = match.Groups["item"].Value.Trim()
+ }
+ });
+ }
+ return await Task.FromResult(result);
+ }
+
+ private static readonly Dictionary ChineseNumberMap = new()
+ {
+ { "壹", 1 }, { "贰", 2 }, { "叁", 3 }, { "肆", 4 }, { "伍", 5 },
+ { "陆", 6 }, { "柒", 7 }, { "捌", 8 }, { "玖", 9 }, { "拾", 10 }
+ };
+
+ }
+}
diff --git a/XiaoXiaoRoBot/Dto/ConfigDto/ConfigSetting.cs b/XiaoXiaoRoBot/Dto/ConfigSet/ConfigSetting.cs
similarity index 100%
rename from XiaoXiaoRoBot/Dto/ConfigDto/ConfigSetting.cs
rename to XiaoXiaoRoBot/Dto/ConfigSet/ConfigSetting.cs
diff --git a/XiaoXiaoRoBot/Dto/Wanted/WantedInfo.cs b/XiaoXiaoRoBot/Dto/Wanted/WantedInfo.cs
new file mode 100644
index 0000000..6bc91ff
--- /dev/null
+++ b/XiaoXiaoRoBot/Dto/Wanted/WantedInfo.cs
@@ -0,0 +1,54 @@
+namespace RoBot.Start.Dto.Wanted
+{
+ ///
+ /// 悬赏令信息
+ ///
+ public class WantedTaskInfo
+ {
+ ///
+ /// 序号
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// 任务名称
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// 成功几率
+ ///
+ public string SuccessRate { get; set; }
+
+ ///
+ /// 修为值
+ ///
+ public long BaseReward { get; set; }
+
+ ///
+ /// 需要时间
+ ///
+ public string Duration { get; set; }
+
+ ///
+ /// 额外奖励
+ ///
+ public ExtraReward ExtraReward { get; set; }
+ }
+
+ ///
+ /// 额外奖励
+ ///
+ public class ExtraReward
+ {
+ ///
+ /// 奖励等级
+ ///
+ public string Grade { get; set; }
+
+ ///
+ /// 奖励物品
+ ///
+ public string Item { get; set; }
+ }
+}
diff --git a/XiaoXiaoRoBot/Program.cs b/XiaoXiaoRoBot/Program.cs
index cf9faed..435a468 100644
--- a/XiaoXiaoRoBot/Program.cs
+++ b/XiaoXiaoRoBot/Program.cs
@@ -53,6 +53,7 @@ bot.Invoker.OnBotLogEvent += (sender, e) =>
{
RecordLog = false;
LoginSuccess = true;
+ Logs.Write($"Login success: {bot.BotUin} {bot.BotName}");
_ = KeystoreConfig.SaveBotKeystore(bot.UpdateKeystore());
LoadLoginConfig();
}
@@ -85,6 +86,9 @@ else
async Task HandleGroupMessage(MessageChain chain)
{
+ // 悬赏令查价
+ await WantedPriceCmd.Execute(chain);
+
// 坊市生成上架命令
await QueryGoodsUpShopPriceCmd.Execute(chain);