Skip to content
This repository has been archived by the owner on Sep 18, 2024. It is now read-only.

Commit

Permalink
<jx3>[feat]update coin trade price;[feat]update item price trend;[fea…
Browse files Browse the repository at this point in the history
…t]update recruit
  • Loading branch information
HornCopper committed Sep 13, 2024
1 parent 9d02bc2 commit beb179f
Show file tree
Hide file tree
Showing 8 changed files with 215 additions and 100 deletions.
101 changes: 68 additions & 33 deletions src/plugins/jx3/gold/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from src.tools.config import Config
from src.tools.basic.prompts import PROMPT
from src.tools.basic.server import server_mapping
from src.tools.utils.request import get_api
from src.tools.utils.request import post_url
from src.tools.utils.path import ASSETS, CACHE, VIEWS
from src.tools.utils.time import get_current_time, convert_time
from src.tools.utils.file import read, write
Expand All @@ -18,6 +18,7 @@
template_jinjia = """
<tr>
<td class="short-column">{{ date }}</td>
<td class="short-column">{{ tieba }}</td>
<td class="short-column">{{ _7881 }}</td>
<td class="short-column">{{ wbl }}</td>
<td class="short-column">{{ dd373 }}</td>
Expand All @@ -26,62 +27,96 @@
</tr>"""

types = {
"tieba": "tieba",
"7881": "_7881",
"WBL": "wbl",
"DD373": "dd373",
"wanbaolou": "wbl",
"dd373": "dd373",
"5173": "_5173",
"UU898": "uu898"
"uu898": "uu898"
}

async def demon_(server: str = "", group_id: str = ""): # 金价 <服务器>
goal_server = server_mapping(server, group_id)
if not goal_server:
return [PROMPT.ServerNotExist]
data = await get_api("https://spider2.jx3box.com/api/spider/gold/trend")
server_data = data[goal_server]
rows = []
dates = []
date_to_data = {}

# data = await get_api("https://spider2.jx3box.com/api/spider/gold/trend")
# server_data = data[goal_server]
# rows = []
# dates = []
# date_to_data = {}

for platform_data in data[goal_server]["7881"]:
# 只拿日期,平台不影响
dates.append(platform_data["date"])
# for platform_data in data[goal_server]["7881"]:
# # 只拿日期,平台不影响
# dates.append(platform_data["date"])

platform_to_averages = {param_name: [] for param_name in types.values()}
# platform_to_averages = {param_name: [] for param_name in types.values()}

for platform_name, param_name in types.items():
if platform_name in server_data:
platform_data = server_data[platform_name]
for daily_data in platform_data:
date = daily_data["date"]
if date not in date_to_data:
date_to_data[date] = {}
date_to_data[date][param_name] = round(daily_data["average"], 2)
platform_to_averages[param_name].append(int(daily_data["average"]))
# for platform_name, param_name in types.items():
# if platform_name in server_data:
# platform_data = server_data[platform_name]
# for daily_data in platform_data:
# date = daily_data["date"]
# if date not in date_to_data:
# date_to_data[date] = {}
# date_to_data[date][param_name] = round(daily_data["average"], 2)
# platform_to_averages[param_name].append(int(daily_data["average"]))

sorted_dates = sorted(date_to_data.keys(), reverse=True)
recent_dates = sorted_dates[:7]
for date in recent_dates:
row_data = date_to_data[date]
row_data.update({"date": date})
rows.append(row_data)
# sorted_dates = sorted(date_to_data.keys(), reverse=True)
# recent_dates = sorted_dates[:7]
# for date in recent_dates:
# row_data = date_to_data[date]
# row_data.update({"date": date})
# rows.append(row_data)

# tables = []
# for row in rows:
# tables.append(Template(template_jinjia).render(**row))

# input_data = {
# "custom_font": ASSETS + "/font/custom.ttf",
# "tablecontent": "\n".join(tables),
# "server": goal_server,
# "app_time": convert_time(get_current_time(), "%H:%M:%S"),
# "saohua": "严禁将蓉蓉机器人与音卡共存,一经发现永久封禁!蓉蓉是抄袭音卡的劣质机器人!",
# "platforms": json.dumps(list(types), ensure_ascii=False).replace("WBL", "万宝楼"),
# "dates": json.dumps(dates, ensure_ascii=False),
# "app_name": "金币价格"
# }
# for platform in types:
# input_data[types[platform]] = json.dumps(platform_to_averages[types[platform]], ensure_ascii=False)

