添加完整的微信插件测试框架,包含: - 微信插件源码(weixin-plugin/) - TypeScript 类型定义(types.ts) - 插件编译脚本(scripts/build-weixin-plugin.sh) - 简化测试脚本(scripts/test-weixin-simple.js) - 完整测试脚本(scripts/test-weixin-plugin.js) - 项目配置和依赖管理(package.json) - 使用说明文档(README.md) 主要功能: - 支持二维码登录认证 - HTTP 长轮询消息接收 - 文本、图片、视频、文件消息收发 - 自动回复测试 - 运行状态统计 Generated with [Claude Code](https://claude.com/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
33 lines
970 B
TypeScript
33 lines
970 B
TypeScript
import type { WeixinMessage } from "../api/types.js";
|
|
import { MessageItemType } from "../api/types.js";
|
|
import type { WeixinInboundMediaOpts } from "./inbound.js";
|
|
|
|
export type ProcessMessageDeps = {
|
|
accountId: string;
|
|
baseUrl: string;
|
|
cdnBaseUrl: string;
|
|
token?: string;
|
|
typingTicket?: string;
|
|
log: (msg: string) => void;
|
|
errLog: (m: string) => void;
|
|
};
|
|
|
|
function extractTextBody(itemList?: import("../api/types.js").MessageItem[]): string {
|
|
if (!itemList?.length) return "";
|
|
for (const item of itemList) {
|
|
if (item.type === MessageItemType.TEXT && item.text_item?.text != null) {
|
|
return String(item.text_item.text);
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
export async function processOneMessage(
|
|
full: WeixinMessage,
|
|
deps: ProcessMessageDeps,
|
|
): Promise<void> {
|
|
const textBody = extractTextBody(full.item_list);
|
|
const fromUserId = full.from_user_id ?? "";
|
|
|
|
deps.log(`[weixin] inbound message from=${fromUserId} bodyLen=${textBody.length}`);
|
|
} |