from pepperbot.core.message.chain import MessageChain, Image, Text from rapidocr_onnxruntime import RapidOCR import os import asyncio import functools import re rapid_ocr = None if not rapid_ocr: rapid_ocr = RapidOCR("rapid_ocr.yml") class RIICReportAnalysis: async def group_message(self, chain: MessageChain): if len(chain) != 1 or len(chain.images) != 1: return img_seg: Image = chain[0] img_path = await img_seg.download() loop = asyncio.get_running_loop() result, elapse = await loop.run_in_executor( None, functools.partial(rapid_ocr, img_path) ) if not "副手简报" in [i[1] for i in result]: return lmb_height = 0 lmb_numers = [] date_list = [] exp_list = [] gold_list = [] for i in result: if i[1] == "龙门币": lmb_height = i[0][0][1] break for i in result: if m := re.search(r"([0-9]+\.[0-9]+)", i[1]): date_list.append([int(i[0][0][0]), m.group(1)]) continue if m := re.search(r"EXP([0-9]+)的作战记录", i[1]): exp_list.append([int(i[0][0][0]), m.group(1)]) continue if m := re.search(r"([0-9]+)的贵金属", i[1]): gold_list.append([int(i[0][0][0]), m.group(1)]) continue if lmb_height - 20 < i[0][0][1] < lmb_height + 20: if m := re.search(r"([0-9]+)", i[1]): lmb_numers.append([int(i[0][0][0]), m.group(1)]) lmb_numers.sort(key=lambda x: x[0]) gold_list.sort(key=lambda x: x[0]) exp_list.sort(key=lambda x: x[0]) date_list.sort(key=lambda x: x[0]) output = "" for i in range(len(date_list)): output += f"【{date_list[i][1]}】\n" output += f"💵 {lmb_numers[2 * i][1]}订单({lmb_numers[2 * i + 1][1]})\n" output += f"🧈 {gold_list[i][1]}赤金\n" output += f"📼 {exp_list[i][1]}经验\n\n" await chain.onebot_reply(Text(output.strip())) await loop.run_in_executor(None, functools.partial(os.remove, img_path))