data = await post_url("https://www.jx3mm.com/api/uniqueapi/Apiinterface/gettrade", json={"v": goal_server})
data = json.loads(data)
tables = []
for row in rows:
tables.append(Template(template_jinjia).render(**row))
for each_price in data["data"]:
tables.append(Template(template_jinjia).render(
**
{
"date": each_price["date"],
"tieba": each_price["tieba"],
"_7881": each_price["7881"],
"wbl": each_price["wanbaolou"],
"dd373": each_price["dd373"],
"_5173": each_price["5173"],
"uu898": each_price["uu898"]
}
)
)

input_data = {
"custom_font": ASSETS + "/font/custom.ttf",
"tablecontent": "\n".join(tables),
"server": goal_server,
"app_time": convert_time(get_current_time(), "%H:%M:%S"),
"saohua": "严禁将蓉蓉机器人与音卡共存,一经发现永久封禁!蓉蓉是抄袭音卡的劣质机器人!",
"platforms": json.dumps(list(types), ensure_ascii=False).replace("WBL", "万宝楼"),
"dates": json.dumps(dates, ensure_ascii=False),
"platforms": json.dumps(list(types), ensure_ascii=False).replace("wanbaolou", "万宝楼").replace("tieba", "贴吧").replace("dd", "DD").replace("uu", "UU"),
"dates": json.dumps([each_price["date"] for each_price in data["data"]], ensure_ascii=False),
"app_name": "金币价格"
}

for platform in types:
input_data[types[platform]] = json.dumps(platform_to_averages[types[platform]], ensure_ascii=False)
input_data[types[platform]] = json.dumps([each_price[platform] for each_price in data["data"]], ensure_ascii=False)

html = Template(read(VIEWS + "/jx3/trade/gold.html")).render(**input_data)
final_html = CACHE + "/" + get_uuid() + ".html"
Expand Down
10 changes: 3 additions & 7 deletions src/plugins/jx3/recruit/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@

@recruit_v2_.handle()
async def _(event: GroupMessageEvent, args: Message = CommandArg()):
if not Config.jx3.api.enable:
return
filter = False
addtions = getGroupSettings(str(event.group_id), "addtions")
if not isinstance(addtions, list):
Expand Down Expand Up @@ -51,8 +49,6 @@ async def _(event: GroupMessageEvent, args: Message = CommandArg()):

@jx3_cmd_recruit_local.handle()
async def _(event: GroupMessageEvent, args: Message = CommandArg()):
if not Config.jx3.api.enable:
return
arg = args.extract_plain_text()
filter = False
addtions = getGroupSettings(str(event.group_id), "addtions")
Expand All @@ -71,10 +67,10 @@ async def _(event: GroupMessageEvent, args: Message = CommandArg()):
await jx3_cmd_recruit_local.finish("参数不正确哦,只能有1或2个参数~")
server = server_mapping(arg[0], str(event.group_id))
if len(arg) == 1:
copy = arg[0] if not server_mapping(arg[0]) else "" # 当第一个参数是服务器的话则为空
kw = arg[0] if not server_mapping(arg[0]) else "" # 当第一个参数是服务器的话则为空
else:
copy = arg[1]
data = await recruit_v2(server, copy, True, filter)
kw = arg[1]
data = await recruit_v2(server, kw, True, filter)
if isinstance(data, list):
await jx3_cmd_recruit_local.finish(data[0])
elif isinstance(data, str):
Expand Down
29 changes: 22 additions & 7 deletions src/plugins/jx3/recruit/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@
from typing import Optional

from src.tools.config import Config
from src.tools.utils.request import get_api
from src.tools.basic.server import server_mapping
from src.tools.utils.request import get_api, post_url
from src.tools.basic.server import server_mapping, Zone_mapping
from src.tools.basic.prompts import PROMPT
from src.tools.utils.file import read, write
from src.tools.generate import generate, get_uuid
from src.tools.utils.path import ASSETS, CACHE, VIEWS

import time
import json

token = Config.jx3.api.token
bot_name = Config.bot_basic.bot_name_argument
Expand Down Expand Up @@ -80,16 +81,30 @@ async def checkAd(msg: str, data: dict):
return True
return False

async def recruit_v2(server: Optional[str], actvt: str = "", local: bool = False, filter: bool = False):
async def query_recruit(server: str, keyword: Optional[str] = ""):
if Config.jx3.api.enable:
final_url = f"{Config.jx3.api.url}/data/member/recruit?token={token}&server={server}"
return await get_api(final_url)
else:
final_url = "https://www.jx3mm.com/api/uniqueapi/Apiinterface/mrecruit"
params = {
"S": Zone_mapping(server),
"v": server,
"k": keyword,
"t": 1,
"offset":0,
"limit":10
}
data = await post_url(final_url, json=params)
return json.loads(data)

