一文教你本地快速搭建Wechaty-Java

1,721 阅读3分钟

背景

wechaty是一款非常牛逼的构建机器人的开源SDK,其支持目前市面上很多的即时通信软件,比如微信(Wechat),并且其支持多种语言的Client,这样方便不同语言选手来构建自己的机器人。

大家一定要先把文档读一遍,了解一些基础概念,比如Puppet,PadLocal等等

Wechaty对于非TS(Typescript) client的解决方案为通过一个中间server层,将wechaty的底层TS接口通过GRPC暴露出来,然后不同语言实现各自的Client与wechaty的GrpcServer进行通信交互,用于实现不同的功能。

下图是取自官方文档的一张示意图 image.png

但是这时候就会有一个问题,我没钱去买云虚拟机呀 (灬ꈍ ꈍ灬)

准备开始构建本地Wechaty-Server

wechaty官方文档是基于云上docker的直接部署,但是我实际在测试的时候,发现

wechaty/wechaty:latest
DIGEST:sha256:96001b5bdd0e05fd60011c60102cf670538be55dd87e40de976e33ba8cd285f7

这个版本的与目前(2022.5.14)JavaClient是不兼容的,部署之后,WechatyServer会有如下报错:

image.png 因为我是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教程进行设置

然后展示成这样就代表启动成功了

image.png

准备开始构建Wechaty-Java-Client

  1. 先下载代码
git clone https://github.com/wechaty/java-wechaty
或者
git clone https://github.com/wechaty/java-wechaty-getting-started
  1. 找到examples目录中的Main.class,即如下图所示:

image.png 传入构建WechatyServer时的WECHATY_TOKEN,和hostPort(本地为127.0.0.1:8788),然后执行main方法,Console中就会展示对应的二维码, 扫描登录即可,但是目前发现首次登录wechatyServer会报错(会导致服务不可用),需要重新启动Server和Client,通过二次的自动登录则没有问题。

初步判断为目前wechaty-java与wechaty-server的协议没有对齐,后续再研究下两者的协议,进行新协议的维护。

题外话

这个东西真是牛逼୧(๑•̀◡•́๑)૭