#!/usr/bin/env python3 """ 获取好友列表 - 通过 NapCat (OneBot) HTTP API 用法: python3 qq_get_friends.py # 输出格式化好友列表 python3 qq_get_friends.py --json # 输出 JSON(供 agent 使用) python3 qq_get_friends.py --keyword 张三 # 搜索昵称/备注包含"张三"的好友 """ import json import sys import argparse import requests CQHTTP_URL = "http://YOUR_NAPCAT_HOST:25570" def get_friend_list(): """获取好友列表,返回好友字典列表""" url = f"{CQHTTP_URL}/get_friend_list" resp = requests.post(url, json={}, timeout=10) data = resp.json() if data.get("status") == "ok": return data.get("data", []) raise Exception(f"API 返回异常: {json.dumps(data, ensure_ascii=False)}") def format_friends(friends, keyword=None): """格式化为可读文本""" if keyword: keyword = keyword.lower() filtered = [] for f in friends: uid = str(f.get("user_id", "")) nickname = f.get("nickname", "") remark = f.get("remark", "") if (keyword in uid or keyword in nickname.lower() or keyword in remark.lower()): filtered.append(f) friends = filtered if not friends: return "暂无好友数据" lines = [f"共 {len(friends)} 个好友\n"] for f in friends: uid = f.get("user_id", "?") nickname = f.get("nickname", "?") remark = f.get("remark", "") remark_str = f"(备注:{remark})" if remark else "" lines.append(f"• {nickname} ({uid}){remark_str}") return "\n".join(lines) def main(): parser = argparse.ArgumentParser(description="获取 QQ 好友列表") parser.add_argument("--json", action="store_true", help="输出 JSON 格式") parser.add_argument("--keyword", type=str, help="按昵称/备注关键词筛选") args = parser.parse_args() try: friends = get_friend_list() if args.keyword: kw = args.keyword.lower() friends = [ f for f in friends if kw in str(f.get("user_id", "")) or kw in f.get("nickname", "").lower() or kw in f.get("remark", "").lower() ] if args.json: print(json.dumps(friends, ensure_ascii=False, indent=2)) else: print(format_friends(friends, args.keyword)) except requests.exceptions.ConnectionError: print(f"❌ 连接失败: 无法连接到 NapCat ({CQHTTP_URL})") sys.exit(1) except Exception as e: print(f"❌ 获取好友列表失败: {e}") sys.exit(1) if __name__ == "__main__": main()