背景
wechaty是一款非常牛逼的构建机器人的开源SDK,其支持目前市面上很多的即时通信软件,比如微信(Wechat),并且其支持多种语言的Client,这样方便不同语言选手来构建自己的机器人。
大家一定要先把文档读一遍,了解一些基础概念,比如Puppet,PadLocal等等
Wechaty对于非TS(Typescript) client的解决方案为通过一个中间server层,将wechaty的底层TS接口通过GRPC暴露出来,然后不同语言实现各自的Client与wechaty的GrpcServer进行通信交互,用于实现不同的功能。
下图是取自官方文档的一张示意图
但是这时候就会有一个问题,我没钱去买云虚拟机呀 (灬ꈍ ꈍ灬)
准备开始构建本地Wechaty-Server
wechaty官方文档是基于云上docker的直接部署,但是我实际在测试的时候,发现
wechaty/wechaty:latest
DIGEST:sha256:96001b5bdd0e05fd60011c60102cf670538be55dd87e40de976e33ba8cd285f7
这个版本的与目前(2022.5.14)JavaClient是不兼容的,部署之后,WechatyServer会有如下报错:
因为我是Java选手,对于TS不熟悉,然后基于解决问题的目的,将wechaty主库代码clone下来
git clone https://github.com/wechaty/wechaty.git
注意,因为wechaty是用ts写的,所以需要先在本地安装nodejs环境
代码下载完之后,需要调整一个依赖包的版本:
根目录下package.json中的 "wechaty-puppet-padlocal": "^1.11.12"
)
这个更新的版本是我从最新版本往后试的一个...
具体为什么之前版本有问题还得研究研究 = =
执行npm install
命令进行包依赖下载(感觉有点像maven install
)
wechaty的入口文件为bin/io-client.ts
执行命令如下:
export WECHATY_TOKEN=自己生成的token(这个后面client要用)
export WECHATY_DOCKER=1
export WECHATY_PUPPET_PADLOCAL_TOKEN=${your token}
export WECHATY_LOG=verbose
// 这个比较重要,因为新版本的wechaty支持了grpc的tls验证,但是目前旧client还不支持,所以需要关闭掉
export WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER=true
export WECHATY_PUPPET=wechaty-puppet-padlocal
export WECHATY_HOSTIE_PORT=8788
node --loader ts-node/esm bin/io-client.ts
如果需要debug,可以参考webstorm的debug ts教程进行设置
然后展示成这样就代表启动成功了
准备开始构建Wechaty-Java-Client
- 先下载代码
git clone https://github.com/wechaty/java-wechaty
或者
git clone https://github.com/wechaty/java-wechaty-getting-started
- 找到examples目录中的
Main.class
,即如下图所示:
传入构建WechatyServer时的WECHATY_TOKEN
,和hostPort(本地为127.0.0.1:8788
),然后执行main方法,Console中就会展示对应的二维码,
扫描登录即可,但是目前发现首次登录wechatyServer会报错(会导致服务不可用),需要重新启动Server和Client,通过二次的自动登录则没有问题。
初步判断为目前wechaty-java与wechaty-server的协议没有对齐,后续再研究下两者的协议,进行新协议的维护。
题外话
这个东西真是牛逼୧(๑•̀◡•́๑)૭