This commit is contained in:
qsc
2026-09-05 18:29:50 +08:00
parent bc4a38f589
commit 21033c8184
12 changed files with 146 additions and 58 deletions
+30 -14
View File
@@ -25,7 +25,7 @@ PLUGIN_NAME = "astrbot_plugin_jx3"
@register("astrbot_plugin_jx3",
"fxdyz",
"聚合剑网三游戏数据,提供查询、图片渲染、本地避雷和实时事件推送。",
"3.4.3",
"3.4.4",
"https://github.com/qsc20001102/astrbot_plugin_jx3"
)
class Jx3ApiPlugin(Star):
@@ -407,14 +407,6 @@ class Jx3ApiPlugin(Star):
has_server_arg = server_index < len(prepared)
if bound_server:
required_count = sum(
parameter.default is inspect.Parameter.empty
for parameter in params
)
has_required_parameter_after_server = any(
parameter.default is inspect.Parameter.empty
for parameter in params[server_index + 1:]
)
explicit_server = (
has_server_arg
and (
@@ -422,11 +414,6 @@ class Jx3ApiPlugin(Star):
prepared[server_index]
)
or self.server_binding.is_known_server(prepared[server_index])
or len(prepared) >= len(params)
or (
has_required_parameter_after_server
and len(prepared) >= required_count
)
)
)
if explicit_server:
@@ -442,6 +429,34 @@ class Jx3ApiPlugin(Star):
return prepared
def _prepare_kungfu_args(self, handler, args: list[str]) -> list[str]:
"""Resolve the kungfu parameter through the global alias catalog.
Args:
handler: Command handler whose signature defines argument positions.
args: Positional command arguments after server preparation.
Returns:
Arguments with a recognized kungfu alias replaced by its canonical name.
"""
params = [
parameter
for parameter in inspect.signature(handler).parameters.values()
if parameter.name not in {"self", "event"}
]
kungfu_index = next(
(index for index, parameter in enumerate(params) if parameter.name == "kungfu"),
None,
)
if kungfu_index is None or kungfu_index >= len(args):
return args
prepared = list(args)
prepared[kungfu_index] = self.kungfu_alias.resolve_kungfu(
prepared[kungfu_index]
)
return prepared
async def _call_with_auto_args(self, handler, event: AstrMessageEvent, args: list[str]):
"""指令执行函数"""
@@ -511,6 +526,7 @@ class Jx3ApiPlugin(Star):
try:
args = await self._prepare_server_args(handler, event, args)
args = self._prepare_kungfu_args(handler, args)
ret = await self._call_with_auto_args(handler, event, args)
if ret is not None:
yield ret