A CLI tool to query local WeChat data with 11 commands: sessions, history, search, contacts, members, stats, export, favorites, unread, new-messages, and init. Features: - Self-contained init with key extraction (no external deps) - On-the-fly SQLCipher decryption with caching - JSON output by default for LLM/AI tool integration - Message type filtering and chat statistics - Markdown/txt export for conversations - Cross-platform: macOS, Windows, Linux
53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
"""members 命令 — 查询群聊成员列表"""
|
|
|
|
import click
|
|
|
|
from ..core.contacts import get_contact_names, resolve_username, get_group_members
|
|
from ..output.formatter import output
|
|
|
|
|
|
@click.command("members")
|
|
@click.argument("group_name")
|
|
@click.option("--format", "fmt", default="json", type=click.Choice(["json", "text"]), help="输出格式")
|
|
@click.pass_context
|
|
def members(ctx, group_name, fmt):
|
|
"""查询群聊成员列表
|
|
|
|
\b
|
|
示例:
|
|
wechat-cli members "AI交流群"
|
|
wechat-cli members "群名" --format text
|
|
"""
|
|
app = ctx.obj
|
|
|
|
username = resolve_username(group_name, app.cache, app.decrypted_dir)
|
|
if not username:
|
|
click.echo(f"找不到: {group_name}", err=True)
|
|
ctx.exit(1)
|
|
|
|
if '@chatroom' not in username:
|
|
click.echo(f"{group_name} 不是一个群聊", err=True)
|
|
ctx.exit(1)
|
|
|
|
names = get_contact_names(app.cache, app.decrypted_dir)
|
|
display_name = names.get(username, username)
|
|
|
|
result = get_group_members(username, app.cache, app.decrypted_dir)
|
|
|
|
if fmt == 'json':
|
|
output({
|
|
'group': display_name,
|
|
'username': username,
|
|
'member_count': len(result['members']),
|
|
'owner': result['owner'],
|
|
'members': result['members'],
|
|
}, 'json')
|
|
else:
|
|
lines = [f"{m['display_name']} ({m['username']})"]
|
|
if m['remark']:
|
|
lines[-1] += f" 备注: {m['remark']}"
|
|
header = f"{display_name} 的群成员(共 {len(result['members'])} 人)"
|
|
if result['owner']:
|
|
header += f",群主: {result['owner']}"
|
|
output(header + ":\n\n" + "\n".join(lines), 'text')
|