This commit is contained in:
qsc
2026-02-14 18:33:05 +08:00
parent 90aa479ade
commit 2548da9af3
6 changed files with 175 additions and 130 deletions
+4 -2
View File
@@ -12,11 +12,11 @@
## 简介
主要是自用,查询战绩,在游戏中隐藏的战绩也可以查。只有营地里面大号的ID才可查询。
主要是自用,查询战绩,在游戏中隐藏的战绩也可以查,如果营地的战绩也隐藏了就查不了。只有营地里面大号的ID才可查询。
插件功能绝大部分都是用AI写的,又进行了调试。
插件数据依赖应天API提供接口,需要自行支持创建token密钥才可使用。(每天免费10000次调用)
插件数据依赖外部接口提供,需要自行支持创建令牌才可使用。(免费调用)
## 更新记录
@@ -24,6 +24,8 @@ version: 1.0.0:大部分重要功能已经实现
version: 1.0.1:新增英雄的上榜战力查询,需要柠柚API。
version: 1.0.2:新增战绩评价功能,参考最新10把战绩,调用模型进行简单的评价。
## 功能特点
- **处理接口数据**:将接口返回的数据处理成,玩家能读懂的消息发送
+19
View File
@@ -28,5 +28,24 @@
"type": "string",
"default": "",
"hint": "前往https://api.nycnm.cn 注册并创建令牌(免费)。"
},
"comment": {
"description": "战绩锐评",
"type": "object",
"items": {
"enable": {
"description": "是否启用",
"type": "bool",
"default": false,
"hint": "是否启用战绩锐评功能"
},
"select_provider": {
"description": "锐评模型",
"type": "string",
"hint": "锐评战绩的模型,留空使用会话默认模型",
"default": "",
"_special": "select_provider"
}
}
}
}
-113
View File
@@ -1,113 +0,0 @@
# pyright: reportArgumentType=false
# pyright: reportAttributeAccessIssue=false
# pyright: reportIndexIssue=false
# pyright: reportOptionalMemberAccess=false
import json
import shutil
import pathlib
import inspect
from pathlib import Path
from typing import Union
import asyncio
from astrbot.api.event import filter, AstrMessageEvent, MessageEventResult, MessageChain
from astrbot.api.star import Context, Star, register, StarTools
from astrbot.api import logger
from astrbot.api import AstrBotConfig
import astrbot.api.message_components as Comp
from astrbot.core.utils.session_waiter import (
SessionController,
session_waiter,
)
from .gok_data import GOKServer
class GOKCommands(Star):
def __init__(self, gok_data:GOKServer):
self.gokfun = gok_data
async def plain_msg(self, event: AstrMessageEvent, action):
"""最终将数据整理成文本发送"""
data= await action()
try:
if data["code"] == 200:
await event.send( event.plain_result(data["data"]))
else:
await event.send(event.plain_result(data["msg"]))
except Exception as e:
logger.error(f"功能函数执行错误: {e}")
await event.send(event.plain_result("猪脑过载,请稍后再试"))
async def T2I_image_msg(self, event: AstrMessageEvent, action):
"""最终将数据渲染成图片发送"""
data = await action()
try:
if data["code"] == 200:
url = await self.html_render(data["temp"], data["data"], options={})
await event.send(event.image_result(url))
else:
await event.send(event.plain_result(data["msg"]))
except Exception as e:
logger.error(f"功能函数执行错误: {e}")
await event.send(event.plain_result("猪脑过载,请稍后再试"))
async def image_msg(self, event: AstrMessageEvent, action):
"""最终将数据整理成图片发送"""
data = await action()
try:
if data["code"] == 200:
await event.send(event.image_result(data["data"]))
else:
await event.send(event.plain_result(data["msg"]))
except Exception as e:
logger.error(f"功能函数执行错误: {e}")
await event.send(event.plain_result("猪脑过载,请稍后再试"))
async def gok_helps(self, event: AstrMessageEvent):
"""王者功能"""
return await self.T2I_image_msg(event, self.gokfun.helps)
async def gok_zhanji(self, event: AstrMessageEvent,name: str,option:str = 0):
"""王者战绩"""
return await self.T2I_image_msg(event, lambda: self.gokfun.zhanji(name ,option))
async def gok_ziliao(self, event: AstrMessageEvent,name: str):
"""王者资料"""
return await self.T2I_image_msg(event, lambda: self.gokfun.ziliao(name))
async def gok_zhanli(self, event: AstrMessageEvent, hero: str, type: str = "aqq"):
"""英雄战力 名称 大区"""
return await self.plain_msg(event, lambda: self.gokfun.zhanli(hero,type))
async def gok_user_all(self, event: AstrMessageEvent):
"""角色查看"""
return await self.T2I_image_msg(event, self.gokfun.all)
async def gok_user_add(self, event: AstrMessageEvent, gokid: int, name: str):
"""角色添加 王者营地ID 名称"""
return await self.plain_msg(event, lambda: self.gokfun.add(gokid,name))
async def gok_user_update(self, event: AstrMessageEvent, gokid: int, name: str):
"""角色修改 王者营地ID 名称"""
return await self.plain_msg(event, lambda: self.gokfun.update(gokid,name))
async def gok_user_delete(self, event: AstrMessageEvent, gokid:int):
"""角色删除 王者营地ID"""
return await self.plain_msg(event, lambda: self.gokfun.delete(gokid))
async def gok_user_select(self, event: AstrMessageEvent, gokid):
"""角色查询 王者营地ID"""
return await self.T2I_image_msg(event, lambda: self.gokfun.select(gokid))
+17
View File
@@ -347,6 +347,11 @@ class GOKServer:
return_data["msg"] = "系统未配置API访问Token"
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查询
gokid = await self.get_gokid(name)
@@ -362,6 +367,8 @@ class GOKServer:
"oldMasterMatchScore","newMasterMatchScore","usedTime","winNum","failNum","roleJobName","stars","desc",
"gradeGame","heroIcon","godLikeCnt", "firstBlood","hero1TripleKillCnt","hero1UltraKillCnt","hero1RampageCnt","evaluateUrlV3","mvpUrlV3"]
# 获取数据
data: Optional[List[Dict[str, Any]]] = await self._base_request("gok_zhanji", "GET", params=params)
if not data:
@@ -370,6 +377,15 @@ class GOKServer:
# 处理返回数据
try:
# 提取锐评数据
if self.comment_en:
return_data["comment"] = {}
comment = ["gametime","killcnt","deadcnt","assistcnt","gameresult","mvpcnt","losemvp","gradeGame"]
comments = extract_fields(data['list'], comment)
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)
@@ -381,6 +397,7 @@ class GOKServer:
m["time_str"] = f"{minutes}:{seconds:02d}"
return_data["data"]["data"] = result
except Exception as e:
logger.error(f"处理数据时出错: {e}")
return_data["msg"] = "处理接口返回信息时出错"
+132 -12
View File
@@ -14,7 +14,6 @@ from astrbot.api import AstrBotConfig
from .core.sqlite import AsyncSQLiteDB
from .core.gok_data import GOKServer
from .core.gok_commands import GOKCommands
@register("astrbot_plugin_gok",
@@ -71,8 +70,7 @@ class GokApiPlugin(Star):
""")
# 王者功能 实例化
self.gokfun = GOKServer(self.api_config, self.conf, self.sql_db)
# 发送消息实例化
self.gokmag = GOKCommands(self.gokfun)
except Exception as e:
logger.error(f"功能模块初始化失败: {e}")
raise
@@ -181,16 +179,138 @@ class GokApiPlugin(Star):
def ini_command_map(self):
"""初始化指令集"""
self.command_map = {
"王者功能": self.gokmag.gok_helps,
"王者战绩": self.gokmag.gok_zhanji,
"王者资料": self.gokmag.gok_ziliao,
"上榜战力": self.gokmag.gok_zhanli,
"角色查看": self.gokmag.gok_user_all,
"角色添加": self.gokmag.gok_user_add,
"角色修改": self.gokmag.gok_user_update,
"角色删除": self.gokmag.gok_user_delete,
"角色查询": self.gokmag.gok_user_select
"王者功能": self.gok_helps,
"王者战绩": self.gok_zhanji,
"王者资料": self.gok_ziliao,
"上榜战力": self.gok_zhanli,
"角色查看": self.gok_user_all,
"角色添加": self.gok_user_add,
"角色修改": self.gok_user_update,
"角色删除": self.gok_user_delete,
"角色查询": self.gok_user_select
}
async def plain_msg(self, event: AstrMessageEvent, action):
"""最终将数据整理成文本发送"""
data= await action()
try:
if data["code"] == 200:
await event.send( event.plain_result(data["data"]))
else:
await event.send(event.plain_result(data["msg"]))
except Exception as e:
logger.error(f"功能函数执行错误: {e}")
await event.send(event.plain_result("猪脑过载,请稍后再试"))
async def T2I_image_msg(self, event: AstrMessageEvent, action):
"""最终将数据渲染成图片发送"""
data = await action()
try:
if data["code"] == 200:
url = await self.html_render(data["temp"], data["data"], options={})
await event.send(event.image_result(url))
else:
await event.send(event.plain_result(data["msg"]))
except Exception as e:
logger.error(f"功能函数执行错误: {e}")
await event.send(event.plain_result("猪脑过载,请稍后再试"))
async def image_msg(self, event: AstrMessageEvent, action):
"""最终将数据整理成图片发送"""
data = await action()
try:
if data["code"] == 200:
await event.send(event.image_result(data["data"]))
else:
await event.send(event.plain_result(data["msg"]))
except Exception as e:
logger.error(f"功能函数执行错误: {e}")
await event.send(event.plain_result("猪脑过载,请稍后再试"))
async def T2I_image_and_plain_msg(self, event: AstrMessageEvent, action):
"""战绩定制功能"""
data = await action()
# 发送渲染战绩图片
try:
if data["code"] == 200:
url = await self.html_render(data["temp"], data["data"], options={})
await event.send(event.image_result(url))
else:
await event.send(event.plain_result(data["msg"]))
except Exception as e:
logger.error(f"功能函数执行错误: {e}")
await event.send(event.plain_result("猪脑过载,请稍后再试"))
# 对战绩进行锐评
try:
if data["code"] == 200 and data["comment"]["en"]:
# 确定使用模型
if data["comment"]["provider"] =="":
umo = event.unified_msg_origin
provider_id = await self.context.get_current_chat_provider_id(umo=umo)
else:
provider_id = data["comment"]["provider"]
# 模型提示词构建
prompt = "请根据下面提供的王者荣耀最近10把的战绩数据,用简短的一句话进行锐评吐槽。"
prompt += f"这是战绩列表\n{data['comment']['data']}\n"
prompt += f"gametime 字段 对局开始时间\n"
prompt += f"killcnt 字段 击杀数\n"
prompt += f"deadcnt 字段 死亡数\n"
prompt += f"assistcnt 字段 助攻数\n"
prompt += f"gameresult 字段 1代表胜利 2代表失败 3代表平局\n"
prompt += f"mvpcnt 字段 1代表是胜利方MVP 0表示不是\n"
prompt += f"losemvp 字段 1代表是失败方MVP 0表示不是\n"
prompt += f"gradeGame 字段 系统给的评分,满分16分\n"
# 调用模型
llm_resp = await self.context.llm_generate(chat_provider_id=provider_id, prompt=prompt)
# 发送消息
await event.send(event.plain_result(llm_resp.completion_text))
except Exception as e:
logger.error(f"功能函数执行错误: {e}")
await event.send(event.plain_result("猪脑过载,请稍后再试"))
async def gok_helps(self, event: AstrMessageEvent):
"""王者功能"""
return await self.T2I_image_msg(event, self.gokfun.helps)
async def gok_zhanji(self, event: AstrMessageEvent,name: str,option:str = 0):
"""王者战绩"""
return await self.T2I_image_and_plain_msg(event, lambda: self.gokfun.zhanji(name ,option))
async def gok_ziliao(self, event: AstrMessageEvent,name: str):
"""王者资料"""
return await self.T2I_image_msg(event, lambda: self.gokfun.ziliao(name))
async def gok_zhanli(self, event: AstrMessageEvent, hero: str, type: str = "aqq"):
"""英雄战力 名称 大区"""
return await self.plain_msg(event, lambda: self.gokfun.zhanli(hero,type))
async def gok_user_all(self, event: AstrMessageEvent):
"""角色查看"""
return await self.T2I_image_msg(event, self.gokfun.all)
async def gok_user_add(self, event: AstrMessageEvent, gokid: int, name: str):
"""角色添加 王者营地ID 名称"""
return await self.plain_msg(event, lambda: self.gokfun.add(gokid,name))
async def gok_user_update(self, event: AstrMessageEvent, gokid: int, name: str):
"""角色修改 王者营地ID 名称"""
return await self.plain_msg(event, lambda: self.gokfun.update(gokid,name))
async def gok_user_delete(self, event: AstrMessageEvent, gokid:int):
"""角色删除 王者营地ID"""
return await self.plain_msg(event, lambda: self.gokfun.delete(gokid))
async def gok_user_select(self, event: AstrMessageEvent, gokid):
"""角色查询 王者营地ID"""
return await self.T2I_image_msg(event, lambda: self.gokfun.select(gokid))
+2 -2
View File
@@ -1,6 +1,6 @@
name: astrbot_plugin_gok
display_name: 王者荣耀游戏数据查询工具
desc: 王者荣耀的战绩、资料等内容的查询
version: v1.0.1
desc: 王者荣耀的战绩、资料等内容的查询。数据来源王者营地,可查询在游戏内隐藏的战绩,营地也隐藏就不行了。
version: v1.0.2
author: 飞翔大野猪
repo: https://github.com/qsc20001102/astrbot_plugin_gok