新增 openclaw_bridge 插件,实现 QQ ↔ OpenClaw Gateway 桥接: src/process.py: - QQ 消息自动转发 OpenClaw Gateway - 内置安全检测(高危词、管理员白名单、MC指令过滤) - 高危词库外部化到 config.toml [security] section - 群昵称自动解析 - Session 隔离(按群×用户) config/openclawbridge/config.toml: - 插件配置模板(已脱敏:占位符替代个人信息) scripts/qq_*.py (×15): - 消息发送/文件传输/群管理/好友管理 - 信息查询/历史回溯/OCR/点赞 - 全部脱敏(QQ号→YOUR_ADMIN_QQ, IP→YOUR_NAPCAT_HOST等) skills/*/SKILL.md (×8): - AgentSkills 使用指导 - qq-messenger / qq-management / qq-resolver / qq-napcat-extras - browser / file-process / mc-query / nix-helper SKILL.md: - AgentSkill 入口,完整架构说明和部署步骤
82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
#!/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()
|