@@ -4,11 +4,11 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "jwebot-official-extensions"
|
||||
version = "1.1.1b1+1016"
|
||||
version = "1.1.2b1+1019"
|
||||
description = "Reviewed local command adapters and broker implementation for JWeBot"
|
||||
requires-python = ">=3.9"
|
||||
dependencies = [
|
||||
"jwebot-sdk==1.1.1b1+1016",
|
||||
"jwebot-sdk==1.1.2b1+1019",
|
||||
]
|
||||
|
||||
[tool.setuptools.packages.find]
|
||||
|
||||
@@ -90,4 +90,4 @@ __all__ = [
|
||||
"render_feature_list",
|
||||
]
|
||||
|
||||
__version__ = "1.1.1b1+1016"
|
||||
__version__ = "1.1.2b1+1019"
|
||||
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
"""Generated reviewed adapter for trivia-quiz."""
|
||||
|
||||
from jwebot_sdk import Event, ExtensionResult, ReplyPlan, SingleGroupContext
|
||||
|
||||
|
||||
PROFILE = 'trivia-quiz'
|
||||
AUTHOR = 'jwebot'
|
||||
DESCRIPTION = '冷门知识问答'
|
||||
HELP_ENTRIES = ('/回答 A;/answer A',)
|
||||
COMMANDS = ('/回答', '/answer')
|
||||
|
||||
|
||||
def _handler(context: SingleGroupContext, command: str):
|
||||
def handle(event: Event, arguments: str) -> ExtensionResult:
|
||||
response = context.services.call(
|
||||
PROFILE,
|
||||
operation="execute",
|
||||
payload={
|
||||
"command": command,
|
||||
"arguments": arguments,
|
||||
"event": event.to_mapping(),
|
||||
},
|
||||
)
|
||||
texts = response.get("texts")
|
||||
if isinstance(texts, list) and texts and all(
|
||||
isinstance(item, str) and item.strip() for item in texts
|
||||
):
|
||||
return ExtensionResult(
|
||||
reply=ReplyPlan.multi_text(texts),
|
||||
metadata={"local_extension": PROFILE, "author": AUTHOR},
|
||||
)
|
||||
text = response.get("text")
|
||||
if not isinstance(text, str) or not text.strip():
|
||||
raise ValueError("local service returned invalid text")
|
||||
return ExtensionResult(
|
||||
reply=ReplyPlan.text(text),
|
||||
metadata={"local_extension": PROFILE, "author": AUTHOR},
|
||||
)
|
||||
|
||||
return handle
|
||||
|
||||
|
||||
def plugin(context: SingleGroupContext) -> None:
|
||||
for command in COMMANDS:
|
||||
context.commands.register(command, _handler(context, command))
|
||||
@@ -63,6 +63,8 @@ LOCAL_COMMAND_ALIASES = {
|
||||
"扫码概率": "scan_boost",
|
||||
"Taffy发话": "taffy_say",
|
||||
"taffysay": "taffy_say",
|
||||
"回答": "trivia_answer",
|
||||
"answer": "trivia_answer",
|
||||
"转账": "transfer",
|
||||
"transfer": "transfer",
|
||||
"贷款": "loan",
|
||||
@@ -228,6 +230,13 @@ LOCAL_EXTENSIONS = (
|
||||
help_entries=("/贷款;/还款",),
|
||||
command_kinds=("loan", "repay"),
|
||||
),
|
||||
LocalExtensionDescriptor(
|
||||
extension_id="trivia-quiz",
|
||||
author=JWEBOT_AUTHOR,
|
||||
description="冷门知识问答",
|
||||
help_entries=("/回答 A;/answer A",),
|
||||
command_kinds=("trivia_answer",),
|
||||
),
|
||||
LocalExtensionDescriptor(
|
||||
extension_id="cs-major-autochess",
|
||||
author=JWEBOT_AUTHOR,
|
||||
|
||||
+18
-2
@@ -222,6 +222,8 @@ class LocalCommandEngine:
|
||||
return self.reply_cleaner(self.deepseek_balance())
|
||||
if kind == "steam_friends":
|
||||
return self.reply_cleaner(self.steam_friends(arguments))
|
||||
if kind == "trivia_answer":
|
||||
return self.reply_cleaner(self.trivia_answer(row, arguments))
|
||||
raise LocalCommandError("unsupported local command")
|
||||
|
||||
@staticmethod
|
||||
@@ -261,10 +263,13 @@ class LocalCommandEngine:
|
||||
for index, entry in enumerate(ranking, start=1)
|
||||
)
|
||||
weight_listing = ";".join(
|
||||
f"{entry['display_name']} {entry['weight']}"
|
||||
f"{entry['display_name']} {entry['weight']}({entry['share']:.1f}%)"
|
||||
for entry in weights
|
||||
)
|
||||
return f"北京时间今日扫码排行:{listing}\n下一小时扫码权重:{weight_listing}"
|
||||
return (
|
||||
f"北京时间今日扫码排行:{listing}\n"
|
||||
f"下一小时扫码权重:{weight_listing}"
|
||||
)
|
||||
|
||||
def repeat_ranking(self, row: dict[str, Any]) -> str:
|
||||
self.ledger.bootstrap_repeat_history()
|
||||
@@ -620,6 +625,17 @@ class LocalCommandEngine:
|
||||
return "Steam 查询当前不可用"
|
||||
return self.steam.render(arguments)
|
||||
|
||||
def trivia_answer(self, row: dict[str, Any], arguments: str) -> str:
|
||||
answer = normalize_text(arguments)
|
||||
if not answer:
|
||||
return "用法:/回答 A、/回答 B、/回答 C 或 /回答 D"
|
||||
return self.ledger.answer_trivia(
|
||||
str(row["group_fingerprint"]),
|
||||
str(row["sender"]),
|
||||
str(row["event_id"]),
|
||||
answer,
|
||||
)
|
||||
|
||||
def profile_for_row(self, row: dict[str, Any]) -> dict[str, Any] | None:
|
||||
person = self.ledger.resolve_person(
|
||||
str(row["group_fingerprint"]),
|
||||
|
||||
@@ -536,7 +536,7 @@ class PlayerGames:
|
||||
"同一时间最多一笔未还贷款。\n"
|
||||
"原石:达成特定成就获得;/原石祈愿 消耗1原石抽20~10000摩拉"
|
||||
"(理论期望3600摩拉)并可能获得扫码概率券;"
|
||||
"/扫码加权 人名 提升TA的整点扫码权重;"
|
||||
"/扫码加权 人名 在24小时内给TA整点扫码+5权重;"
|
||||
"/Taffy发话 内容 或 /Taffy发话 定时 HH:MM 内容。\n"
|
||||
"抽奖:/抽奖 [2~100],5%返5倍、20%返2倍,其余无返还。\n"
|
||||
"多人彩票:/彩票 开始;/彩票 报名 3 4 7 [1~500];"
|
||||
|
||||
Reference in New Issue
Block a user