This commit is contained in:
qsc
2026-02-14 20:01:28 +08:00
parent 2548da9af3
commit 5fca36d1ed
5 changed files with 56 additions and 56 deletions
+6 -14
View File
@@ -1,15 +1,5 @@
# 王者数据查询工具 # 王者数据查询工具
## 目录
- [王者荣耀数据查询工具](#-王者荣耀数据查询工具)
- [目录](#-目录)
- [简介](#-简介)
- [更新记录](#-更新记录)
- [功能特点](#-功能特点)
- [插件配置](#-插件配置)
- [使用方式](#-使用方式)
## 简介 ## 简介
主要是自用,查询战绩,在游戏中隐藏的战绩也可以查,如果营地的战绩也隐藏了就查不了。只有营地里面大号的ID才可查询。 主要是自用,查询战绩,在游戏中隐藏的战绩也可以查,如果营地的战绩也隐藏了就查不了。只有营地里面大号的ID才可查询。
@@ -20,11 +10,11 @@
## 更新记录 ## 更新记录
version: 1.0.0:大部分重要功能已经实现 version: 1.0.2:新增战绩评价功能,参考最新10把战绩,调用模型进行简单的评价。指令触发方式调整,删除王者字符。如果还需要王者战绩来触发需要在指令前缀里面添加 王者。
version: 1.0.1:新增英雄的上榜战力查询,需要柠柚API。 version: 1.0.1:新增英雄的上榜战力查询,需要柠柚API。
version: 1.0.2:新增战绩评价功能,参考最新10把战绩,调用模型进行简单的评价。 version: 1.0.0:大部分重要功能已经实现
## 功能特点 ## 功能特点
@@ -47,9 +37,11 @@ version: 1.0.2:新增战绩评价功能,参考最新10把战绩,调用模
## 使用方式 ## 使用方式
在聊天中输入 **王者功能** 即可获取插件所有的功能使用说明 如果开启了前缀,需要在所有指令前面加上设定的前缀
使用 **王者战绩****王者资料** 两个功能时后面可以直接输入营地ID进行查询,或者输入提前自定义好的角色来查询 聊天中输入 **功能** 即可获取插件所有的功能使用说明
在使用 **战绩****资料** 两个功能时后面可以直接输入营地ID进行查询,或者输入提前自定义好的角色来查询。
在使用 **上榜战力** 时,可以在英雄名称后面加一个大区参数 aqq awx iqq iwx 四个大区,不写默认aqq。 在使用 **上榜战力** 时,可以在英雄名称后面加一个大区参数 aqq awx iqq iwx 四个大区,不写默认aqq。
+2 -2
View File
@@ -6,13 +6,13 @@
"enable": { "enable": {
"description": "是否启用", "description": "是否启用",
"type": "bool", "type": "bool",
"default": false, "default": true,
"hint": "是否启用指令前缀检查功能" "hint": "是否启用指令前缀检查功能"
}, },
"text": { "text": {
"description": "前缀内容", "description": "前缀内容",
"type": "string", "type": "string",
"default": "王者荣耀", "default": "王者",
"hint": "为了避免和其他插件的指令冲突可以增加指令的前缀,为空默认值为王者。" "hint": "为了避免和其他插件的指令冲突可以增加指令的前缀,为空默认值为王者。"
} }
} }
+24 -28
View File
@@ -26,11 +26,17 @@ class GOKServer:
self._sql_db = sqlite self._sql_db = sqlite
# 获取配置中的 Token # 获取配置中的 Token
self.token = self._config.get("ytapi_token", "") self.ytapi_token = self._config.get("ytapi_token", "")
if self.token == "": if self.ytapi_token == "":
logger.info("获取配置token失败,请正确填写token,否则部分功能无法正常使用") logger.warning("获取应天API令牌配置失败,请正确填写令牌,否则部分功能无法正常使用")
else: else:
logger.debug(f"获取配置token成功。{self.token}") logger.debug(f"获取应天API令牌成功。{self.ytapi_token}")
self.nyapi_token = self._config.get("nyapi_token", "")
if self.nyapi_token == "":
logger.warning("获取柠柚API令牌配置失败,请正确填写令牌,否则部分功能无法正常使用")
else:
logger.debug(f"获取柠柚API令牌成功。{self.nyapi_token}")
async def close(self): async def close(self):
@@ -342,16 +348,10 @@ class GOKServer:
return_data = self._init_return_data() return_data = self._init_return_data()
# 获取配置中的 Token # 获取配置中的 Token
token = self._config.get("ytapi_token", "") if self.ytapi_token == "":
if token == "":
return_data["msg"] = "系统未配置API访问Token" return_data["msg"] = "系统未配置API访问Token"
return return_data return return_data
self.comment_en = self._config.get("comment").get("enable")
logger.debug(self.comment_en)
self.comment_provider = self._config.get("comment").get("select_provider")
logger.debug(self.comment_provider)
# ID查询 # ID查询
gokid = await self.get_gokid(name) gokid = await self.get_gokid(name)
@@ -360,14 +360,15 @@ class GOKServer:
return return_data return return_data
#更新参数 #更新参数
params = {"id": gokid, "option": option, "key": token} params = {"id": gokid, "option": option, "key": self.ytapi_token}
# 需要提取的字段 # 需要提取的字段
fields = ["gametime","killcnt","deadcnt","assistcnt","gameresult","mvpcnt","losemvp","mapName", fields = ["gametime","killcnt","deadcnt","assistcnt","gameresult","mvpcnt","losemvp","mapName",
"oldMasterMatchScore","newMasterMatchScore","usedTime","winNum","failNum","roleJobName","stars","desc", "oldMasterMatchScore","newMasterMatchScore","usedTime","winNum","failNum","roleJobName","stars","desc",
"gradeGame","heroIcon","godLikeCnt", "firstBlood","hero1TripleKillCnt","hero1UltraKillCnt","hero1RampageCnt","evaluateUrlV3","mvpUrlV3"] "gradeGame","heroIcon","godLikeCnt", "firstBlood","hero1TripleKillCnt","hero1UltraKillCnt","hero1RampageCnt","evaluateUrlV3","mvpUrlV3"]
# 锐评提取字段
comment = ["gametime","killcnt","deadcnt","assistcnt","gameresult","mvpcnt","losemvp","gradeGame"]
# 获取数据 # 获取数据
data: Optional[List[Dict[str, Any]]] = await self._base_request("gok_zhanji", "GET", params=params) data: Optional[List[Dict[str, Any]]] = await self._base_request("gok_zhanji", "GET", params=params)
@@ -378,18 +379,15 @@ class GOKServer:
# 处理返回数据 # 处理返回数据
try: try:
# 提取锐评数据 # 提取锐评数据
if self.comment_en: return_data["comment"] = {}
return_data["comment"] = {} comments = extract_fields(data['list'], comment)
comment = ["gametime","killcnt","deadcnt","assistcnt","gameresult","mvpcnt","losemvp","gradeGame"] comments = comments[:10]
comments = extract_fields(data['list'], comment) return_data["comment"]["data"] = comments
comments = comments[:10]
return_data["comment"]["data"] = comments
return_data["comment"]["provider"] = self.comment_provider
return_data["comment"]["en"] = self.comment_en
# 提取字段 # 提取字段
result = extract_fields(data['list'], fields) result = extract_fields(data['list'], fields)
result = result[:25] result = result[:25]
# 数据处理 # 数据处理
for m in result: for m in result:
minutes = m["usedTime"] // 60 minutes = m["usedTime"] // 60
@@ -419,8 +417,7 @@ class GOKServer:
async def ziliao(self, name: str): async def ziliao(self, name: str):
return_data = self._init_return_data() return_data = self._init_return_data()
# 获取配置中的 Token # 获取配置中的 Token
token = self._config.get("ytapi_token", "") if self.ytapi_token == "":
if token == "":
return_data["msg"] = "系统未配置API访问Token" return_data["msg"] = "系统未配置API访问Token"
return return_data return return_data
@@ -432,7 +429,7 @@ class GOKServer:
return return_data return return_data
#更新参数 #更新参数
params = {"id": gokid, "key": token} params = {"id": gokid, "key": self.ytapi_token}
# 获取数据 # 获取数据
data: Optional[List[Dict[str, Any]]] = await self._base_request("gok_ziliao", "GET", params=params, out_key="") data: Optional[List[Dict[str, Any]]] = await self._base_request("gok_ziliao", "GET", params=params, out_key="")
@@ -465,13 +462,12 @@ class GOKServer:
async def zhanli(self,hero: str, type: str): async def zhanli(self,hero: str, type: str):
return_data = self._init_return_data() return_data = self._init_return_data()
# 获取配置中的 Token # 获取配置中的 Token
token = self._config.get("nyapi_token", "") if self.nyapi_token == "":
if token == "":
return_data["msg"] = "系统未配置API访问Token" return_data["msg"] = "系统未配置API访问Token"
return return_data return return_data
#更新参数 #更新参数
params = {"hero": hero, "type": type, "apikey": token} params = {"hero": hero, "type": type, "apikey": self.nyapi_token}
# 获取数据 # 获取数据
data: Optional[List[Dict[str, Any]]] = await self._base_request("gok_zhanli", "GET", params=params) data: Optional[List[Dict[str, Any]]] = await self._base_request("gok_zhanli", "GET", params=params)
+19 -8
View File
@@ -19,7 +19,7 @@ from .core.gok_data import GOKServer
@register("astrbot_plugin_gok", @register("astrbot_plugin_gok",
"fxdyz", "fxdyz",
"通过接口获取王者荣耀游戏数据", "通过接口获取王者荣耀游戏数据",
"1.0.1", "1.0.2",
"https://github.com/qsc20001102/astrbot_plugin_gok.git" "https://github.com/qsc20001102/astrbot_plugin_gok.git"
) )
class GokApiPlugin(Star): class GokApiPlugin(Star):
@@ -40,9 +40,9 @@ class GokApiPlugin(Star):
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.command_map = {} self.command_map = {}
# 指令前缀功能 # 指令前缀功能
self.prefix_en = self.conf.get("prefix").get("enable") self.prefix_en = self.conf.get("prefix").get("enable")
self.prefix_text = self.conf.get("prefix").get("text") self.prefix_text = self.conf.get("prefix").get("text")
@@ -53,6 +53,14 @@ class GokApiPlugin(Star):
else: else:
logger.info(f"未启用指令前缀功能。") logger.info(f"未启用指令前缀功能。")
# 战绩锐评功能
self.comment_en = self.conf.get("comment").get("enable")
self.comment_provider = self.conf.get("comment").get("select_provider")
if self.comment_en:
logger.info(f"锐评功能已经启用,模型为:{self.comment_provider}")
else:
logger.info(f"未启用锐评功能")
logger.info("GOK 插件初始化完成") logger.info("GOK 插件初始化完成")
@@ -80,6 +88,7 @@ class GokApiPlugin(Star):
logger.info("GOK 异步插件初始化完成") logger.info("GOK 异步插件初始化完成")
async def terminate(self): async def terminate(self):
"""可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。""" """可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。"""
if self.gokfun: if self.gokfun:
@@ -179,9 +188,9 @@ class GokApiPlugin(Star):
def ini_command_map(self): def ini_command_map(self):
"""初始化指令集""" """初始化指令集"""
self.command_map = { self.command_map = {
"王者功能": self.gok_helps, "功能": self.gok_helps,
"王者战绩": self.gok_zhanji, "战绩": self.gok_zhanji,
"王者资料": self.gok_ziliao, "资料": self.gok_ziliao,
"上榜战力": self.gok_zhanli, "上榜战力": self.gok_zhanli,
"角色查看": self.gok_user_all, "角色查看": self.gok_user_all,
"角色添加": self.gok_user_add, "角色添加": self.gok_user_add,
@@ -236,6 +245,7 @@ class GokApiPlugin(Star):
async def T2I_image_and_plain_msg(self, event: AstrMessageEvent, action): async def T2I_image_and_plain_msg(self, event: AstrMessageEvent, action):
"""战绩定制功能""" """战绩定制功能"""
data = await action() data = await action()
# 发送渲染战绩图片 # 发送渲染战绩图片
try: try:
if data["code"] == 200: if data["code"] == 200:
@@ -247,15 +257,16 @@ class GokApiPlugin(Star):
except Exception as e: except Exception as e:
logger.error(f"功能函数执行错误: {e}") logger.error(f"功能函数执行错误: {e}")
await event.send(event.plain_result("猪脑过载,请稍后再试")) await event.send(event.plain_result("猪脑过载,请稍后再试"))
# 对战绩进行锐评 # 对战绩进行锐评
try: try:
if data["code"] == 200 and data["comment"]["en"]: if data["code"] == 200 and self.comment_en:
# 确定使用模型 # 确定使用模型
if data["comment"]["provider"] =="": if self.comment_provider == "":
umo = event.unified_msg_origin umo = event.unified_msg_origin
provider_id = await self.context.get_current_chat_provider_id(umo=umo) provider_id = await self.context.get_current_chat_provider_id(umo=umo)
else: else:
provider_id = data["comment"]["provider"] provider_id = self.comment_provider
# 模型提示词构建 # 模型提示词构建
prompt = "请根据下面提供的王者荣耀最近10把的战绩数据,用简短的一句话进行锐评吐槽。" prompt = "请根据下面提供的王者荣耀最近10把的战绩数据,用简短的一句话进行锐评吐槽。"
+5 -4
View File
@@ -135,9 +135,9 @@
<div class="group"> <div class="group">
<div class="group-title">基础功能</div> <div class="group-title">基础功能</div>
<div class="command-grid"> <div class="command-grid">
<div class="command"><div class="cmd-name">王者功能</div><div class="cmd-usage">王者功能</div></div> <div class="command"><div class="cmd-name">功能</div><div class="cmd-usage">功能</div></div>
<div class="command"><div class="cmd-name">王者战绩</div><div class="cmd-usage">王者战绩 角色/营地ID</div></div> <div class="command"><div class="cmd-name">对局战绩</div><div class="cmd-usage">战绩 角色/营地ID</div></div>
<div class="command"><div class="cmd-name">王者资料</div><div class="cmd-usage">王者资料 角色/营地ID</div></div> <div class="command"><div class="cmd-name">角色资料</div><div class="cmd-usage">资料 角色/营地ID</div></div>
<div class="command"><div class="cmd-name">上榜战力</div><div class="cmd-usage">上榜战力 英雄 大区</div></div> <div class="command"><div class="cmd-name">上榜战力</div><div class="cmd-usage">上榜战力 英雄 大区</div></div>
<div class="command"><div class="cmd-name">角色查看</div><div class="cmd-usage">角色查看</div></div> <div class="command"><div class="cmd-name">角色查看</div><div class="cmd-usage">角色查看</div></div>
<div class="command"><div class="cmd-name">角色添加</div><div class="cmd-usage">角色添加 营地ID 角色</div></div> <div class="command"><div class="cmd-name">角色添加</div><div class="cmd-usage">角色添加 营地ID 角色</div></div>
@@ -150,7 +150,8 @@
<div class="tip"> <div class="tip">
<strong>使用提示:</strong><br> <strong>使用提示:</strong><br>
1. 指令里面的角色指的是自定义的查询名称<br> 1. 指令里面的角色指的是自定义的查询名称<br>
2. 战绩和资料的指令必须 token 可以使用<br> 2. 战绩和资料的指令必须配置令牌才可使用<br>
3. 如果启用指令前缀功能,需要在指令前面加上设定的前缀<br>
</div> </div>
</div> </div>