11
This commit is contained in:
+71
-54
@@ -9,9 +9,8 @@ from .aiosqlite import AsyncSQLite
|
|||||||
from .function_basic import load_template,flatten_field,extract_fields,gold_to_string
|
from .function_basic import load_template,flatten_field,extract_fields,gold_to_string
|
||||||
|
|
||||||
class JX3Service:
|
class JX3Service:
|
||||||
def __init__(self, api_config,db: AsyncSQLite,config:AstrBotConfig):
|
def __init__(self, api_config, config:AstrBotConfig):
|
||||||
self._api = APIClient()
|
self._api = APIClient()
|
||||||
self._db = db
|
|
||||||
# 获取API配置文件
|
# 获取API配置文件
|
||||||
self._api_config = api_config
|
self._api_config = api_config
|
||||||
# 获取插件配置文件
|
# 获取插件配置文件
|
||||||
@@ -176,6 +175,7 @@ class JX3Service:
|
|||||||
|
|
||||||
return return_data
|
return return_data
|
||||||
|
|
||||||
|
|
||||||
async def kaifu(self, server: str) -> Dict[str, Any]:
|
async def kaifu(self, server: str) -> Dict[str, Any]:
|
||||||
"""开服状态查询"""
|
"""开服状态查询"""
|
||||||
return_data = self._init_return_data()
|
return_data = self._init_return_data()
|
||||||
@@ -215,6 +215,7 @@ class JX3Service:
|
|||||||
|
|
||||||
return return_data
|
return return_data
|
||||||
|
|
||||||
|
|
||||||
async def shaohua(self) -> Dict[str, Any]:
|
async def shaohua(self) -> Dict[str, Any]:
|
||||||
"""骚话"""
|
"""骚话"""
|
||||||
return_data = self._init_return_data()
|
return_data = self._init_return_data()
|
||||||
@@ -375,58 +376,6 @@ class JX3Service:
|
|||||||
return return_data
|
return return_data
|
||||||
|
|
||||||
|
|
||||||
async def SearchData(self) -> Dict[str, Any]:
|
|
||||||
"""外观数据插入数据库"""
|
|
||||||
return_data = self._init_return_data()
|
|
||||||
|
|
||||||
# 获取数据
|
|
||||||
data: Optional[List[Dict[str, Any]]] = await self._base_request("aijx3_SearchData", "POST")
|
|
||||||
|
|
||||||
if not data:
|
|
||||||
return_data["msg"] = "获取接口信息失败"
|
|
||||||
return return_data
|
|
||||||
|
|
||||||
# 提取数据
|
|
||||||
try:
|
|
||||||
extracted_data = flatten_field(data, "dataModels")
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"提取数据失败: {e}")
|
|
||||||
return_data["msg"] = "提取指定数据字段失败"
|
|
||||||
return return_data
|
|
||||||
|
|
||||||
# 准备SQL和批量数据
|
|
||||||
sql = """
|
|
||||||
INSERT INTO searchdata
|
|
||||||
(typeName, name, showName, picUrl, searchId, searchDescType)
|
|
||||||
VALUES (?, ?, ?, ?, ?, ?)
|
|
||||||
"""
|
|
||||||
# 增强数据提取的安全性
|
|
||||||
values_list = [
|
|
||||||
(
|
|
||||||
item.get('typeName'),
|
|
||||||
item.get('name'),
|
|
||||||
item.get('showName'),
|
|
||||||
item.get('picUrl'),
|
|
||||||
item.get('searchId'),
|
|
||||||
item.get('searchDescType')
|
|
||||||
)
|
|
||||||
for item in extracted_data
|
|
||||||
]
|
|
||||||
|
|
||||||
# 插入数据
|
|
||||||
try:
|
|
||||||
await self._db.clear_table("searchdata")
|
|
||||||
await self._db.executemany(sql, values_list)
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"数据插入失败: {e}")
|
|
||||||
return_data["msg"] = "数据插入数据库失败"
|
|
||||||
return return_data
|
|
||||||
|
|
||||||
return_data["msg"] = f"成功批量插入 {len(values_list)} 条数据!"
|
|
||||||
return_data["code"] = 200
|
|
||||||
return return_data
|
|
||||||
|
|
||||||
|
|
||||||
async def wujia(self, Name: str, server: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()
|
||||||
@@ -779,3 +728,71 @@ class JX3Service:
|
|||||||
return_data["code"] = 200
|
return_data["code"] = 200
|
||||||
|
|
||||||
return return_data
|
return return_data
|
||||||
|
|
||||||
|
|
||||||
|
async def fuyaojjiutian(self, server: str) -> Dict[str, Any]:
|
||||||
|
"""扶摇九天"""
|
||||||
|
return_data = self._init_return_data()
|
||||||
|
|
||||||
|
# 1. 构造请求参数
|
||||||
|
params = {"server": server, "token": self.token}
|
||||||
|
|
||||||
|
# 2. 调用基础请求
|
||||||
|
data: Optional[Dict[str, Any]] = await self._base_request(
|
||||||
|
"jx3_fuyaojiutian", "GET", params=params
|
||||||
|
)
|
||||||
|
|
||||||
|
if not data:
|
||||||
|
return_data["msg"] = "获取接口信息失败"
|
||||||
|
return return_data
|
||||||
|
|
||||||
|
# 3. 处理返回数据
|
||||||
|
try:
|
||||||
|
data_new = data[0]
|
||||||
|
data_old = data[1]
|
||||||
|
result_msg = f"{server}\n"
|
||||||
|
result_msg += f"上次[扶摇九天]开启时间:\n{datetime.fromtimestamp(data_old['time']).strftime('%Y-%m-%d %H:%M:%S')}\n"
|
||||||
|
result_msg += f"下次[扶摇九天]开启时间:\n{datetime.fromtimestamp(data_new['time']).strftime('%Y-%m-%d %H:%M:%S')}"
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"处理返回数据失败: {e}")
|
||||||
|
return_data["msg"] = "处理返回数据失败"
|
||||||
|
|
||||||
|
return_data["data"] = result_msg
|
||||||
|
return_data["code"] = 200
|
||||||
|
|
||||||
|
return return_data
|
||||||
|
|
||||||
|
|
||||||
|
async def shuma(self, server: str) -> Dict[str, Any]:
|
||||||
|
"""刷马"""
|
||||||
|
return_data = self._init_return_data()
|
||||||
|
|
||||||
|
# 1. 构造请求参数
|
||||||
|
params = {"server": server, "token": self.token}
|
||||||
|
|
||||||
|
# 2. 调用基础请求
|
||||||
|
data: Optional[Dict[str, Any]] = await self._base_request(
|
||||||
|
"jx3_shuama", "GET", params=params, out_key=""
|
||||||
|
)
|
||||||
|
|
||||||
|
if not data:
|
||||||
|
return_data["msg"] = "获取接口信息失败"
|
||||||
|
return return_data
|
||||||
|
|
||||||
|
# 3. 处理返回数据
|
||||||
|
try:
|
||||||
|
_data = data["data"]["data"]
|
||||||
|
result_msg = f"{server}\n"
|
||||||
|
result_msg += f"黑戈壁:\n{_data['黑戈壁'][0]}\n"
|
||||||
|
result_msg += f"阴山大草原:\n{_data['阴山大草原'][0]}\n"
|
||||||
|
result_msg += f"鲲鹏岛:\n{_data['鲲鹏岛'][0]}\n"
|
||||||
|
result_msg += f"的卢:\n{_data['龙泉府 / 进图(21:10)'][0]}\n"
|
||||||
|
result_msg += f"赤兔:\n{data['data']['note']}"
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"处理返回数据失败: {e}")
|
||||||
|
return_data["msg"] = "处理返回数据失败"
|
||||||
|
|
||||||
|
return_data["data"] = result_msg
|
||||||
|
return_data["code"] = 200
|
||||||
|
|
||||||
|
return return_data
|
||||||
+19
-99
@@ -39,14 +39,6 @@
|
|||||||
"serverName": "眉间雪"
|
"serverName": "眉间雪"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"aijx3_jinjia":{
|
|
||||||
"url":"https://www.jianxiachaguan.cn/api2/aijx3-jxcg/game/get-gold",
|
|
||||||
"method":"POST",
|
|
||||||
"description":"获取剑网三某区服金价",
|
|
||||||
"params":{
|
|
||||||
"serverName": "眉间雪"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"aijx3_qiyu":{
|
"aijx3_qiyu":{
|
||||||
"url":"https://www.jianxiachaguan.cn/api2/aijx3-jxcg/game/get-adventure-record",
|
"url":"https://www.jianxiachaguan.cn/api2/aijx3-jxcg/game/get-adventure-record",
|
||||||
"method":"POST",
|
"method":"POST",
|
||||||
@@ -56,96 +48,6 @@
|
|||||||
"serverName": "眉间雪"
|
"serverName": "眉间雪"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"aijx3_SearchData":{
|
|
||||||
"url":"https://www.aijx3.cn/api2/aijx3-wblwg/basedata/getSearchData",
|
|
||||||
"method":"POST",
|
|
||||||
"description":"获取爱剑网三所有外观数据",
|
|
||||||
"params":{
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"jx3box_exterior":{
|
|
||||||
"url":"https://node.jx3box.com/api/node/v2/exterior/list",
|
|
||||||
"method":"GET",
|
|
||||||
"description":"魔盒中模糊查找剑网三的外观数据",
|
|
||||||
"params":{
|
|
||||||
"keyword": "秃盒",
|
|
||||||
"tradable": "0",
|
|
||||||
"list_type": "0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"aijx3_GoodsDetail":{
|
|
||||||
"url":"https://www.aijx3.cn/api2/aijx3-wj/goods/getGoodsDetail",
|
|
||||||
"method":"POST",
|
|
||||||
"description":"在爱剑网三中获取外观详细数据",
|
|
||||||
"params":{
|
|
||||||
"goodsName": "秃盒"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"aijx3_wblwg":{
|
|
||||||
"url":"https://www.aijx3.cn/api2/aijx3-wblwg/record/queryByCondition",
|
|
||||||
"method":"POST",
|
|
||||||
"description":"在爱剑网三中获取外观详细数据",
|
|
||||||
"params":{
|
|
||||||
"accoSeq": "",
|
|
||||||
"orderMode": 1,
|
|
||||||
"orderBy": "price_num",
|
|
||||||
"searchId": [48356],
|
|
||||||
"current": 1,
|
|
||||||
"size": 10,
|
|
||||||
"tradeStatus": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"jx3box_item":{
|
|
||||||
"url":"https://node.jx3box.com/api/node/item/search",
|
|
||||||
"method":"GET",
|
|
||||||
"description":"魔盒中模糊查找剑网三的物品数据",
|
|
||||||
"params":{
|
|
||||||
"keyword": "守缺式",
|
|
||||||
"page": "1",
|
|
||||||
"per": "50"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"jx3box_itemprice":{
|
|
||||||
"url":"https://next2.jx3box.com/api/item-price/list",
|
|
||||||
"method":"GET",
|
|
||||||
"description":"交易行中在售物品数据",
|
|
||||||
"params":{
|
|
||||||
"server": "眉间雪",
|
|
||||||
"itemIds": ["5_76650"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wbl_waiguan":{
|
|
||||||
"url":"https://trade-api.seasunwbl.com/api/buyer/goods/list",
|
|
||||||
"method":"GET",
|
|
||||||
"description":"万宝楼官方交易数据",
|
|
||||||
"params":{
|
|
||||||
"filter[state]": "0",
|
|
||||||
"filter[role_appearance]": "浮屠明音礼盒",
|
|
||||||
"page": "1",
|
|
||||||
"size": "10",
|
|
||||||
"goods_type": "3",
|
|
||||||
"sort[price]": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wzry_zhanji":{
|
|
||||||
"url":"https://api.t1qq.com/api/tool/wzrr/morebattle",
|
|
||||||
"method":"GET",
|
|
||||||
"description":"王者荣耀战绩查询",
|
|
||||||
"params":{
|
|
||||||
"key": "vBpEzoiC9z5A9c9Nn83IhLn6M9",
|
|
||||||
"id": "489048724",
|
|
||||||
"option": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wzry_ziliao":{
|
|
||||||
"url":"https://api.t1qq.com/api/tool/wzrr/ydtp",
|
|
||||||
"method":"GET",
|
|
||||||
"description":"王者荣耀资料查询",
|
|
||||||
"params":{
|
|
||||||
"key": "vBpEzoiC9z5A9c9Nn83IhLn6M9",
|
|
||||||
"id": "489048724"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"jx3_jieshemingpian":{
|
"jx3_jieshemingpian":{
|
||||||
"url":"https://www.jx3api.com/data/show/card",
|
"url":"https://www.jx3api.com/data/show/card",
|
||||||
"method":"GET",
|
"method":"GET",
|
||||||
@@ -225,7 +127,7 @@
|
|||||||
"server": "梦江南",
|
"server": "梦江南",
|
||||||
"name": "飞翔大野猪",
|
"name": "飞翔大野猪",
|
||||||
"mode": "33",
|
"mode": "33",
|
||||||
"ticket": "a7fd656a52d747d7830cfa6d686e6030:qsc20001102:kingsoft::sVpKi7nFKzFlbTwtBMTg2w==",
|
"ticket": "",
|
||||||
"token":""
|
"token":""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -275,5 +177,23 @@
|
|||||||
"name": "玄晶",
|
"name": "玄晶",
|
||||||
"token": ""
|
"token": ""
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"jx3_fuyaojiutian":{
|
||||||
|
"url":"https://www.jx3api.com/data/active/next/event",
|
||||||
|
"method":"GET",
|
||||||
|
"description":"获取某区服扶摇九天的下次开启时间",
|
||||||
|
"params":{
|
||||||
|
"server": "梦江南",
|
||||||
|
"token": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"jx3_shuama":{
|
||||||
|
"url":"https://www.jx3api.com/data/horse/ranch",
|
||||||
|
"method":"GET",
|
||||||
|
"description":"获取某区服坐骑刷新时间",
|
||||||
|
"params":{
|
||||||
|
"server": "梦江南",
|
||||||
|
"token": ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Binary file not shown.
@@ -61,16 +61,17 @@ class Jx3ApiPlugin(Star):
|
|||||||
async def initialize(self):
|
async def initialize(self):
|
||||||
"""可选择实现异步的插件初始化方法,当实例化该插件类之后会自动调用该方法。"""
|
"""可选择实现异步的插件初始化方法,当实例化该插件类之后会自动调用该方法。"""
|
||||||
#创建类实例
|
#创建类实例
|
||||||
self.db = AsyncSQLite(str(self.file_local_data))
|
# self.db = AsyncSQLite(str(self.file_local_data))
|
||||||
self.jx3fun = JX3Service(self.api_config,self.db,self.conf)
|
try:
|
||||||
self.at = AsyncTask(self.context, self.conf, self.jx3fun)
|
self.jx3fun = JX3Service(self.api_config,self.conf)
|
||||||
|
self.at = AsyncTask(self.context, self.conf, self.jx3fun)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"功能示例初始化失败: {e}")
|
||||||
|
return
|
||||||
# 周期函数调用
|
# 周期函数调用
|
||||||
self.kf_task = asyncio.create_task(self.at.cycle_kfjk())
|
self.kf_task = asyncio.create_task(self.at.cycle_kfjk())
|
||||||
self.xw_task = asyncio.create_task(self.at.cycle_xwzx())
|
self.xw_task = asyncio.create_task(self.at.cycle_xwzx())
|
||||||
# 初始化函数
|
# 初始化函数
|
||||||
#data=await self.jx3fun.SearchData()
|
|
||||||
#logger.info(data["msg"])
|
|
||||||
|
|
||||||
logger.info("jx3api异步插件初始化完成")
|
logger.info("jx3api异步插件初始化完成")
|
||||||
|
|
||||||
@@ -290,22 +291,6 @@ class Jx3ApiPlugin(Star):
|
|||||||
yield event.plain_result(return_msg)
|
yield event.plain_result(return_msg)
|
||||||
|
|
||||||
|
|
||||||
#@filter.permission_type(filter.PermissionType.ADMIN)
|
|
||||||
#@jx3.command("外观数据同步")
|
|
||||||
#async def jx3_SearchData(self, event: AstrMessageEvent):
|
|
||||||
# """剑三 外观数据同步"""
|
|
||||||
# try:
|
|
||||||
# data=await self.jx3fun.SearchData()
|
|
||||||
# if data["code"] == 200:
|
|
||||||
# yield event.plain_result(data["msg"])
|
|
||||||
# else:
|
|
||||||
# yield event.plain_result(data["msg"])
|
|
||||||
# return
|
|
||||||
# except Exception as e:
|
|
||||||
# logger.error(f"功能函数执行错误: {e}")
|
|
||||||
# yield event.plain_result("猪脑过载,请稍后再试")
|
|
||||||
|
|
||||||
|
|
||||||
@jx3.command("名片")
|
@jx3.command("名片")
|
||||||
async def jx3_jueshemingpian(self, event: AstrMessageEvent, name: str = "飞翔大野猪", server: str = None):
|
async def jx3_jueshemingpian(self, event: AstrMessageEvent, name: str = "飞翔大野猪", server: str = None):
|
||||||
"""剑三 名片 角色 服务器"""
|
"""剑三 名片 角色 服务器"""
|
||||||
@@ -442,6 +427,36 @@ class Jx3ApiPlugin(Star):
|
|||||||
yield event.plain_result("猪脑过载,请稍后再试")
|
yield event.plain_result("猪脑过载,请稍后再试")
|
||||||
|
|
||||||
|
|
||||||
|
@jx3.command("扶摇九天")
|
||||||
|
async def jx3_fuyaojjiutian(self, event: AstrMessageEvent,server: str = None):
|
||||||
|
"""剑三 日常 服务器 天数"""
|
||||||
|
try:
|
||||||
|
data= await self.jx3fun.fuyaojjiutian(await self.serverdefault(server))
|
||||||
|
if data["code"] == 200:
|
||||||
|
yield event.plain_result(data["data"])
|
||||||
|
else:
|
||||||
|
yield event.plain_result(data["msg"])
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"功能函数执行错误: {e}")
|
||||||
|
yield event.plain_result("猪脑过载,请稍后再试")
|
||||||
|
|
||||||
|
|
||||||
|
@jx3.command("刷马")
|
||||||
|
async def jx3_shuma(self, event: AstrMessageEvent,server: str = None):
|
||||||
|
"""剑三 日常 服务器 天数"""
|
||||||
|
try:
|
||||||
|
data= await self.jx3fun.shuma(await self.serverdefault(server))
|
||||||
|
if data["code"] == 200:
|
||||||
|
yield event.plain_result(data["data"])
|
||||||
|
else:
|
||||||
|
yield event.plain_result(data["msg"])
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"功能函数执行错误: {e}")
|
||||||
|
yield event.plain_result("猪脑过载,请稍后再试")
|
||||||
|
|
||||||
|
|
||||||
async def terminate(self):
|
async def terminate(self):
|
||||||
"""可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。"""
|
"""可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。"""
|
||||||
# 关闭数据库连接
|
# 关闭数据库连接
|
||||||
|
|||||||
Reference in New Issue
Block a user