From 7822a1ba49e06cbbf82992bc3b1f75fefea8cb7d Mon Sep 17 00:00:00 2001 From: LyMysterious Date: Fri, 17 Oct 2025 21:33:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/EntryController.cs | 4 + .../NapCatRobotClient.API/appsettings.json | 129 +++++++++++++++ .../RobotAPI/RobotAPI.cs | 1 - .../Group/Service/GroupService.cs | 10 +- .../Group/TextProcess/ChineseIdiomsProcess.cs | 76 +++++++++ .../Group/TextProcess/GoodsUpShopProcess.cs | 154 ++++++++++++++++++ .../TextProcess/ImmortalElixirProcess.cs | 75 +++++++++ .../Group/TextProcess/LingTianProcess.cs | 3 + .../Group/TextProcess/MiJingNotifyProcess.cs | 100 ++++++++++++ 9 files changed, 550 insertions(+), 2 deletions(-) create mode 100644 NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/ChineseIdiomsProcess.cs create mode 100644 NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/GoodsUpShopProcess.cs create mode 100644 NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/ImmortalElixirProcess.cs create mode 100644 NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/MiJingNotifyProcess.cs diff --git a/NapCatRobotClient/NapCatRobotClient.API/Controllers/EntryController.cs b/NapCatRobotClient/NapCatRobotClient.API/Controllers/EntryController.cs index 33f9724..1b0e8bc 100644 --- a/NapCatRobotClient/NapCatRobotClient.API/Controllers/EntryController.cs +++ b/NapCatRobotClient/NapCatRobotClient.API/Controllers/EntryController.cs @@ -14,6 +14,10 @@ namespace NapCatRobotClient.API.Controllers _dispatcherService = dispatcherService; } + /// + /// ½ÓÊÕÏûÏ¢Èë¿Ú + /// + /// [HttpPost] public async Task Post() { diff --git a/NapCatRobotClient/NapCatRobotClient.API/appsettings.json b/NapCatRobotClient/NapCatRobotClient.API/appsettings.json index b2b9a09..f2b26c8 100644 --- a/NapCatRobotClient/NapCatRobotClient.API/appsettings.json +++ b/NapCatRobotClient/NapCatRobotClient.API/appsettings.json @@ -16,6 +16,135 @@ "SendApiUrl": "http://192.168.142.133:3000", "AccessToken": "123456", "RobotQQ": "3902582794", + "XiaoXiaoRobotQQ": "3889001741", "XiuXianGroupId": "705807264" + }, + "丹方": { + "ç­ç¥žå¤ä¸¸": "é…æ–¹ä¸»è¯ä¸‰å°¾é£Žå¶1è¯å¼•è¡€è©æ1è¾…è¯æ··å…ƒæžœ1丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å†°çµç„°è‰1è¯å¼•诱妖è‰1è¾…è¯æ··å…ƒæžœ1丹炉寒é“铸心炉", + "易筋丹": "é…æ–¹ä¸»è¯ä¸‰å°¾é£Žå¶1è¯å¼•è¡€è©æ1è¾…è¯å¤©å‰‘笋1丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å†°çµç„°è‰1è¯å¼•诱妖è‰1è¾…è¯å¤©å‰‘笋1丹炉寒é“铸心炉", + "é™ç¦…魔丸": "é…æ–¹ä¸»è¯å…«è§’玄冰è‰1è¯å¼•芒焰果1è¾…è¯è¡€çŽ‰ç«¹1丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å¥‡èŒ¸é€šå¤©èŠ1è¯å¼•é—®é“花1è¾…è¯è¡€çŽ‰ç«¹1丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯åœ°å¿ƒæ·¬çµä¹³1è¯å¼•å®å¿ƒè‰1è¾…è¯è¡€çŽ‰ç«¹1丹炉寒é“铸心炉", + "化煞魔丸": "é…æ–¹ä¸»è¯è¡€èŽ²ç²¾1è¯å¼•血莲精1è¾…è¯çŸ³é¾™èŠ®1丹炉寒é“铸心炉", + "养气丹": "é…æ–¹ä¸»è¯è¡€èŽ²ç²¾1è¯å¼•æ’心è‰1è¾…è¯è¡€èŽ²ç²¾1丹炉寒é“铸心炉", + "素心真丸": "é…æ–¹ä¸»è¯é›ªçŽ‰éª¨å‚1è¯å¼•穿心莲1è¾…è¯ä¼´å¦–è‰1丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯è…骨çµèб1è¯å¼•龙鳞果1è¾…è¯ä¼´å¦–è‰1丹炉寒é“铸心炉", + "地仙玄丸": "é…æ–¹ä¸»è¯æª€èŠ’ä¹å¶èб1è¯å¼•浩淼水藤1è¾…è¯ç‹¼æ¡ƒ1丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯åŽæ°´çŽ„å†°æžœ1è¯å¼•é“蕴花1è¾…è¯ç‹¼æ¡ƒ1丹炉寒é“铸心炉", + "天尘丹": "é…æ–¹ä¸»è¯åœ°å¿ƒæ·¬çµä¹³1è¯å¼•å®å¿ƒè‰1è¾…è¯å…«è§’玄冰è‰1丹炉寒é“铸心炉", + "金仙造化丹": "é…æ–¹ä¸»è¯ç¦»ç«æ¢§æ¡èŠ7è¯å¼•å®å¿ƒè‰1è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±7丹炉寒é“铸心炉\r\n\r\nç¦»ç«æ¢§æ¡èŠ=尘磊岩麟果,è¯å¼•=ä»»æ„æ€§å¹³,太乙碧莹花=森檀木=炼心èŠ=é‡å…ƒæ¢è¡€è‰", + "创世丹": "é…æ–¹ä¸»è¯ç¦»ç«æ¢§æ¡èŠ5è¯å¼•å®å¿ƒè‰1è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±5丹炉寒é“铸心炉\r\n\r\nç¦»ç«æ¢§æ¡èŠ=尘磊岩麟果,è¯å¼•=ä»»æ„æ€§å¹³,太乙碧莹花=森檀木=炼心èŠ=é‡å…ƒæ¢è¡€è‰", + "太乙炼髓丹": "é…æ–¹ä¸»è¯å‰‘魄竹笋3è¯å¼•鬼é¢èб3è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±3丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å‰‘魄竹笋3è¯å¼•炼心èŠ3è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±3丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ3è¯å¼•é‡å…ƒæ¢è¡€è‰3è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±3丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ3è¯å¼•æ¢§æ¡æœ¨3è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±3丹炉寒é“铸心炉", + "混沌丹": "é…æ–¹ä¸»è¯ç¦»ç«æ¢§æ¡èŠ4è¯å¼•å®å¿ƒè‰1è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±4丹炉寒é“铸心炉", + "æžå“混沌丹": "é…æ–¹ä¸»è¯ç¦»ç«æ¢§æ¡èŠ5è¯å¼•å®å¿ƒè‰1è¾…è¯é˜´é˜³é»„泉花9丹炉寒é“铸心炉\r\n\r\nç¦»ç«æ¢§æ¡èŠ=尘磊岩麟果,è¯å¼•=ä»»æ„æ€§å¹³,阴阳黄泉花=厉魂血ç€", + "太上玄门丹": "é…æ–¹ä¸»è¯å‰‘魄竹笋1è¯å¼•鬼é¢èб1è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±1丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å‰‘魄竹笋1è¯å¼•炼心èŠ1è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±1丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ1è¯å¼•é‡å…ƒæ¢è¡€è‰1è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±1丹炉寒é“铸心炉", + "金仙破厄丹": "é…æ–¹ä¸»è¯å‰‘魄竹笋2è¯å¼•鬼é¢èб2è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±2丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å‰‘魄竹笋2è¯å¼•炼心èŠ2è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±2丹炉寒é“铸心炉", + "太清玉液丹": "é…æ–¹ä¸»è¯å°˜ç£Šå²©éºŸæžœ20è¯å¼•å®å¿ƒè‰1è¾…è¯åœ°é¾™å¹²20丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å‰‘魄竹笋20è¯å¼•鬼é¢èб20è¾…è¯åœ°é¾™å¹²20丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å‰‘魄竹笋20è¯å¼•炼心èŠ20è¾…è¯åœ°é¾™å¹²20丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ20è¯å¼•é‡å…ƒæ¢è¡€è‰20è¾…è¯åœ°é¾™å¹²20丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å‰‘æ˜Žå¿ƒé—®é“æžœ20è¯å¼•æ¢§æ¡æœ¨20è¾…è¯åœ°é¾™å¹²20丹炉寒é“铸心炉\r\n\r\nè¾…è¯åœ°é¾™å¹²=龙须藤=鬼é¢èб=æ¢§æ¡æœ¨", + "è©æè¯é“丹": "é…æ–¹ä¸»è¯å‰‘魄竹笋10è¯å¼•鬼é¢èб10è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±10丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å‰‘魄竹笋10è¯å¼•炼心èŠ10è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±10丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ10è¯å¼•é‡å…ƒæ¢è¡€è‰10è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±10丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ10è¯å¼•æ¢§æ¡æœ¨10è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±10丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å°˜ç£Šå²©éºŸæžœ10è¯å¼•å®å¿ƒè‰1è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±10丹炉寒é“铸心炉\r\n\r\nç¦»ç«æ¢§æ¡èŠ=尘磊岩麟果,è¯å¼•=ä»»æ„æ€§å¹³,太乙碧莹花=森檀木=炼心èŠ=é‡å…ƒæ¢è¡€è‰", + "大é“归一丹": "é…æ–¹ä¸»è¯å‰‘魄竹笋8è¯å¼•鬼é¢èб8è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±8丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å‰‘魄竹笋8è¯å¼•炼心èŠ8è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±8丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ8è¯å¼•é‡å…ƒæ¢è¡€è‰8è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±8丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ8è¯å¼•æ¢§æ¡æœ¨8è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±8丹炉寒é“铸心炉\r\n\r\nè¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±=森檀木=炼心èŠ=é‡å…ƒæ¢è¡€è‰", + "ä¹å¤©è•´ä»™ä¸¹": "é…æ–¹ä¸»è¯å‰‘魄竹笋6è¯å¼•鬼é¢èб6è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±6丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å‰‘魄竹笋6è¯å¼•炼心èŠ6è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±6丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ6è¯å¼•é‡å…ƒæ¢è¡€è‰6è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±6丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ6è¯å¼•æ¢§æ¡æœ¨6è¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±6丹炉寒é“铸心炉\r\n\r\nè¾…è¯å¤ªä¹™ç¢§èŽ¹èŠ±=森檀木=炼心èŠ=é‡å…ƒæ¢è¡€è‰", + "æžå“创世丹": "é…æ–¹ä¸»è¯å‰‘魄竹笋6è¯å¼•鬼é¢èб6è¾…è¯é˜´é˜³é»„泉花11丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯å‰‘魄竹笋6è¯å¼•炼心èŠ6è¾…è¯é˜´é˜³é»„泉花11丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ6è¯å¼•é‡å…ƒæ¢è¡€è‰6è¾…è¯é˜´é˜³é»„泉花11丹炉寒é“铸心炉\r\né…æ–¹ä¸»è¯æ˜Žå¿ƒé—®é“æžœ6è¯å¼•æ¢§æ¡æœ¨6è¾…è¯é˜´é˜³é»„泉花11丹炉寒é“铸心炉", + "渡劫仙丹": "é…æ–¹ä¸»è¯ç¦»ç«æ¢§æ¡èŠ9è¯å¼•石龙芮4è¾…è¯æ£®æª€æœ¨9丹炉寒é“铸心炉" + }, + "猜æˆè¯­": { + "🚶ðŸŽðŸ‘€ðŸŒ¸": "走马观花", + "💧ðŸ¾ðŸ”¥ðŸ¥µ": "æ°´æ·±ç«çƒ­", + "😞🌸😭👧ðŸ»": "æ„眉苦脸", + "🌬ï¸ðŸŒ¶ï¸âï¸ðŸŽ¤": "广‹‰å¼¹å”±", + "🦩ðŸ§ðŸ”👨": "鹤立鸡群", + "🕸ï¸ðŸ‘ï¸ðŸŸðŸš¢": "望眼欲穿", + "👩â€ðŸŽ¨ðŸðŸ¦¢ðŸ¾": "画蛇添足", + "ðŸƒðŸšŒðŸ‘ŒðŸ²": "å¶å…¬å¥½é¾™", + "🌸ðŸðŸ¯ðŸ¥„": "花里胡哨", + "â¤ï¸ðŸ¤”ðŸ…ðŸŠ": "心想事æˆ", + "🌪ï¸ðŸ¼ðŸŒŠðŸ³": "风平浪é™", + "ðŸšðŸ‘´â­•👦": "è¿”è€è¿˜ç«¥", + "🆘🧑📞😀": "助人为ä¹", + "ðŸŠðŸŸðŸ”ªðŸ‘¨": "æ¶è¯­ä¼¤äºº", + "🛀ðŸ»ðŸ˜­âŒðŸ’¦": "欲哭无泪", + "🥃💧🚗💴": "æ¯æ°´è½¦è–ª", + "ðŸµðŸšâŒðŸ¤”": "èŒ¶é¥­ä¸æ€", + "👨⛰ï¸ðŸ‘¨ðŸŒŠ": "人山人海", + "🤚🤖👨": "白手起家", + "ðŸ·ðŸ‘«ðŸ¶ðŸ‘‰": "猪朋狗å‹", + "7ï¸âƒ£ðŸ‘†8ï¸âƒ£ðŸ‘‡": "七上八下", + "🔪â›ï¸ðŸ”¥ðŸŒ±": "刀耕ç«ç§", + "✉ï¸ðŸ…🥚🥚": "信誓旦旦", + "âœï¸ðŸðŸ‘‡ðŸ¦¶": "画蛇添足", + "💩🈚💰ðŸ": "岿— å‰ä¾‹", + "🤤ðŸðŸ¦ðŸ”’": "æµç¦»å¤±æ‰€", + "😔ðŸŸðŸ‚🦢": "沉鱼è½é›", + "😄ðŸðŸ±ðŸ”ª": "笑里è—刀", + "👗ðŸ‰ðŸ’ƒâœ‹": "群龙无首", + "👗ðŸ‰ðŸˆšâœ‹": "群龙无首", + "â¤ï¸ðŸ’¡ðŸ‘£ðŸ“£": "心照ä¸å®£", + "🌫ï¸ðŸðŸ‘€ðŸŒ·": "雾里看花", + "â›°ï¸ðŸšªðŸŒŠ": "山盟海誓", + "ðŸ…🌊📞": "四海为家", + "ðŸ“ðŸ•ðŸšðŸŒ": "鸡犬å‡å¤©", + "ðŸºðŸš¬4ï¸âƒ£ðŸ›«": "狼烟四起", + "🦱😵👀🌀": "头晕眼花", + "🎹🧒1⃣🈴": "情投æ„åˆ", + "🔫🌲💣🌧ï¸": "枪林弹雨", + "🤨👀📠💑": "眉目传情", + "🈯ðŸƒðŸ¤¬ðŸŒ³": "指桑骂æ§", + "ðŸŽðŸ‘†ðŸ»ðŸ•¸ï¸ðŸš¶": "礼尚往æ¥", + "ðŸ±ðŸ™…🉑👄": "妙ä¸å¯è¨€", + "🧑ðŸ‘â˜ðŸˆ¯": "首屈一指", + "ðŸ‘🗣ðŸ¤â˜¯": "能说会é“", + "📱ðŸ’🔗🪵": "移花接木", + "🗣ðŸ‹â¤ï¸ðŸ¦’": "语é‡å¿ƒé•¿", + "😲🌥👋🌎": "惊天动地", + "🙅ðŸ»â€â™€ï¸ðŸ’ªðŸ¦”🦶": "ä¸åèµæ•™", + "🥶🌪ï¸ðŸ¦”": "寒风刺骨", + "😣ðŸ¤ðŸ”ðŸ–ðŸ»": "痛心疾首", + "ðŸ’ðŸ‘🌙⭕": "花好月圆", + "ðŸŸðŸðŸ¹ðŸ’ª": "渔ç¿ä¹‹åˆ©", + "ðŸ‘🚶ðŸ¯ðŸ‘„": "羊入虎å£", + "â›°ðŸ–ï¸ðŸŠðŸ‘¨": "三五æˆç¾¤", + "👄🧱ðŸðŸ§": "唇枪舌战", + "ðŸ–👆🔆ðŸ·": "掌上明ç ", + "🌊🥀🪨😖": "海枯石烂", + "🕳ï¸ðŸ ðŸŒºðŸ•¯": "洞房花烛", + "🌿🌑🌺🌕": "柳暗花明", + "🥃ðŸ½ï¸ðŸºðŸ“•": "æ¯ç›˜ç‹¼è—‰", + "👺👹👻👾": "妖魔鬼怪", + "🈚💵🇿👶": "无价之å®", + "🥇ðŸŽðŸš¿ðŸ–ðŸ»": "金盆洗手", + "👶ðŸðŸ‘¹â¤ï¸": "人é¢å…½å¿ƒ", + "🎉🌥ðŸ®ðŸŒŽ": "欢天喜地", + "🥴➕1ï¸âƒ£ðŸ’¡": "罪加一等", + "🧑👼👫💩": "人神共愤", + "💑ðŸ”🌹🔥": "喜上眉梢", + "ðŸ–🌸👨🚪": "五花八门", + "ðŸ‰1ï¸âƒ£ðŸ”­ðŸ§³": "å¾—æ„忘形", + "🔪🛶⚽⚔": "刻舟求剑", + "ðŸ½ðŸšªðŸ‘ˆâ˜¯": "æ—门左é“", + "ðŸ”ï¸ðŸ›ðŸ’§âž–": "山釿°´å¤", + "🌪🌂🥂👨": "风雨交加", + "🧑📣ðŸ²â™¨": "人声鼎沸", + "ðŸðŸ“±ðŸŽµðŸ§£": "阳奉阴è¿", + "ðŸŠðŸ ðŸðŸƒ": "æˆå®¶ç«‹ä¸š", + "ðŸ´â¤ï¸ðŸ‘ŸðŸ’ª": "é½å¿ƒå力", + "☀ï¸â¬‡ï¸ðŸ‰ðŸ”": "æ—¥è½è¥¿å±±", + "â„ï¸ðŸŒ§ï¸â­ï¸ðŸŒªï¸": "血雨腥风", + "📖💰💃🚗": "学富五车", + "👄👄📷📠": "å£å£ç›¸ä¼ ", + "ðŸ»ðŸˆ¶ðŸŠðŸŽ‹": "胸有æˆç«¹", + "ðŸŸðŸŽµðŸŒ€ðŸŒ¾": "余音绕æ¢", + "1ï¸âƒ£ðŸ•¸ï¸ðŸˆšï¸ðŸ’°": "一往无å‰", + "📢ðŸœðŸ””ðŸ‰": "å…«é¢ç޲ç‘", + "ðŸðŸ”🆘👨": "èˆå·±æ•‘人", + "👂👀": "耳目一新", + "ðŸŠðŸ â¬‡ï¸ðŸ¦": "沉鱼è½é›", + "ðŸ¤ðŸ³ðŸ¥©ðŸ’ƒ": "心惊肉跳", + "👚💉🚀☃ï¸": "一针è§è¡€", + "ðŸ’🌸🧶🛕": "借花献佛", + "ðŸŠðŸ‘—🎀✔ï¸": "æˆç¾¤ç»“队", + "â˜ï¸ï¸ðŸ‘ðŸ»ðŸ”🈴": "一æ‹å³åˆ", + "ðŸâ™£ðŸŽ‹ðŸŽ": "é’æ¢…竹马", + "🚬👦👂👀": "掩人耳目", + "🌾💊😣👄": "良è¯è‹¦å£", + "🚴ðŸ…😞👇": "骑虎难下", + "âŒðŸ‘€ðŸ˜ðŸ¤”": "ä¸å ªè®¾æƒ³", + "ðŸºðŸ€": "乿­»ä¸€ç”Ÿ", + "😲ðŸ¹ðŸ‡¿ðŸ¦": "惊弓之鸟", + "ðŸ“✈ï¸ðŸ¥šðŸ¤›": "鸡飞蛋打" } } diff --git a/NapCatRobotClient/NapCatRobotClient.Core/RobotAPI/RobotAPI.cs b/NapCatRobotClient/NapCatRobotClient.Core/RobotAPI/RobotAPI.cs index 465278e..c5dd606 100644 --- a/NapCatRobotClient/NapCatRobotClient.Core/RobotAPI/RobotAPI.cs +++ b/NapCatRobotClient/NapCatRobotClient.Core/RobotAPI/RobotAPI.cs @@ -23,7 +23,6 @@ namespace NapCatRobotClient.Core.RobotAPI .WithHeader("Content-Type", "application/json;charset=utf-8") .PostStringAsync(parameters) .ReceiveString(); - Console.WriteLine($"{DateTime.Now} 请求地å€:{url} 请求结果:{response}"); return response; } } diff --git a/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/GroupService.cs b/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/GroupService.cs index 5bf724a..9b2b1ff 100644 --- a/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/GroupService.cs +++ b/NapCatRobotClient/NapCatRobotClient.Service/Group/Service/GroupService.cs @@ -22,7 +22,15 @@ namespace NapCatRobotClient.Service.Group.Service _ = InertOrUpdateGoodsInfoProcess.ProcessGroupRequest(groupId, message); - _= LingTianProcess.ProcessGroupRequest(groupId, message); + _ = LingTianProcess.ProcessGroupRequest(groupId, message); + + _ = ChineseIdiomsProcess.ProcessGroupRequest(groupId, message); + + _ = GoodsUpShopProcess.ProcessGroupRequest(groupId, message); + + _ = MiJingNotifyProcess.ProcessGroupRequest(groupId, message); + + _ = ImmortalElixirProcess.ProcessGroupRequest(groupId, message); } return await Task.FromResult(true); diff --git a/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/ChineseIdiomsProcess.cs b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/ChineseIdiomsProcess.cs new file mode 100644 index 0000000..81f322f --- /dev/null +++ b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/ChineseIdiomsProcess.cs @@ -0,0 +1,76 @@ +using Furion.Logging; +using NapCatRobotClient.Core.RobotAPI.Dto.Request; + +namespace NapCatRobotClient.Service.Group.TextProcess +{ + /// + /// 猜æˆè¯­ + /// + public class ChineseIdiomsProcess + { + /// + /// 处ç†ç¾¤æ¶ˆæ¯ + /// + /// + /// + public static async Task ProcessGroupRequest(string groupId, string message) + { + try + { + JObject json = JObject.Parse(message); + string groupMsg = JArray.Parse(json["message"].ToString()).FirstOrDefault(o => o["type"].ToString() == "text" + && !string.IsNullOrWhiteSpace(o["data"]["text"].ToString()) && (o["data"]["text"].ToString().Contains("è¦é“å‹çœ‹è¡¨æƒ…猜æˆè¯­")))?["data"]?["text"]?.ToString(); + if (string.IsNullOrWhiteSpace(groupMsg)) return false; + + string pattern = @"题目:(.+)"; + Match match = Regex.Match(groupMsg, pattern); + if (match.Success) + { + string emojiString = match.Groups[1].Value.Trim(); + Dictionary dict = App.GetConfig>("猜æˆè¯­"); + if (dict?.Count > 0) + { + foreach (var item in dict) + { + if (emojiString.Contains(item.Key)) + { + GroupSendMessageRequest request = new() + { + GroupId = groupId, + Message = new() + { + new MessageItem() + { + Type = "reply", + Data = new() + { + Id = json["message_id"].ToString() + } + }, + new MessageItem() + { + Type = "text", + Data = new() + { + Text = item.Value + } + }, + } + }; + await RobotAPI.SendGroupText(request); + break; + } + } + } + } + + } + catch (Exception ex) + { + Log.Error($@"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 猜æˆè¯­ å‘生异常,异常信æ¯ï¼š{ex.Message},异常堆栈:{ex.StackTrace}", true); + } + return await Task.FromResult(true); + } + + } +} diff --git a/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/GoodsUpShopProcess.cs b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/GoodsUpShopProcess.cs new file mode 100644 index 0000000..f0aaf0c --- /dev/null +++ b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/GoodsUpShopProcess.cs @@ -0,0 +1,154 @@ +using Furion.Logging; +using NapCatRobotClient.Core.RobotAPI.Dto.Request; + +namespace NapCatRobotClient.Service.Group.TextProcess +{ + /// + /// åŠå¸‚上架命令 + /// + public class GoodsUpShopProcess + { + public static async Task ProcessGroupRequest(string groupId, string message) + { + try + { + JObject json = JObject.Parse(message); + var messageArray = JArray.Parse(json["message"].ToString()); + string groupMsg = messageArray.FirstOrDefault(o => o["type"].ToString() == "text" + && !string.IsNullOrWhiteSpace(o["data"]["text"].ToString()))?["data"]?["text"]?.ToString(); + if (string.IsNullOrWhiteSpace(groupMsg)) return false; + + // å°å°è¯æèƒŒåŒ… + List keyWord = new() { "拥有数é‡", "åŠå¸‚æ•°æ®" }; + if (keyWord.All(k => groupMsg.Contains(k))) + { + RedisHelper.Client.Set(json["message_id"].ToString(), groupMsg, 60 * 10); + } + // 用户查询上架 + else if (groupMsg.Contains("查价格") || groupMsg.Contains("查上架") && messageArray.Any(o => o["type"].ToString() == "reply")) + { + string replyId = messageArray.FirstOrDefault(o => o["type"].ToString() == "reply")["data"]["id"].ToString(); + var goodsStr = RedisHelper.Client.Get(replyId); + if (string.IsNullOrEmpty(goodsStr) is false) + { + bool upCmd = groupMsg.Contains("-f"); + + _ = Herbal(groupId, goodsStr, upCmd); + } + else + { + GroupSendMessageRequest request = new() + { + GroupId = groupId, + Message = new() + { + new MessageItem() + { + Type = "text", + Data = new() + { + Text = "没有查询到缓存,è¯·é‡æ–°è‰¾ç‰¹å°å°æŸ¥è¯æèƒŒåŒ…" + } + }, + } + }; + await RobotAPI.SendGroupText(request); + } + } + } + catch (Exception ex) + { + Log.Error($@"{DateTime.Now:yyyy-MM-dd HH:mm:ss} åŠå¸‚上架命令 å‘生异常,异常信æ¯ï¼š{ex.Message},异常堆栈:{ex.StackTrace}", true); + + } + return await Task.FromResult(true); + } + + private static async Task Herbal(string groupId, string text, bool upCmd) + { + List results = []; + var lines = text.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); + foreach (var line in lines) + { + if (line.StartsWith("å“级:")) + { + _ = line.Substring("å“级:".Length).Trim(); + } + else if (line.StartsWith("å字:")) + { + var name = line.Substring("å字:".Length).Trim(); + // æ‰¾åˆ°ä¸‹ä¸€è¡Œçš„æ•°é‡ + var index = Array.IndexOf(lines, line); + if (index + 1 < lines.Length && lines[index + 1].StartsWith("拥有数é‡:")) + { + var quantityLine = lines[index + 1]; + var match = Regex.Match(quantityLine, @"拥有数é‡:(\d+)"); + if (match.Success) + { + var quantity = match.Groups[1].Value; + results.Add(new() { Name = name, Num = Convert.ToInt32(quantity) }); + } + } + } + } + + string msg = ""; + decimal totalPrice = 0; + decimal fee = 0; + // 打å°ç»“æžœ + foreach (var item in results) + { + var current = RedisHelper.Client.HGet(RedisPrefix.GoodsKey, item.Name); + if (current is not null) + { + int num = item.Num.Value > 10 ? 10 : item.Num.Value; + decimal nicePrice = current.Price - 100000; + totalPrice += Convert.ToDecimal(nicePrice * num); + + fee += Math.Round(Utils.CalculateFee(nicePrice) * num, 0); + + if (upCmd) + { + msg += $"确认åŠå¸‚上架{item.Name} {(int)current.Price - 100000} {num}|"; + } + else + { + msg += $"确认åŠå¸‚上架{item.Name} {(int)current.Price - 100000} {num}\n"; + } + } + } + if (string.IsNullOrWhiteSpace(msg) is false) + { + if (!upCmd) + { + msg += "\r\n"; + msg += "使用å‰è¯·å…ˆ@å°å°æŸ¥çœ‹åŠå¸‚è¯æ,过完一éä»¥èŽ·å–æœ€æ–°ä»·æ ¼\r\n当å‰ä»·æ ¼ä¸ºåŠå¸‚ä»·æ ¼-10w\r\n"; + msg += $"总价值约:{Utils.FormatNumberToChineseUnit(totalPrice)}\r\n"; + msg += $"手续费约:{Utils.FormatNumberToChineseUnit(fee)}\r\n"; + msg += $"到账约:{Utils.FormatNumberToChineseUnit(totalPrice - fee)}"; + } + if (msg[^1] == '|') msg = msg[..^1]; + + GroupSendMessageRequest request = new() + { + GroupId = groupId, + Message = new() + { + new MessageItem() + { + Type = "text", + Data = new() + { + Text = msg + } + }, + } + }; + await RobotAPI.SendGroupText(request); + } + + return await Task.FromResult(true); + } + + } +} diff --git a/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/ImmortalElixirProcess.cs b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/ImmortalElixirProcess.cs new file mode 100644 index 0000000..5e97037 --- /dev/null +++ b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/ImmortalElixirProcess.cs @@ -0,0 +1,75 @@ +using Furion.Logging; +using NapCatRobotClient.Core.RobotAPI.Dto.Request; + +namespace NapCatRobotClient.Service.Group.TextProcess +{ + /// + /// 查丹方 + /// + public class ImmortalElixirProcess + { + /// + /// 处ç†ç¾¤æ¶ˆæ¯ + /// + /// + /// + public static async Task ProcessGroupRequest(string groupId, string message) + { + try + { + JObject json = JObject.Parse(message); + 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("查丹方") + )?["data"]?["text"]?.ToString(); + if (string.IsNullOrWhiteSpace(groupMsg)) return false; + + var rbotQ = messageArray.FirstOrDefault(o => o["type"].ToString() == "at")?["data"]?["qq"]?.ToString(); + + // 判断是å¦@了机器人 + if (rbotQ == App.Configuration["QQConfig:RobotQQ"]) + { + // æå–物å“åç§° + var goodsName = groupMsg + .Split(' ', StringSplitOptions.RemoveEmptyEntries) + .FirstOrDefault(word => word != "查丹方") + ?.Replace("查丹方", "")?.Trim(); + + if (!string.IsNullOrWhiteSpace(goodsName)) + { + Dictionary dict = App.GetConfig>("丹方"); + if (dict?.Count > 0) + { + dict.TryGetValue(goodsName, out string doc); + if (string.IsNullOrWhiteSpace(doc) is false) + { + GroupSendMessageRequest request = new() + { + GroupId = groupId, + Message = new() + { + new MessageItem() + { + Type = "text", + Data = new() + { + Text = doc + } + }, + } + }; + await RobotAPI.SendGroupText(request); + } + } + } + } + } + catch (Exception ex) + { + Log.Error($@"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 查丹方命令 å‘生异常,异常信æ¯ï¼š{ex.Message},异常堆栈:{ex.StackTrace}", true); + } + return await Task.FromResult(true); + } + } +} diff --git a/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/LingTianProcess.cs b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/LingTianProcess.cs index 276849e..13664a4 100644 --- a/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/LingTianProcess.cs +++ b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/LingTianProcess.cs @@ -3,6 +3,9 @@ using NapCatRobotClient.Core.RobotAPI.Dto.Request; namespace NapCatRobotClient.Service.Group.TextProcess { + /// + /// çµç”°ç»“ç®— + /// public class LingTianProcess { /// diff --git a/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/MiJingNotifyProcess.cs b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/MiJingNotifyProcess.cs new file mode 100644 index 0000000..f88a368 --- /dev/null +++ b/NapCatRobotClient/NapCatRobotClient.Service/Group/TextProcess/MiJingNotifyProcess.cs @@ -0,0 +1,100 @@ +using Furion.Logging; +using NapCatRobotClient.Core.RobotAPI.Dto.Request; +using System.Globalization; + +namespace NapCatRobotClient.Service.Group.TextProcess +{ + /// + /// 秘境通知 + /// + public class MiJingNotifyProcess + { + public static async Task ProcessGroupRequest(string groupId, string message) + { + try + { + JObject json = JObject.Parse(message); + 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(); + if (string.IsNullOrWhiteSpace(groupMsg)) return false; + + var minutes = ParseMinutes(groupMsg); + if (minutes > 0) + { + var atData = messageArray.FirstOrDefault(o => o["type"].ToString() == "at"); + if (atData is not null) + { + ScheduleReminder(groupId, atData["data"]["qq"].ToString(), minutes); + } + } + } + catch (Exception ex) + { + Log.Error($@"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 秘境结æŸé€šçŸ¥ å‘生异常,异常信æ¯ï¼š{ex.Message},异常堆栈:{ex.StackTrace}", true); + } + return await Task.FromResult(true); + } + + private static void ScheduleReminder(string groupId, string userId, double minutes) + { + DateTime now = DateTime.Now; + + TimeSpan delay = TimeSpan.FromMinutes(minutes); + + Log.Information($@"{now:yyyy-MM-dd HH:mm:ss} {userId} 触å‘秘境通知 {minutes}分钟 ç»“æŸæ—¶é—´: {now.AddMinutes(minutes):yyyy-MM-dd HH:mm:ss}"); + + _ = Task.Run(async () => + { + await Task.Delay(delay); + GroupSendMessageRequest request = new() + { + GroupId = groupId, + Message = new() + { + new MessageItem() + { + Type = "text", + Data = new() + { + Text = $"ã€ç§˜å¢ƒç»“算通知】\r\n探索已完æˆï¼Œè¯¥ç»“算奖励了ï¼ï¼ˆ{minutes} 分钟)" + } + }, + new MessageItem() + { + Type = "at", + Data = new() + { + QQ = userId + } + } + } + }; + await RobotAPI.SendGroupText(request); + }); + } + + private static double 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[2].Value, NumberStyles.Float, CultureInfo.InvariantCulture, out double val)) + { + return (double)val; + } + } + + return 0; + } + } +}