SKILL.md 3.57 KB

WeChat 消息发送与跟踪 Skill

能力概述

在手机端(Pixel 10 Pro Fold,Termux/Debian)直接发送微信消息、实时跟踪收发消息,无需 adb。

环境要求

  1. Root 权限 — 必须已 root(Magisk 30.7+)
  2. LSPosed/Vector 模块 — HermesWeChatSendMsg 已启用,微信在作用域内
  3. 微信主进程运行中

文件位置

server/services/wechat/
├── android-wechat-sender.js    # 消息发送
├── android-wechat-tracker.js   # 消息跟踪
└── wechat-reader.js            # 数据库读取(已有)

发送消息

单条发送(推荐)

const { sendTextMessage, sendTextMessageBroadcast } = require('./android-wechat-sender');

// 方式1:通过 ContentProvider(与 Mac 端 API 一致)
const r1 = await sendTextMessage('filehelper', '你好,来自 hermes');
console.log(r1); // { ok: true, uri: 'content://.../send/0' }

// 方式2:直接广播(更可靠,绕过 Provider 进程)
const r2 = await sendTextMessageBroadcast('wxid_xxxxxx', '测试消息');
console.log(r2); // { ok: true }

批量发送

const { sendBatch } = require('./android-wechat-sender');

const results = await sendBatch([
  { toUser: 'filehelper', content: '消息1' },
  { toUser: 'wxid_abc123', content: '消息2' },
], 2000); // 每条间隔 2 秒

查询发送状态

const { queryStatus } = require('./android-wechat-sender');
const s = await queryStatus();
console.log(s); // { status: 'pending' } | { status: 'true' } | { status: 'false' }

跟踪消息

轮询模式(轻量,推荐)

const { AndroidWechatTracker } = require('./android-wechat-tracker');
const tracker = new AndroidWechatTracker();

tracker.on('message', msg => {
  console.log(`[${msg.type.toUpperCase()}] ${msg.talker}: ${msg.content}`);
});

tracker.on('sendResult', result => {
  console.log('发送结果:', result.success);
});

tracker.startPolling(3000); // 每 3 秒轮询
// tracker.stopPolling();

流式模式(更实时)

const tracker = new AndroidWechatTracker();
tracker.on('message', msg => console.log(msg));
tracker.startStream(); // tail -f 日志
// tracker.stopStream();

一次性读取最近消息

const msgs = await tracker.fetchRecent(20);

消息格式

{
  type: 'send' | 'recv',    // 发送或接收
  talker: string,            // 对方 wxid / 群聊ID
  msgType: number,           // 微信消息类型(1=文本)
  msgId: number,
  content: string,           // 消息内容(截断前 50 字符)
  raw: string,               // 原始日志行
  timestamp: number,         // 解析时间戳
}

故障排查

现象 原因 解决
exit 1: permission denied 未 root 或 su 不可用 检查 Magisk root 状态
content: not found 不在 Android 环境 确保在 Termux 或 Debian 中用 /system/bin/content
发送成功但对方没收到 广播被拦截或微信没在前台 确保微信主进程存活,检查 LSPosed 日志
跟踪不到消息 日志级别不够 在 Vector Manager → 日志 中设置详细级别
am broadcast 提示 Background execution not allowed Android 10+ 后台限制 使用 content insert 方式替代

与 Mac 端区别

| | Mac 端 | 手机端 | |--|--------|--------| | 文件 | wechat-sender.js / wechat-tracker.js | android-wechat-sender.js / android-wechat-tracker.js | | 连接方式 | adb shell | 直接 su -c | | 运行位置 | Mac hermes agent | Pixel Termux/Debian hermes agent | | 依赖 | adb | root + su |