OK
This commit is contained in:
@@ -12,11 +12,11 @@
|
|||||||
|
|
||||||
## 简介
|
## 简介
|
||||||
|
|
||||||
主要是自用,查询战绩,在游戏中隐藏的战绩也可以查。只有营地里面大号的ID才可查询。
|
主要是自用,查询战绩,在游戏中隐藏的战绩也可以查,如果营地的战绩也隐藏了就查不了。只有营地里面大号的ID才可查询。
|
||||||
|
|
||||||
插件功能绝大部分都是用AI写的,又进行了调试。
|
插件功能绝大部分都是用AI写的,又进行了调试。
|
||||||
|
|
||||||
插件数据依赖应天API提供接口,需要自行支持创建token密钥才可使用。(每天免费10000次调用)
|
插件数据依赖外部接口提供,需要自行支持创建令牌才可使用。(免费调用)
|
||||||
|
|
||||||
## 更新记录
|
## 更新记录
|
||||||
|
|
||||||
@@ -24,6 +24,8 @@ version: 1.0.0:大部分重要功能已经实现
|
|||||||
|
|
||||||
version: 1.0.1:新增英雄的上榜战力查询,需要柠柚API。
|
version: 1.0.1:新增英雄的上榜战力查询,需要柠柚API。
|
||||||
|
|
||||||
|
version: 1.0.2:新增战绩评价功能,参考最新10把战绩,调用模型进行简单的评价。
|
||||||
|
|
||||||
## 功能特点
|
## 功能特点
|
||||||
|
|
||||||
- **处理接口数据**:将接口返回的数据处理成,玩家能读懂的消息发送
|
- **处理接口数据**:将接口返回的数据处理成,玩家能读懂的消息发送
|
||||||
|
|||||||
@@ -28,5 +28,24 @@
|
|||||||
"type": "string",
|
"type": "string",
|
||||||
"default": "",
|
"default": "",
|
||||||
"hint": "前往https://api.nycnm.cn 注册并创建令牌(免费)。"
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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))
|
|
||||||
@@ -347,6 +347,11 @@ class GOKServer:
|
|||||||
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)
|
||||||
|
|
||||||
@@ -362,6 +367,8 @@ class GOKServer:
|
|||||||
"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"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 获取数据
|
# 获取数据
|
||||||
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)
|
||||||
if not data:
|
if not data:
|
||||||
@@ -370,6 +377,15 @@ class GOKServer:
|
|||||||
|
|
||||||
# 处理返回数据
|
# 处理返回数据
|
||||||
try:
|
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)
|
result = extract_fields(data['list'], fields)
|
||||||
@@ -381,6 +397,7 @@ class GOKServer:
|
|||||||
m["time_str"] = f"{minutes}:{seconds:02d}"
|
m["time_str"] = f"{minutes}:{seconds:02d}"
|
||||||
|
|
||||||
return_data["data"]["data"] = result
|
return_data["data"]["data"] = result
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"处理数据时出错: {e}")
|
logger.error(f"处理数据时出错: {e}")
|
||||||
return_data["msg"] = "处理接口返回信息时出错"
|
return_data["msg"] = "处理接口返回信息时出错"
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from astrbot.api import AstrBotConfig
|
|||||||
|
|
||||||
from .core.sqlite import AsyncSQLiteDB
|
from .core.sqlite import AsyncSQLiteDB
|
||||||
from .core.gok_data import GOKServer
|
from .core.gok_data import GOKServer
|
||||||
from .core.gok_commands import GOKCommands
|
|
||||||
|
|
||||||
|
|
||||||
@register("astrbot_plugin_gok",
|
@register("astrbot_plugin_gok",
|
||||||
@@ -71,8 +70,7 @@ class GokApiPlugin(Star):
|
|||||||
""")
|
""")
|
||||||
# 王者功能 实例化
|
# 王者功能 实例化
|
||||||
self.gokfun = GOKServer(self.api_config, self.conf, self.sql_db)
|
self.gokfun = GOKServer(self.api_config, self.conf, self.sql_db)
|
||||||
# 发送消息实例化
|
|
||||||
self.gokmag = GOKCommands(self.gokfun)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"功能模块初始化失败: {e}")
|
logger.error(f"功能模块初始化失败: {e}")
|
||||||
raise
|
raise
|
||||||
@@ -181,16 +179,138 @@ class GokApiPlugin(Star):
|
|||||||
def ini_command_map(self):
|
def ini_command_map(self):
|
||||||
"""初始化指令集"""
|
"""初始化指令集"""
|
||||||
self.command_map = {
|
self.command_map = {
|
||||||
"王者功能": self.gokmag.gok_helps,
|
"王者功能": self.gok_helps,
|
||||||
"王者战绩": self.gokmag.gok_zhanji,
|
"王者战绩": self.gok_zhanji,
|
||||||
"王者资料": self.gokmag.gok_ziliao,
|
"王者资料": self.gok_ziliao,
|
||||||
"上榜战力": self.gokmag.gok_zhanli,
|
"上榜战力": self.gok_zhanli,
|
||||||
"角色查看": self.gokmag.gok_user_all,
|
"角色查看": self.gok_user_all,
|
||||||
"角色添加": self.gokmag.gok_user_add,
|
"角色添加": self.gok_user_add,
|
||||||
"角色修改": self.gokmag.gok_user_update,
|
"角色修改": self.gok_user_update,
|
||||||
"角色删除": self.gokmag.gok_user_delete,
|
"角色删除": self.gok_user_delete,
|
||||||
"角色查询": self.gokmag.gok_user_select
|
"角色查询": 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
@@ -1,6 +1,6 @@
|
|||||||
name: astrbot_plugin_gok
|
name: astrbot_plugin_gok
|
||||||
display_name: 王者荣耀游戏数据查询工具
|
display_name: 王者荣耀游戏数据查询工具
|
||||||
desc: 王者荣耀的战绩、资料等内容的查询
|
desc: 王者荣耀的战绩、资料等内容的查询。数据来源王者营地,可查询在游戏内隐藏的战绩,营地也隐藏就不行了。
|
||||||
version: v1.0.1
|
version: v1.0.2
|
||||||
author: 飞翔大野猪
|
author: 飞翔大野猪
|
||||||
repo: https://github.com/qsc20001102/astrbot_plugin_gok
|
repo: https://github.com/qsc20001102/astrbot_plugin_gok
|
||||||
|
|||||||
Reference in New Issue
Block a user