async def recruit_v2(server: Optional[str], keyword: str = "", local: bool = False, filter: bool = False):
if token == None:
return [PROMPT.NoToken]
server_ = server_mapping(server)
if not server_:
return [PROMPT.ServerNotExist]
final_url = f"{Config.jx3.api.url}/data/member/recruit?token={token}&server={server_}"
if actvt != "":
final_url = final_url + "&keyword=" + actvt
data = await get_api(final_url)
data = await query_recruit(server_, keyword)
if data["code"] != 200:
return ["唔……未找到相关团队,请检查后重试!"]
adFlags = await get_api("https://inkar-suki.codethink.cn/filters")
Expand Down
29 changes: 26 additions & 3 deletions src/plugins/jx3/trade/item_v2.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Tuple, List
from typing import Tuple, List, Literal, Union
from pathlib import Path

from src.tools.utils.request import get_api, post_url
Expand Down Expand Up @@ -48,7 +48,7 @@ async def queryWj(url: str, params: dict = {}):
data = await post_url(url, headers=headers, json=params)
return json.loads(data)

async def getRawName(alias_name: str):
async def getRawName(alias_name: str) -> Union[str, Literal[False]]:
item_aliases_data = json.loads(read(TOOLS + "/item_aliases.json", "{}"))
if alias_name in item_aliases_data:
alias_name = item_aliases_data[alias_name]
Expand All @@ -71,7 +71,7 @@ async def getItemHistory(standard_name: str) -> Tuple[List[int], List[str]]:
prices.append(each_data["price"])
return prices[::-1], dates[::-1]

async def getItemDetail(item_name: str):
async def getItemDetail(item_name: str) -> Union[list, Literal[False]]:
item_data = await queryWj("https://www.aijx3.cn/api/wj/goods/getGoodsDetail", params={"goodsName": item_name})
item_data = item_data["data"]
if item_data == None:
Expand Down Expand Up @@ -124,8 +124,28 @@ async def quertAJ3Info(item_standard_name: str):
full_table[zone[0]] = "\n".join(table)
return full_table

def select_min_max(data: list, margin: float = 0.1, round_to: int = 10) -> tuple[int, int]:
if not data:
raise ValueError("数据列表为空")
data = [float(item) for item in data]
data_min = min(data)
data_max = max(data)
data_range = data_max - data_min
extend = data_range * margin
optimal_min = data_min - extend
optimal_max = data_max + extend
def round_down(value: float, round_to: int) -> float:
return (value // round_to) * round_to
def round_up(value: float, round_to: int) -> float:
return ((value + round_to - 1) // round_to) * round_to
adjusted_min = round_down(optimal_min, round_to)
adjusted_max = round_up(optimal_max, round_to)
return int(adjusted_min), int(adjusted_max)

async def getSingleItemPrice(item_name: str):
standard_name = await getRawName(item_name)
if standard_name == False:
return ["唔……未收录该物品!\n请到音卡用户群内进行反馈,我们会及时添加别名!"]
basic_item_info = await getItemDetail(standard_name)
if basic_item_info == False:
return ["唔……未收录该物品!\n请到音卡用户群内进行反馈,我们会及时添加别名!"]
Expand All @@ -147,6 +167,9 @@ async def getSingleItemPrice(item_name: str):
html = html.replace("$publish_price", str(basic_item_info[6]))
html = html.replace("$item_image", str(basic_item_info[7]))
prices, dates = await getItemHistory(standard_name)
max, min = select_min_max(prices)
html = html.replace("$max", str(max))
html = html.replace("$min", str(min))
html = html.replace("$dates", json.dumps(dates, ensure_ascii=False))
html = html.replace("$values", json.dumps(prices, ensure_ascii=False))
font = ASSETS + "/font/custom.ttf"
Expand Down
2 changes: 1 addition & 1 deletion src/tools/basic/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import json

def Zone_mapping(server, legacy: bool = False) -> Optional[str]:
def Zone_mapping(server: str, legacy: bool = False) -> Optional[str]:
if server in ["绝代天骄"]:
return "电信区" if not legacy else "电信八区"
if server in ["斗转星移", "唯我独尊", "乾坤一掷", "横刀断浪", "剑胆琴心", "幽月轮", "梦江南"]:
Expand Down
Loading

1 comment on commit beb179f

@HornCopper
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

商业机器人就别看了罢

Please sign in to comment.