#中继 #协议 #消息 #命令 #weechat #接口 #wee-chat

bin+lib weechat-relay-rs

用于与 WeeChat 中继协议交互的库

1 个不稳定版本

0.1.0 2022年11月1日

#363压缩

MIT/Apache

125KB
3K SLoC

WeeChat 中继协议的 Rust 实现

weechat-relay-rs 是一个纯 Rust 库,用于与 WeeChat 中继进行交互,包括发送命令和接收消息。该仓库还托管 weechat-relay-cli,这是一个用于测试、调试和脚本化的最小终端应用程序。所有代码都是安全的 Rust,该库只依赖于标准库和 nom

什么是 WeeChat 中继协议?

WeeChat,一个可扩展的聊天客户端,可以作为其他客户端连接的“中继”。这使用户可以选择自己的桌面、浏览器、移动设备等界面。要使用此功能,客户端必须使用 WeeChat 的自定义 中继协议

为什么需要 WeeChat 中继协议的库?

因为这个协议完全自定义,不使用任何通用的表示方法(例如 XML、JSON、protobufs 等),客户端不能依赖于流行的、已建立的库来解析或表示 WeeChat 中继命令和消息。该协议并未被编写成易于抽象的,在许多方面只是暴露了中继的底层 C 表示。这意味着即使是简单的交互也可能很繁琐,并且可能在意想不到的方式中出现问题。一个(希望是)正确的库应该使启动和运行变得更加容易。

为什么是 Rust 库?

该协议大量使用复杂结构,具有许多类型和不同的约束。除了内存安全的明显优势之外,编译时类型检查使 Rust 成为消费中继协议的语言,防止了在运行时可能发生的罕见边缘情况的错误。

该库的状态如何?

库在“完整”的意义上是指它应该能够处理最新WeeChat中所有可能的命令和消息(除压缩消息外),但在API尚未稳定的情况下,它仍然很不完整。目前它发布的内容足以获取完全工作的代码,但为了快速实现功能,其中仍然保留了一些粗糙的边缘。请随意使用它,但如果你这样做,请理解未来的更新可能会破坏你的代码。

CLI工具是如何工作的?

CLI工具不是为了作为完整的WeeChat客户端而设计的,而是为了与库和WeeChat进行交互。你也可以使用它来进行一些基本的shell脚本编写,这些脚本与WeeChat中继进行接口。它接受输入,可以是提示符、提供的文件或管道,以原始形式(在发送前进行本地解析以确保基本正确性)接收WeeChat中继命令,并以大多数人可读的格式打印任何响应消息,每行跟一个消息ID,后跟一个消息对象。

CLI不支持压缩,但除此之外,它可以做WeeChat客户端能做的几乎所有事情。除了正常的WeeChat中继命令外,还有一些命令用于与应用程序交互,而不是与中继交互,目前以下划线(_)开头。

  • _get [n]:从中继获取n条消息。大多数命令期望0条或1条消息作为响应,CLI将等待相应数量的消息,但如果你要使用sync命令,消息将异步开始接收,所以你需要使用_get来查看所有消息。如果你想使用此功能,你可能需要设置--timeout选项,否则如果你请求的消息少于可用消息,你将需要等待一段时间才能进行任何操作。
  • _sleep [n]:在发送下一个命令之前暂停n秒。当从文件中运行命令时,这可能很有用。
  • _quit:退出客户端。如果在从文件中运行命令,应用程序也会在到达文件末尾时正常退出。

使用-h运行可执行文件,以查看所有调用选项。

一个示例会话:cargo run --features cli -- --host "127.0.0.1:9001" --init "my weechat password"

> (before) info version
(before)
inf: ("version": "3.6")
> input core.weechat /upgrade
> (after) info version
(after)
inf: ("version": "3.7.1")
> _quit

使用--script选项或管道,你可以使用包管理器的钩子来自动升级WeeChat,设置一个cron任务来自动更新频道主题,或者使用shell执行任何你想到的事情,所有这些操作都从你的WeeChat实例中运行(无需单独的机器人账户进行管理)。

许可证

许可方式如下

任选其一。

贡献

除非您明确声明,否则您根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,将双许可如上,没有任何附加条款或条件。

依赖项

~0.9–1.5MB
~25K SLoC