2023-08-14 10:40:47 +08:00
|
|
|
from pepperbot.core.message.chain import MessageChain, Image, Text, At
|
2023-08-14 09:24:03 +08:00
|
|
|
from rapidocr_onnxruntime import RapidOCR
|
2023-08-13 19:42:17 +08:00
|
|
|
import os
|
2023-08-13 20:18:55 +08:00
|
|
|
import asyncio
|
|
|
|
import functools
|
2023-08-14 09:24:03 +08:00
|
|
|
import re
|
2023-08-14 11:01:48 +08:00
|
|
|
from typing import Dict
|
2023-08-13 18:31:28 +08:00
|
|
|
|
|
|
|
|
2023-08-14 09:24:03 +08:00
|
|
|
rapid_ocr = None
|
|
|
|
if not rapid_ocr:
|
|
|
|
rapid_ocr = RapidOCR("rapid_ocr.yml")
|
2023-08-13 20:05:54 +08:00
|
|
|
|
|
|
|
|
2023-08-13 18:31:28 +08:00
|
|
|
class RIICReportAnalysis:
|
2023-08-14 11:01:48 +08:00
|
|
|
async def group_message(self, chain: MessageChain, raw_event: Dict):
|
2023-08-13 19:50:02 +08:00
|
|
|
if len(chain) != 1 or len(chain.images) != 1:
|
2023-08-13 19:42:17 +08:00
|
|
|
return
|
|
|
|
img_seg: Image = chain[0]
|
|
|
|
img_path = await img_seg.download()
|
2023-08-13 20:18:55 +08:00
|
|
|
loop = asyncio.get_running_loop()
|
2023-08-14 09:24:03 +08:00
|
|
|
result, elapse = await loop.run_in_executor(
|
|
|
|
None, functools.partial(rapid_ocr, img_path)
|
2023-08-13 20:18:55 +08:00
|
|
|
)
|
2023-08-14 11:01:48 +08:00
|
|
|
os.remove(img_path)
|
2023-08-14 10:13:17 +08:00
|
|
|
if not result or not "副手简报" in [i[1] for i in result]:
|
2023-08-14 11:01:48 +08:00
|
|
|
return
|
|
|
|
|
|
|
|
card = raw_event["sender"]["card"]
|
|
|
|
|
|
|
|
err_msg = "请修改群昵称(群名片),标注基建布局。若使用2电站布局,请额外标注贸易站等级。\n"
|
|
|
|
err_msg += "如:\n"
|
|
|
|
err_msg += "EE0000 252 11贸\n"
|
|
|
|
err_msg += "教捐 252(33贸易站)\n"
|
|
|
|
err_msg += "千梵 243烟火 单推狮蝎\n"
|
|
|
|
err_msg += "琉璃 243-153"
|
|
|
|
|
2023-08-14 12:04:06 +08:00
|
|
|
use_tequila = False
|
|
|
|
|
2023-08-14 11:01:48 +08:00
|
|
|
if not card:
|
|
|
|
await chain.onebot_reply(Text(err_msg))
|
|
|
|
return
|
|
|
|
elif "153" in card or "243" in card:
|
2023-08-14 12:04:06 +08:00
|
|
|
use_tequila = True
|
2023-08-14 11:01:48 +08:00
|
|
|
elif "252" in card:
|
|
|
|
if m := re.search(r"([1-3][1-3])贸", card):
|
2023-08-14 12:04:06 +08:00
|
|
|
if "3" in m.group(1):
|
|
|
|
if m.group(1) != "33":
|
|
|
|
await chain.onebot_reply(Text("暂不支持此类基建布局"))
|
|
|
|
return
|
|
|
|
else:
|
|
|
|
use_tequila = True
|
2023-08-14 11:01:48 +08:00
|
|
|
else:
|
|
|
|
await chain.onebot_reply(Text(err_msg))
|
|
|
|
return
|
|
|
|
elif "342" in card:
|
|
|
|
if m := re.search(r"([1-3][1-3][1-3])贸", card):
|
2023-08-14 12:04:06 +08:00
|
|
|
if "3" in m.group(1):
|
|
|
|
if m.group(1) != "333":
|
|
|
|
await chain.onebot_reply(Text("暂不支持此类基建布局"))
|
|
|
|
return
|
|
|
|
else:
|
|
|
|
use_tequila = True
|
2023-08-14 11:01:48 +08:00
|
|
|
else:
|
|
|
|
await chain.onebot_reply(Text(err_msg))
|
|
|
|
return
|
|
|
|
else:
|
|
|
|
await chain.onebot_reply(Text(err_msg))
|
2023-08-14 09:24:03 +08:00
|
|
|
return
|
2023-08-14 09:44:40 +08:00
|
|
|
|
2023-08-14 09:24:03 +08:00
|
|
|
lmb_height = 0
|
2023-08-14 09:44:40 +08:00
|
|
|
lmb_list = []
|
2023-08-14 09:24:03 +08:00
|
|
|
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]):
|
2023-08-14 10:40:47 +08:00
|
|
|
if float(i[2]) < 0.6:
|
|
|
|
continue
|
2023-08-14 09:24:03 +08:00
|
|
|
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]):
|
2023-08-14 09:44:40 +08:00
|
|
|
lmb_list.append([int(i[0][0][0]), m.group(1)])
|
2023-08-14 09:24:03 +08:00
|
|
|
|
2023-08-14 09:44:40 +08:00
|
|
|
lmb_list.sort(key=lambda x: x[0])
|
2023-08-14 09:24:03 +08:00
|
|
|
gold_list.sort(key=lambda x: x[0])
|
|
|
|
exp_list.sort(key=lambda x: x[0])
|
|
|
|
|
|
|
|
output = ""
|
2023-08-14 12:04:06 +08:00
|
|
|
lmb_avg = 0
|
|
|
|
order_avg = 0
|
|
|
|
gold_avg = 0
|
|
|
|
exp_avg = 0
|
|
|
|
external_gold = 5000
|
2023-08-14 09:24:03 +08:00
|
|
|
|
2023-08-14 10:40:47 +08:00
|
|
|
try:
|
|
|
|
for i in range(len(date_list)):
|
2023-08-14 12:04:06 +08:00
|
|
|
lmb_avg += int(lmb_list[2 * i][1])
|
|
|
|
order_avg += int(lmb_list[2 * i + 1][1])
|
|
|
|
gold_avg += int(gold_list[i][1])
|
|
|
|
exp_avg += int(exp_list[i][1])
|
|
|
|
|
2023-08-14 12:11:09 +08:00
|
|
|
# output += f"【{date_list[i][1]}】\n"
|
|
|
|
# output += f"💵 {lmb_list[2 * i][1]}订单({lmb_list[2 * i + 1][1]})\n"
|
|
|
|
# output += f"🧈 {gold_list[i][1]}赤金\n"
|
|
|
|
# output += f"📼 {exp_list[i][1]}经验\n\n"
|
2023-08-14 09:24:03 +08:00
|
|
|
|
2023-08-14 12:04:06 +08:00
|
|
|
lmb_avg /= len(date_list)
|
|
|
|
order_avg /= len(date_list)
|
|
|
|
gold_avg /= len(date_list)
|
|
|
|
exp_avg /= len(date_list)
|
|
|
|
|
|
|
|
if use_tequila:
|
|
|
|
trading_efficiency = lmb_avg / 1.62 / 500 * 70.138 / 24 / 60
|
|
|
|
gold_by_e = trading_efficiency * 0.07 * 24 * 60 / 72 * 500
|
|
|
|
balanced_gold_by_e = lmb_avg - external_gold - gold_by_e
|
|
|
|
overflow_gold_by_e = gold_avg - balanced_gold_by_e
|
|
|
|
more_exp_by_e = overflow_gold_by_e * 0.8
|
|
|
|
balanced_exp_by_e = exp_avg + more_exp_by_e
|
|
|
|
lmb_exp_ratio_by_e = (lmb_avg + 43483) / (balanced_exp_by_e + 36284)
|
|
|
|
total_by_e = lmb_avg + balanced_exp_by_e
|
|
|
|
|
|
|
|
gold_by_order = order_avg * 0.2 * 500
|
|
|
|
balanced_gold_by_order = lmb_avg - external_gold - gold_by_order
|
|
|
|
overflow_gold_by_order = gold_avg - balanced_gold_by_order
|
|
|
|
more_exp_by_order = overflow_gold_by_order * 0.8
|
|
|
|
balanced_exp_by_order = exp_avg + more_exp_by_order
|
|
|
|
lmb_exp_ratio_by_order = (lmb_avg + 43483) / (
|
|
|
|
balanced_exp_by_order + 36284
|
|
|
|
)
|
|
|
|
total_by_order = lmb_avg + balanced_exp_by_order
|
|
|
|
|
|
|
|
output += "====计算结果====\n\n"
|
|
|
|
output += f"订单平均:{lmb_avg:.0f}\n\n"
|
|
|
|
output += "-----效率算法-----\n"
|
|
|
|
output += f"贸易效率:{trading_efficiency * 100:.0f}%\n"
|
|
|
|
output += f"等效赤金:{gold_by_e:.0f}\n"
|
|
|
|
output += f"经验调平:{balanced_exp_by_e:.0f}\n"
|
|
|
|
output += f"钱书比例:{lmb_exp_ratio_by_e:.2f}\n"
|
|
|
|
output += f"调平总和:{total_by_e:.0f}\n\n"
|
|
|
|
output += "-----数量算法-----\n"
|
|
|
|
output += f"等效赤金:{gold_by_order:.0f}\n"
|
|
|
|
output += f"经验调平:{balanced_exp_by_order:.0f}\n"
|
|
|
|
output += f"钱书比例:{lmb_exp_ratio_by_order:.2f}\n"
|
|
|
|
output += f"调平总和:{total_by_order:.0f}"
|
|
|
|
else:
|
|
|
|
balanced_gold = lmb_avg - external_gold
|
|
|
|
overflow_gold = gold_avg - balanced_gold
|
|
|
|
more_exp = overflow_gold * 0.8
|
|
|
|
balanced_exp = exp_avg + more_exp
|
|
|
|
lmb_exp_ratio = (lmb_avg + 43483) / (balanced_exp + 36284)
|
|
|
|
total = lmb_avg + balanced_exp
|
|
|
|
|
|
|
|
output += "====计算结果====\n"
|
|
|
|
output += f"订单平均:{lmb_avg:.0f}\n"
|
|
|
|
output += f"经验调平:{balanced_exp:.0f}\n"
|
|
|
|
output += f"钱书比例:{lmb_exp_ratio:.2f}\n"
|
|
|
|
output += f"调平总和:{total:.0f}"
|
|
|
|
|
2023-08-14 10:40:47 +08:00
|
|
|
await chain.onebot_reply(Text(output.strip()))
|
|
|
|
except:
|
|
|
|
err_msg = "出错啦!\n"
|
|
|
|
err_msg += f"date_list = {date_list}\n"
|
|
|
|
err_msg += f"lmb_list = {lmb_list}\n"
|
|
|
|
err_msg += f"gold_list = {gold_list}\n"
|
|
|
|
err_msg += f"exp_list = {exp_list}"
|
|
|
|
await chain.onebot_reply(Text(err_msg), At("1040110848"))
|