完整 AgentSkill:词库外部化 + 全部脚本/Skill 脱敏上传

- 高危词库从 process.py 抽到 config.toml [security] section
- process.py 改为 _get_high_risk_words() 动态加载(配置优先)
- 新增 15 个 QQ 操作脚本(已脱敏:QQ号/IP/Token → 占位符)
- 新增 8 个 SKILL.md(qq-messenger/management/resolver/napcat-extras 等)
- 新增 SKILL.md 入口(完整部署方案文档)
- 保留 SDK 框架(plugin_modules.py, file_store_api.py, package.py 等)
This commit is contained in:
Claw
2026-05-04 16:23:59 +08:00
parent d7d33c39a4
commit e1fbd31c64
35 changed files with 5058 additions and 276 deletions

81
scripts/qq_send_like.py Normal file
View File

@ -0,0 +1,81 @@
#!/usr/bin/env python3
"""
QQ 好友点赞 — 通过 NapCat (OneBot) HTTP API
调用 NapCat 的 /send_like 端点给好友点赞。
用法:
python3 qq_send_like.py <user_id> # 给指定 QQ 号点赞
python3 qq_send_like.py <user_id> <times> # 点赞指定次数(最大20)
示例:
python3 qq_send_like.py YOUR_ADMIN_QQ # 给老板点个赞
python3 qq_send_like.py 12345678 10 # 给好友点10个赞
返回:
JSON: {"status": "ok", "retcode": 0, ...} 或错误信息
"""
import json
import sys
import argparse
import requests
CQHTTP_URL = "http://YOUR_NAP CAT_HOST:25570"
def send_like(user_id: int, times: int = 1) -> dict:
"""
给好友点赞
Args:
user_id: 目标 QQ 号
times: 点赞次数,1-20,默认为1
Returns:
API 响应 JSON
"""
resp = requests.post(
f"{CQHTTP_URL}/send_like",
json={"user_id": user_id, "times": times},
timeout=10
)
return resp.json()
def main():
parser = argparse.ArgumentParser(description="给 QQ 好友点赞")
parser.add_argument("user_id", type=int, help="目标 QQ 号")
parser.add_argument("times", type=int, nargs="?", default=1,
help="点赞次数 (1-20, 默认1)")
args = parser.parse_args()
if args.times < 1 or args.times > 20:
print(json.dumps({
"status": "failed",
"message": f"点赞次数必须在 1-20 之间, 当前: {args.times}"
}))
sys.exit(1)
try:
result = send_like(args.user_id, args.times)
print(json.dumps(result, ensure_ascii=False))
if result.get("status") != "ok":
sys.exit(1)
except requests.exceptions.Timeout:
print(json.dumps({
"status": "failed",
"message": "请求超时,NapCat 可能未运行"
}))
sys.exit(1)
except requests.exceptions.ConnectionError as e:
print(json.dumps({
"status": "failed",
"message": f"无法连接到 NapCat: {e}"
}))
sys.exit(1)
if __name__ == "__main__":
main()