mkdir700 / wx-ime-sdk
git clone https://github.com/mkdir700/wx-ime-sdk.git
v0.1.0 · 21d ago
微信输入法(WeType)跨设备剪贴板的独立 Rust 客户端
+0
stars, 24h · #38,837
+~5
stars, 7 days · #18,799
+88
stars, 30 days · #8,083
88
★ total · +5% this week
13
forks · 1 open issues
Star history (as recorded here)
LanguageRust
LicenseApache-2.0
Created2026-10-02 (21d ago)
Last push21d ago
Watchers0
OwnerUser
GitHub topics
Links
README excerpt
# wx-ime-sdk 微信输入法(WeType)跨设备剪贴板的独立 Rust 客户端:以全新的设备身份与官方输入法配对, 然后收发文本、图片和文件。 | 路径 | 用途 | |---|---| | `crates/wx-ime-protocol` | 包编解码、控制通道加密、配对码、protobuf 线格式消息 | | `crates/wx-ime-sdk` | 异步客户端:身份、配对、剪贴板、局域网文件传输 | | `cli/` | 基于 SDK 的命令行工具 `wxc` | SDK 不会读写宿主机剪贴板。 ## 开源协议 本项目原创代码采用 Apache License 2.0,允许在遵守协议条款的前提下使用、修改、 分发和商业集成。第三方依赖及其版权声明仍受各自许可证约束;本许可不授予腾讯或其他第三方 的商标、服务访问权限或其专利权。 ## 免责声明 - **非官方项目**:本项目是独立开发的微信输入法(WeType)协议兼容实现,不是腾讯或微信 官方 SDK,未获其认可、赞助或背书。微信、WeChat、WeType 等名称和商标归其权利人所有, 在此仅用于说明兼容对象。 - **兼容性与服务风险**:实现基于协议分析和有限测试,不保证与任何官方版本持续兼容, 也不保证服务可用、数据完整或消息送达。官方协议、服务策略或风控变化可能导致功能失效、 连接中断、账号限制或封禁;请在重要操作前备份数据并确认接收结果。 - **授权与合规**:请仅在本人拥有或已获明确授权的设备、账号和数据上使用,遵守适用法律、 隐私要求及相关服务条款。不得用于未经授权的访问、截取他人数据或干扰服务。 本项目的开源许可不是对第三方服务条款的豁免,也不代表第三方已授权此类访问。 - **敏感信息**:配对身份、私钥、令牌及剪贴板内容可能包含敏感数据。请妥善保护状态目录, 不要将其提交到代码仓库或公开日志;使用本项目与官方服务交互时,数据处理也受相关服务 的实际行为和隐私政策影响。 - **无担保与责任限制**:在适用法律允许的范围内,本软件按“现状”提供,不附带明示或默示 担保;作者和贡献者的责任限制以 LICENSE 第 7、8 条为准。本声明不排除法律 规定不可排除的责任,也不限制 Apache-2.0 已授予的软件许可权利。 ## npm 安装 CLI 发布完成后可以使用(当前仓库配置不代表 npm 已发布): [code] 需要 Node.js 22+,支持 macOS arm64/x64、Linux glibc 2.35+ arm64/x64、Windows x64。 预编译包内置 OpenSSL,不需要 Rust 工具链;保持 npm optional dependencies 启用。 这安装的是 CLI,不是 JavaScript SDK。构建验证与首次发布配置见 发布说明。 ## 构建 需要 Rust 1.92+、`protoc`、带 secp128r1 曲线的 OpenSSL 开发文件和 C 工具链。启用 `vendored-openssl` 特性可改为从源码编译 OpenSSL。 [code] ## `wxc` [code] | 命令 | 行为 | |---|---| | `wxc pair 123456` | 加入官方输入法显示的六位配对码,并保存新身份 | | `wxc devices` | 以 JSON 输出本机和已配对设备(Uin) | | `wxc send 'hello'` | 发送文本 | | `wxc send ./photo.png` | 发送图片(按内容识别 PNG/JPEG,最大 16 MiB) | | `wxc send ./report.pdf` | 通过局域网发送其他普通文件(最大 1 GiB) | | `wxc send -` | 读取标准输入作为文本发送(UTF-8,保留换行) | | `wxc recv` | 拉取一次最新剪贴板内容。文本输出到 stdout,图片保存到 `-o`(默认 `.`);没有新内容时退出码为 0,并在 stderr 提示 | | `wxc recv -f -o .` | 等待官方应用发来的文件邀请,接受后保存到 `-o`,完成后退出 | `send` 的判定规则: - 参数指向已存在的普通文件时,按文件内容判断发送图片还是文件,不看扩展名。超过 16 MiB 的 图片、GIF、WebP 按普通文件发送。 - 否则按文本发送。若参数形如路径(`./x`、`../x`、`/x`、`~/x`)但文件不存在,则报错,避免 把写错的路径当文本发出去。 - 在 Unix 上,若字面路径不存在,会再尝试去掉反斜杠转义(如终端拖入文件得到的 `a\ b.png`)。 - `--text` 强制按文本发送,即使存在同名文件。 - 发送文件需要确定目标:用 `--peer UIN` 指定;若恰好只有一个已配对设备支持文件传输,则自动 选中。`--ip IP` 可覆盖自动探测的局域网地址。 `recv -f` 选项:`-n N` 收到 N 个文件后退出(默认 1);`--wait 秒数` 限制等待邀请的时间 (默认 300,`0` 表示一直等到 Ctrl-C);`--ip IP` 覆盖对外公布的局域网地址。文件先放在状态 目录内的私有暂存区,再移动到 `-o`,不会覆盖已有文件,重名时变成 `name (1).ext`。 输出:默认输出便于阅读的文本;加全局选项 `--json` 时,`pair`、`devices`、`send`、`recv` (图片)和 `recv -f` 改为在 stdout 输出 JSON。`recv` 收到的文本始终原样输出。进度和诊断信息写 stderr;失败时退出码为 1。 ### 局域网地址 文件传输需要告诉对端本机的局域网地址。未指定 `--ip` 时,`wxc` 枚举物理网卡的 IPv4 地址并全部 公布(对端会逐个尝试),自动排除代理/VPN 的虚拟网卡(`utun*`、`tun*`、`docker*` 等)以及 `198.18.0.0/15`(Clash/Surge 的 fake-IP)、`100.64.0.0/10`、链路本地地址。若仍选错,用 `--ip` 手动指定。 ### 状态目录 身份(私钥、设备 Uin)保存在 `--state DIR`,默认依次取 `$WXC_STATE`、 `$XDG_CONFIG_HOME/wxc`、`~/.config/wxc`。同一目录同一时间只运行一个 `wxc`。 设备名(官方应用里显示的名字)在首次创建身份时用 `--name` 指定,例如 `wxc pair 123456 --name 'My Mac'`,不指定时随机生成 `WXC-XXXX`(4 位随机字符)。名字会记在状态目录的 `device-name` 文件里,之后 的命令不必再带 `--name`。身份创建后不能改名:用不同的 `--name` 运行会报错,要改名请用 `wxc pair CODE --reset --name 新名字` 重新创建身份。 ### 重新