试玩 signal-cli
顾名思义,这是个命令行下的 IM 聊天软件客户端,早年折腾 Linux 发行版的时候,多么希望 QQ 能开放协议,再加上CLI支持,生活该多美妙。可惜了,「珊瑚虫QQ」作者都坐完牢,都出狱十几年了 _
前几天陆续搞定了 Signal-Server 的部署,以及手机版,牛马版的客户端编译运行,并连接到私有化的服务器,现在试试这个命令行版的看看。
下载/编译
git clone https://github.com/AsamK/signal-cli
.\gradlew clean && .\gradlew build && .\gradlew installDist
如果出现以下提示,大概率是未使用 JDK 21 所致:
org.gradle.internal.exceptions.LocationAwareException: Build file 'D:\dev\signal\code\signal-cli\build.gradle.kts' line: 1
Plugin [id: 'org.graalvm.buildtools.native', version: '0.10.6'] was not found in any of the following sources:
如果出现以下错误提示,多数为网络下载错误,留意可能需要配置好网络环境,然后直接重试即可:
> Could not get resource 'https://repo.maven.apache.org/maven2/com/squareup/okio/okio-jvm/3.10.2/okio-jvm-3.10.2.jar'.
> Could not get resource 'https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter/5.12.0/junit-jupiter-5.12.0.pom'.
直接编译完成,使用命令: build\install\signal-cli\bin\signal-cli --help
测试运行:
私服配置修改
接下来修改配置,连接到前几天部署的 私服环境 。有两个地方需要修改:
-
代码 lib/src/main/java/org/asamk/signal/manager/config/LiveConfig.java 这里为主要配置所在,修改点分两方面:
- 服务器域名地址
URL
,CDN_URL
,CDN2_URL
,CDN3_URL
,STORAGE_URL
,SIGNAL_SVR2_URL
- 密钥方面,修改
UNIDENTIFIED_SENDER_TRUST_ROOT
,zkGroupServerPublicParams
,genericServerPublicParams
,backupServerPublicParams
- 服务器域名地址
-
资源 lib/src/main/resources/org/asamk/signal/manager/config/whisper.store 这个文件存储着服务器证书,客户端连接时会主动校验服务器证书,必须修改 否则无法连接 会有下面的提示
Failed to register: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target (PushNetworkException)
首先需要 下载 bks 证书的支持程序 jar 包,下载地址 下载 bcprov-jdk18on-1.80.jar
。完成后,再下载服务器证书,可以考虑直接使用 acme.sh 合成的 fullchain.cer, 或者也可以 chrome 浏览器的证书导出功能。完成后,使用下面的命令转换到 bks 格式:
# 留意,密码要使用 whisper 这部分已经固定到代码里了
keytool -importcert -alias signal -file .\fullchain.cer -keystore .\whisper.store -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath .\bcprov-jdk18on-1.80.jar -storepass whisper -noprompt
>证书已添加到密钥库中
完成后,替换 whisper.store,然后重新编译:
.\gradlew clean && .\gradlew build && .\gradlew installDist
使用测试
这里有文档可供参考,但只有用户注册与发信息,不过其他指令也都在 man 文档里写了 https://github.com/AsamK/signal-cli/wiki/Quickstart ,这里是 man 文档:https://github.com/AsamK/signal-cli/blob/master/man/signal-cli.1.adoc
首先,尝试登录:
build\install\signal-cli\bin\signal-cli -u +8613311111111 register
上面的命令敲完,无任何提示 即正常
验证:
build\install\signal-cli\bin\signal-cli -u +8613311111111 verify 123-456
查找一下好友:
build\install\signal-cli\bin\signal-cli -u +8613311111111 getUserStatus +8613111111111
>Unable to check if users are registered: HTTP error: 401 Unauthorized (NetworkProtocolException)
提示失败,好友查找未实现..._ 先试试用户名查找:
build\install\signal-cli\bin\signal-cli -u +8613311111111 getUserStatus --username s131.01
>s131.01: true
很好,用户名可以正常查找。再试试给模拟器里的账号发个消息:
build\install\signal-cli\bin\signal-cli -u +8613311111111 send -m hello -u s131.01
马上就弹出消息请求了,很快啊,没法闪~
在模拟器上,找到这个会话,点进去接受:
防止别人找不到我们,给自己加一个用户名:
build\install\signal-cli\bin\signal-cli -u +8613311111111 updateAccount -n cli.01
# 为避免自己只配叫「未知」
build\install\signal-cli\bin\signal-cli -u +8613311111111 updateProfile --name cli
在模拟器上回复一下,然后signal-cli这边接收:
build\install\signal-cli\bin\signal-cli -u +8613311111111 receive
表情包在终端上也可以完美展示:
明儿再试试其提供的 JSONRPC 服务,然后写个 MCP Server 试试~ _