11
This commit is contained in:
+12
-6
@@ -1,4 +1,16 @@
|
|||||||
{
|
{
|
||||||
|
"server": {
|
||||||
|
"description": "默认服务器",
|
||||||
|
"type": "string",
|
||||||
|
"default": "梦江南",
|
||||||
|
"hint": "在指令中未输入服务器时,默认查询的服务器"
|
||||||
|
},
|
||||||
|
"jx3api_token": {
|
||||||
|
"description": "JX3API Token",
|
||||||
|
"type": "string",
|
||||||
|
"default": "v2aa6e74d48abb7b9",
|
||||||
|
"hint": "前往https://www.jx3api.com/注册并购买Token。"
|
||||||
|
},
|
||||||
"kfjk": {
|
"kfjk": {
|
||||||
"description": "开服监控配置",
|
"description": "开服监控配置",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -26,11 +38,5 @@
|
|||||||
"default": ["QQ:GroupMessage:768280021","QQ:GroupMessage:690665795"]
|
"default": ["QQ:GroupMessage:768280021","QQ:GroupMessage:690665795"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"jx3api_token": {
|
|
||||||
"description": "JX3API Token",
|
|
||||||
"type": "string",
|
|
||||||
"default": "v2aa6e74d48abb7b9",
|
|
||||||
"hint": "前往https://www.jx3api.com/注册并获取Token。"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+4
-64
@@ -271,7 +271,7 @@ class JX3Service:
|
|||||||
return return_data
|
return return_data
|
||||||
|
|
||||||
|
|
||||||
async def qiyu(self, adventureName: str = "阴阳两界", serverName: str = "眉间雪") -> Dict[str, Any]:
|
async def qiyu(self, adventureName: str, serverName: str) -> Dict[str, Any]:
|
||||||
"""区服奇遇"""
|
"""区服奇遇"""
|
||||||
return_data = self._init_return_data()
|
return_data = self._init_return_data()
|
||||||
|
|
||||||
@@ -367,12 +367,10 @@ class JX3Service:
|
|||||||
return return_data
|
return return_data
|
||||||
|
|
||||||
|
|
||||||
async def wujia(self, Name: str) -> Dict[str, Any]:
|
async def wujia(self, Name: str, server:str) -> Dict[str, Any]:
|
||||||
"""物价查询"""
|
"""物价查询"""
|
||||||
return_data = self._init_return_data()
|
return_data = self._init_return_data()
|
||||||
|
|
||||||
# 1. 查询魔盒获取外观名称 (jx3box_exterior)
|
|
||||||
|
|
||||||
# 获取配置中的 Token
|
# 获取配置中的 Token
|
||||||
token = self._config.get("jx3api_token", "")
|
token = self._config.get("jx3api_token", "")
|
||||||
if token == "":
|
if token == "":
|
||||||
@@ -381,16 +379,13 @@ class JX3Service:
|
|||||||
|
|
||||||
# 2. 确定外观名称和 ID
|
# 2. 确定外观名称和 ID
|
||||||
|
|
||||||
params_search = {"name": Name,"token": token}
|
params_search = {"name": Name,"token": token, "server": server}
|
||||||
search_data: Optional[Dict[str, Any]] = await self._base_request("jx3_wujia", "GET", params=params_search)
|
search_data: Optional[Dict[str, Any]] = await self._base_request("jx3_wujia", "GET", params=params_search)
|
||||||
|
|
||||||
if not search_data:
|
if not search_data:
|
||||||
return_data["msg"] = "未找到改外观"
|
return_data["msg"] = "未找到改外观"
|
||||||
return return_data
|
return return_data
|
||||||
|
|
||||||
showName = search_data.get("name", "")
|
|
||||||
logger.info(showName)
|
|
||||||
|
|
||||||
return_data["data"] = search_data
|
return_data["data"] = search_data
|
||||||
|
|
||||||
# 5. 加载模板
|
# 5. 加载模板
|
||||||
@@ -405,61 +400,6 @@ class JX3Service:
|
|||||||
return return_data
|
return return_data
|
||||||
|
|
||||||
|
|
||||||
async def _get_wbl_data(self,showName):
|
|
||||||
"""获取万宝楼数据(公示和在售)"""
|
|
||||||
try:
|
|
||||||
#在配置文件中获取接口配置
|
|
||||||
#api_config = self._api_config["aijx3_wblwg"]
|
|
||||||
api_config = self._api_config["wbl_waiguan"]
|
|
||||||
#更新参数
|
|
||||||
api_config["params"]["filter[role_appearance]"] = showName
|
|
||||||
# 获取公示数据
|
|
||||||
api_config["params"]["filter[state]"] = "1"
|
|
||||||
datawblgs = await self._api.get(api_config["url"], api_config["params"], "data")
|
|
||||||
# 获取在售数据
|
|
||||||
api_config["params"]["filter[state]"] = "2"
|
|
||||||
datawblzs = await self._api.get(api_config["url"], api_config["params"], "data")
|
|
||||||
|
|
||||||
return {
|
|
||||||
"wblgs": await self._process_wbl_records(datawblgs.get("list", [])),
|
|
||||||
"wblzs": await self._process_wbl_records(datawblzs.get("list", []))
|
|
||||||
}
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"获取万宝楼数据出错: {e}")
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
async def _process_wbl_records(self,records):
|
|
||||||
"""处理万宝楼记录数据"""
|
|
||||||
processed = []
|
|
||||||
for record in records:
|
|
||||||
try:
|
|
||||||
# 转换时间戳为可读格式
|
|
||||||
timestamp = record.get("remaining_time", 0)
|
|
||||||
days = timestamp // 86400 # 每天有 86400 秒
|
|
||||||
hours = (timestamp % 86400) // 3600 # 每小时有 3600 秒
|
|
||||||
minutes = (timestamp % 3600) // 60 # 每分钟有 60 秒
|
|
||||||
result = ""
|
|
||||||
if days > 0:
|
|
||||||
result = (f"{days}天")
|
|
||||||
if hours > 0:
|
|
||||||
result += (f"{hours}时")
|
|
||||||
if minutes > 0:
|
|
||||||
result += (f"{minutes}分钟")
|
|
||||||
single_unit_price = record.get("single_unit_price", 0)
|
|
||||||
processed.append({
|
|
||||||
"priceNum": "{:.2f}".format( single_unit_price / 100),
|
|
||||||
"belongQf2": record.get("server_name", "无数据"),
|
|
||||||
"replyTime": result,
|
|
||||||
"discountRate": record.get("discountRate", 0.0),
|
|
||||||
})
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"处理万宝楼记录出错: {e}")
|
|
||||||
continue
|
|
||||||
|
|
||||||
return processed
|
|
||||||
|
|
||||||
|
|
||||||
async def jiaoyihang(self, Name: str , server: str) -> Dict[str, Any]:
|
async def jiaoyihang(self, Name: str , server: str) -> Dict[str, Any]:
|
||||||
"""区服交易行"""
|
"""区服交易行"""
|
||||||
return_data = self._init_return_data()
|
return_data = self._init_return_data()
|
||||||
@@ -562,7 +502,7 @@ class JX3Service:
|
|||||||
)
|
)
|
||||||
|
|
||||||
if not data:
|
if not data:
|
||||||
return_data["msg"] = "获取接口信息失败"
|
return_data["msg"] = "未找到该角色"
|
||||||
return return_data
|
return return_data
|
||||||
|
|
||||||
# 3. 处理返回数据 (直接提取图片 URL)
|
# 3. 处理返回数据 (直接提取图片 URL)
|
||||||
|
|||||||
@@ -28,10 +28,13 @@ class Jx3ApiPlugin(Star):
|
|||||||
super().__init__(context)
|
super().__init__(context)
|
||||||
#获取配置
|
#获取配置
|
||||||
self.conf = config
|
self.conf = config
|
||||||
|
|
||||||
# 本地数据存储路径
|
# 本地数据存储路径
|
||||||
local_data_dir = StarTools.get_data_dir("astrbot_plugin_jx3")
|
local_data_dir = StarTools.get_data_dir("astrbot_plugin_jx3")
|
||||||
|
|
||||||
# 插件数据文件路径
|
# 插件数据文件路径
|
||||||
data_file_path = Path(__file__).parent / "data"
|
data_file_path = Path(__file__).parent / "data"
|
||||||
|
|
||||||
# --- 调用函数完成检查和复制 ---
|
# --- 调用函数完成检查和复制 ---
|
||||||
try:
|
try:
|
||||||
self.file_local_data = self.check_and_copy_db(
|
self.file_local_data = self.check_and_copy_db(
|
||||||
@@ -43,12 +46,15 @@ class Jx3ApiPlugin(Star):
|
|||||||
# 处理默认文件丢失的严重错误
|
# 处理默认文件丢失的严重错误
|
||||||
logger.critical(f"插件初始化失败:{e}")
|
logger.critical(f"插件初始化失败:{e}")
|
||||||
raise # 中断初始化
|
raise # 中断初始化
|
||||||
|
|
||||||
# 读取API配置文件
|
# 读取API配置文件
|
||||||
self.api_file_path = Path(__file__).parent / "data" / "api_config.json"
|
self.api_file_path = Path(__file__).parent / "data" / "api_config.json"
|
||||||
with open(self.api_file_path, 'r', encoding='utf-8') as f:
|
with open(self.api_file_path, 'r', encoding='utf-8') as f:
|
||||||
self.api_config = json.load(f)
|
self.api_config = json.load(f)
|
||||||
|
|
||||||
# 初始化数据
|
# 初始化数据
|
||||||
#self.kf_task = asyncio.create_task(self.cycle_kaifjiankong())
|
self.server = self.conf.get("server", "梦江南")
|
||||||
|
logger.info(f"配置加载默认服务器:{self.server}")
|
||||||
logger.info("jx3api插件初始化完成")
|
logger.info("jx3api插件初始化完成")
|
||||||
|
|
||||||
|
|
||||||
@@ -103,16 +109,22 @@ class Jx3ApiPlugin(Star):
|
|||||||
return target_file_path
|
return target_file_path
|
||||||
|
|
||||||
|
|
||||||
|
async def serverdefault(self,server):
|
||||||
|
if server == None:
|
||||||
|
return self.server
|
||||||
|
return server
|
||||||
|
|
||||||
|
|
||||||
@filter.command_group("剑三")
|
@filter.command_group("剑三")
|
||||||
def jx3(self):
|
def jx3(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@jx3.command("日常")
|
@jx3.command("日常")
|
||||||
async def jx3_richang(self, event: AstrMessageEvent,server: str = "梦江南",num: int = 0):
|
async def jx3_richang(self, event: AstrMessageEvent,server: str = None ,num: int = 0):
|
||||||
"""剑三 日常 服务器 天数"""
|
"""剑三 日常 服务器 天数"""
|
||||||
try:
|
try:
|
||||||
data= await self.jx3fun.richang(server,num)
|
data= await self.jx3fun.richang(await self.serverdefault(server),num)
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
yield event.plain_result(data["data"])
|
yield event.plain_result(data["data"])
|
||||||
else:
|
else:
|
||||||
@@ -124,10 +136,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
|
|
||||||
|
|
||||||
@jx3.command("开服")
|
@jx3.command("开服")
|
||||||
async def jx3_kaifu(self, event: AstrMessageEvent,server: str = "梦江南"):
|
async def jx3_kaifu(self, event: AstrMessageEvent,server: str = None):
|
||||||
"""剑三 开服 服务器"""
|
"""剑三 开服 服务器"""
|
||||||
try:
|
try:
|
||||||
data= await self.jx3fun.kaifu(server)
|
data= await self.jx3fun.kaifu(await self.serverdefault(server))
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
yield event.plain_result(data["data"])
|
yield event.plain_result(data["data"])
|
||||||
else:
|
else:
|
||||||
@@ -139,10 +151,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
|
|
||||||
|
|
||||||
@jx3.command("沙盘")
|
@jx3.command("沙盘")
|
||||||
async def jx3_shapan(self, event: AstrMessageEvent,server: str = "梦江南"):
|
async def jx3_shapan(self, event: AstrMessageEvent,server: str = None):
|
||||||
"""剑三 沙盘 服务器"""
|
"""剑三 沙盘 服务器"""
|
||||||
try:
|
try:
|
||||||
data= await self.jx3fun.shapan(server)
|
data= await self.jx3fun.shapan(await self.serverdefault(server))
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
yield event.image_result(data["data"])
|
yield event.image_result(data["data"])
|
||||||
else:
|
else:
|
||||||
@@ -184,10 +196,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
|
|
||||||
|
|
||||||
@jx3.command("金价")
|
@jx3.command("金价")
|
||||||
async def jx3_jinjia(self, event: AstrMessageEvent,server: str = "梦江南", limit:str = "15"):
|
async def jx3_jinjia(self, event: AstrMessageEvent,server: str = None, limit:str = "15"):
|
||||||
"""剑三 金价 服务器"""
|
"""剑三 金价 服务器"""
|
||||||
try:
|
try:
|
||||||
data= await self.jx3fun.jinjia(server,limit)
|
data= await self.jx3fun.jinjia(await self.serverdefault(server),limit)
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
url = await self.html_render(data["temp"], data["data"], options={})
|
url = await self.html_render(data["temp"], data["data"], options={})
|
||||||
yield event.image_result(url)
|
yield event.image_result(url)
|
||||||
@@ -200,10 +212,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
|
|
||||||
|
|
||||||
@jx3.command("奇遇")
|
@jx3.command("奇遇")
|
||||||
async def jx3_qiyu(self, event: AstrMessageEvent,adventureName: str = "阴阳两界", serverName: str = "梦江南"):
|
async def jx3_qiyu(self, event: AstrMessageEvent,adventureName: str = "阴阳两界", server: str = None):
|
||||||
"""剑三 奇遇 奇遇名称 服务器"""
|
"""剑三 奇遇 奇遇名称 服务器"""
|
||||||
try:
|
try:
|
||||||
data= await self.jx3fun.qiyu(adventureName,serverName)
|
data= await self.jx3fun.qiyu(adventureName,await self.serverdefault(server))
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
url = await self.html_render(data["temp"], data["data"], options={})
|
url = await self.html_render(data["temp"], data["data"], options={})
|
||||||
yield event.image_result(url)
|
yield event.image_result(url)
|
||||||
@@ -216,10 +228,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
|
|
||||||
|
|
||||||
@jx3.command("物价")
|
@jx3.command("物价")
|
||||||
async def jx3_wujia(self, event: AstrMessageEvent,Name: str = "秃盒"):
|
async def jx3_wujia(self, event: AstrMessageEvent,Name: str = "秃盒", server: str = None):
|
||||||
"""剑三 物价 外观名称"""
|
"""剑三 物价 外观名称"""
|
||||||
try:
|
try:
|
||||||
data=await self.jx3fun.wujia(Name)
|
data=await self.jx3fun.wujia(Name,await self.serverdefault(server))
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
url = await self.html_render(data["temp"], data["data"], options={})
|
url = await self.html_render(data["temp"], data["data"], options={})
|
||||||
yield event.image_result(url)
|
yield event.image_result(url)
|
||||||
@@ -232,10 +244,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
|
|
||||||
|
|
||||||
@jx3.command("交易行")
|
@jx3.command("交易行")
|
||||||
async def jx3_jiaoyihang(self, event: AstrMessageEvent,Name: str = "守缺式",server: str = "梦江南"):
|
async def jx3_jiaoyihang(self, event: AstrMessageEvent,Name: str = "守缺式",server: str = None):
|
||||||
"""剑三 交易行 物品名称 服务器"""
|
"""剑三 交易行 物品名称 服务器"""
|
||||||
try:
|
try:
|
||||||
data=await self.jx3fun.jiaoyihang(Name,server)
|
data=await self.jx3fun.jiaoyihang(Name,await self.serverdefault(server))
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
url = await self.html_render(data["temp"], data["data"], options={})
|
url = await self.html_render(data["temp"], data["data"], options={})
|
||||||
yield event.image_result(url)
|
yield event.image_result(url)
|
||||||
@@ -273,10 +285,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
|
|
||||||
|
|
||||||
@jx3.command("名片")
|
@jx3.command("名片")
|
||||||
async def jx3_jueshemingpian(self, event: AstrMessageEvent,server: str = "梦江南", name: str = "飞翔大野猪"):
|
async def jx3_jueshemingpian(self, event: AstrMessageEvent, name: str = "飞翔大野猪", server: str = None):
|
||||||
"""剑三 名片 服务器 角色"""
|
"""剑三 名片 角色 服务器"""
|
||||||
try:
|
try:
|
||||||
data= await self.jx3fun.jueshemingpian(server,name)
|
data= await self.jx3fun.jueshemingpian(await self.serverdefault(server),name)
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
chain = [
|
chain = [
|
||||||
Comp.Plain(f"{data['data']['serverName']}--{data['data']['roleName']} \n"),
|
Comp.Plain(f"{data['data']['serverName']}--{data['data']['roleName']} \n"),
|
||||||
@@ -292,10 +304,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
|
|
||||||
|
|
||||||
@jx3.command("随机名片")
|
@jx3.command("随机名片")
|
||||||
async def jx3_shuijimingpian(self, event: AstrMessageEvent,force: str = "万花", body: str = "萝莉", server: str = "梦江南"):
|
async def jx3_shuijimingpian(self, event: AstrMessageEvent,force: str = "万花", body: str = "萝莉", server: str = None):
|
||||||
"""剑三 随机名片 服务器 角色"""
|
"""剑三 随机名片 职业 体型 服务器"""
|
||||||
try:
|
try:
|
||||||
data= await self.jx3fun.shuijimingpian(force,body,server)
|
data= await self.jx3fun.shuijimingpian(force,body,await self.serverdefault(server))
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
chain = [
|
chain = [
|
||||||
|
|
||||||
@@ -313,10 +325,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
|
|
||||||
|
|
||||||
@jx3.command("烟花")
|
@jx3.command("烟花")
|
||||||
async def jx3_yanhuachaxun(self, event: AstrMessageEvent,server: str = "梦江南", name: str = "飞翔大野猪"):
|
async def jx3_yanhuachaxun(self, event: AstrMessageEvent,name: str = "飞翔大野猪", server: str = None):
|
||||||
"""剑三 烟花 服务器 角色"""
|
"""剑三 烟花 角色 服务器"""
|
||||||
try:
|
try:
|
||||||
data= await self.jx3fun.yanhuachaxun(server,name)
|
data= await self.jx3fun.yanhuachaxun(await self.serverdefault(server),name)
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
url = await self.html_render(data["temp"], data["data"], options={})
|
url = await self.html_render(data["temp"], data["data"], options={})
|
||||||
yield event.image_result(url)
|
yield event.image_result(url)
|
||||||
@@ -329,10 +341,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
|
|
||||||
|
|
||||||
@jx3.command("的卢")
|
@jx3.command("的卢")
|
||||||
async def jx3_dilujilu(self, event: AstrMessageEvent,server: str = "梦江南"):
|
async def jx3_dilujilu(self, event: AstrMessageEvent,server: str = None):
|
||||||
"""剑三 的卢 服务器"""
|
"""剑三 的卢 服务器"""
|
||||||
try:
|
try:
|
||||||
data= await self.jx3fun.dilujilu(server)
|
data= await self.jx3fun.dilujilu(await self.serverdefault(server))
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
url = await self.html_render(data["temp"], data["data"], options={})
|
url = await self.html_render(data["temp"], data["data"], options={})
|
||||||
yield event.image_result(url)
|
yield event.image_result(url)
|
||||||
@@ -345,10 +357,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
|
|
||||||
|
|
||||||
@jx3.command("招募")
|
@jx3.command("招募")
|
||||||
async def jx3_tuanduizhaomu(self, event: AstrMessageEvent,keyword: str = "25人普通会战弓月城", server: str = "梦江南"):
|
async def jx3_tuanduizhaomu(self, event: AstrMessageEvent,keyword: str = "25人普通会战弓月城", server: str = None):
|
||||||
"""剑三 招募 副本 服务器"""
|
"""剑三 招募 副本 服务器"""
|
||||||
try:
|
try:
|
||||||
data= await self.jx3fun.tuanduizhaomu(server,keyword)
|
data= await self.jx3fun.tuanduizhaomu(await self.serverdefault(server),keyword)
|
||||||
if data["code"] == 200:
|
if data["code"] == 200:
|
||||||
url = await self.html_render(data["temp"], data["data"], options={})
|
url = await self.html_render(data["temp"], data["data"], options={})
|
||||||
yield event.image_result(url)
|
yield event.image_result(url)
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
<p class="goods-desc">{{ desc }}</p>
|
<p class="goods-desc">{{ desc }}</p>
|
||||||
|
|
||||||
<div class="meta-row">
|
<div class="meta-row">
|
||||||
<span>发布时间:{{ date }}</span>
|
<span>发售时间:{{ date }}</span>
|
||||||
<span class="price">参考价格:{{ cost }} 元</span>
|
<span class="price">参考价格:{{ cost }} 元</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user