增加宏查找功能
This commit is contained in:
+65
-32
@@ -274,44 +274,77 @@ class JX3Commands(Star):
|
||||
logger.error(f"功能函数执行错误: {e}")
|
||||
yield event.plain_result("猪脑过载,请稍后再试")
|
||||
|
||||
async def jx3_hong(self, event: AstrMessageEvent, name: str = "易筋经"):
|
||||
|
||||
async def jx3_hong(self, event: AstrMessageEvent, kungfu: str = "易筋经"):
|
||||
"""剑三 宏 心法"""
|
||||
|
||||
macros = "已查询到的内容"
|
||||
if not macros:
|
||||
yield event.plain_result(f"未搜索到与【{name}】相关的宏")
|
||||
return
|
||||
|
||||
yield event.plain_result(macros)
|
||||
|
||||
user_id = event.get_sender_id()
|
||||
|
||||
|
||||
@session_waiter(timeout=10)
|
||||
async def macro_select_waiter(controller: SessionController,event: AstrMessageEvent):
|
||||
if event.get_sender_id() != user_id:
|
||||
return
|
||||
|
||||
msg = event.message_str.strip()
|
||||
logger.debug(msg)
|
||||
|
||||
await event.send(
|
||||
MessageChain().message("收到")
|
||||
)
|
||||
|
||||
controller.stop()
|
||||
# 获取宏列表
|
||||
try:
|
||||
await macro_select_waiter(event) # type: ignore
|
||||
return # ✅ 防止空 MessageChain
|
||||
data = await self.jx3fun.hong1(kungfu)
|
||||
if data["code"] == 200:
|
||||
yield event.plain_result(data["msg"])
|
||||
else:
|
||||
yield event.plain_result(f"未搜索到与【{kungfu}】相关的宏")
|
||||
return
|
||||
except Exception as e:
|
||||
logger.error(f"功能函数执行错误: {e}")
|
||||
yield event.plain_result("猪脑过载,请稍后再试")
|
||||
|
||||
# 获取用户ID
|
||||
user_id = event.get_sender_id()
|
||||
# 等等用户回复
|
||||
@session_waiter(timeout=15)
|
||||
async def macro_select_waiter(controller: SessionController,new_event: AstrMessageEvent):
|
||||
if new_event.get_sender_id() != user_id:
|
||||
return
|
||||
|
||||
msg = new_event.get_message_str().strip()
|
||||
|
||||
if not msg.isdigit():
|
||||
await new_event.send(
|
||||
MessageChain().message("输入异常,结束会话")
|
||||
)
|
||||
controller.stop()
|
||||
return
|
||||
|
||||
num = int(msg)
|
||||
if num < 1 or num > data["data"]["num"]:
|
||||
await new_event.send(
|
||||
MessageChain().message("无效序号,结束会话")
|
||||
)
|
||||
controller.stop()
|
||||
return
|
||||
|
||||
try:
|
||||
data1 = await self.jx3fun.hong2(data["data"]["pid"][num])
|
||||
if data1["code"] != 200:
|
||||
await new_event.send(
|
||||
MessageChain().message("获取详细宏数据失败")
|
||||
)
|
||||
controller.stop()
|
||||
return
|
||||
|
||||
url = await self.html_render(data1["temp"], {}, options={})
|
||||
msg_text = data1["data"]
|
||||
|
||||
chain = MessageChain()
|
||||
chain.url_image(url)
|
||||
chain.message(msg_text)
|
||||
await new_event.send(chain)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"功能函数执行错误: {e}")
|
||||
await new_event.send(
|
||||
MessageChain().message("猪脑过载,请稍后再试")
|
||||
)
|
||||
|
||||
controller.stop()
|
||||
|
||||
try:
|
||||
await macro_select_waiter(event)
|
||||
except TimeoutError:
|
||||
yield event.plain_result("选择宏超时,已取消")
|
||||
return
|
||||
except Exception:
|
||||
logger.error("宏选择发生异常", exc_info=True)
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
async def jx3_jinjia(self, event: AstrMessageEvent,server: str = "", limit:str = "15"):
|
||||
|
||||
@@ -1235,4 +1235,73 @@ class JX3Service:
|
||||
|
||||
return_data["temp"] = content
|
||||
return_data["code"] = 200
|
||||
return return_data
|
||||
|
||||
|
||||
async def hong1(self, kungfu: str) -> Dict[str, Any]:
|
||||
"""宏 心法"""
|
||||
return_data = self._init_return_data()
|
||||
|
||||
# 1. 构造请求参数
|
||||
params = {"kungfu": kungfu}
|
||||
|
||||
# 2. 调用基础请求
|
||||
data: Optional[Dict[str, Any]] = await self._base_request(
|
||||
"jx3box_hong", "GET", params=params, out_key=""
|
||||
)
|
||||
logger.debug(data)
|
||||
if not data:
|
||||
return_data["msg"] = "未找到该心法一键宏"
|
||||
return return_data
|
||||
|
||||
# 提取ID
|
||||
pid_list = [0]
|
||||
msg = ""
|
||||
n = 1
|
||||
try:
|
||||
for m in data:
|
||||
msg += f"{n}、{m['author']}\t{m['item_version']}\n"
|
||||
pid_list.append(m["pid"])
|
||||
n += 1
|
||||
|
||||
return_data["msg"] = msg
|
||||
return_data["data"]["pid"] = pid_list
|
||||
return_data["data"]["num"] = n
|
||||
return_data["code"] = 200
|
||||
except Exception as e:
|
||||
logger.exception("处理返回数据失败")
|
||||
return_data["msg"] = "处理返回数据失败"
|
||||
|
||||
return return_data
|
||||
|
||||
|
||||
async def hong2(self, pid: str) -> Dict[str, Any]:
|
||||
"""宏 心法"""
|
||||
return_data = self._init_return_data()
|
||||
|
||||
# 发起请求
|
||||
url = f"https://cms.jx3box.com/api/cms/post/{pid}"
|
||||
logger.debug(f"获取宏接口地址:{url}")
|
||||
data = await self._api.get(url, out_key="data")
|
||||
# 验证数据
|
||||
if not data:
|
||||
return_data["msg"] = "获取宏数据异常"
|
||||
return return_data
|
||||
|
||||
# 4. 处理数据
|
||||
try:
|
||||
return_data["temp"] = data["post_content"]
|
||||
msg = ""
|
||||
for m in data["post_meta"]["data"]:
|
||||
msg += f"宏名称:{m['name']}\n"
|
||||
msg += f"使用说明:{m['desc']}\n"
|
||||
msg += f"宏脚本:\n{m['macro']}\n\n"
|
||||
|
||||
return_data["data"] = msg
|
||||
return_data["code"] = 200
|
||||
except Exception as e:
|
||||
logger.exception("处理返回数据失败")
|
||||
return_data["msg"] = "处理返回数据失败"
|
||||
|
||||
|
||||
return return_data
|
||||
Reference in New Issue
Block a user