11 个版本
0.4.3 | 2022年1月27日 |
---|---|
0.4.2 | 2022年1月27日 |
0.4.0-rc.2 | 2021年12月15日 |
0.3.2 | 2021年12月14日 |
0.2.3 | 2020年1月13日 |
#888 在 网络编程
每月 36 次下载
185KB
5K SLoC
用于从 Rust 中获取 URL 标题的 IRC 机器人。机器人监控它加入的任何 IRC 频道发送给它的所有消息,如果任何消息包含 URL,机器人将获取页面并提取标题,将结果发布在同一频道,为您的 IRC 体验增添一丝魅力。
例如
<user> http://rust-lang.org/
<url-bot-rs> ⤷ The Rust Programming Language
依赖项
目前,SQLite 是必需依赖项。
在 Linux 或 OSX 上,您可以通过以下方式安装 SQLite
平台 | 安装命令 |
---|---|
Debian | apt install libsqlite3-dev |
OSX | brewinstall sqlite3 |
Ubuntu 还需要 TLS 的其他依赖项。这些可以通过以下方式满足
平台 | 安装命令 |
---|---|
Ubuntu | apt install libssl-dev pkg-config |
在 Windows 上,或者如果喜欢,也可以在 Linux 或 OSX 上,可以使用捆绑的 SQLite,其中通过在用 Cargo 构建时指定 sqlite_bundled
功能,静态构建和链接,不依赖外部依赖项,例如。
cargo build --features "sqlite_bundled"
cargo install url-bot-rs --features "sqlite_bundled"
使用捆绑的 SQLite 时,不需要外部依赖项。
快速安装
cargo install url-bot-rs
或者,使用捆绑的 SQLite
cargo install url-bot-rs --features "sqlite_bundled"
要快速开始并使用有效的配置,无需参数运行 url-bot-rs
,并按照以下所示编辑文件。
平台 | 配置路径 |
---|---|
Linux | ~/.config/url-bot-rs/config.toml |
OSX | ~/Library/Preferences/org.url-bot-rs/config.toml |
Windows | C:\Users\ |
软件包
Debian 软件包可在 GitHub 上找到。
构建和安装本地 snap 软件包如下
git clone https://github.com/nuxeh/url-bot-rs.git
sudo snap install snapcraft
sudo snap install url-bot-rs*.snap --dangerous
构建
获取 Rust
https://rust-lang.net.cn/en-US/install.html
构建
git clone https://github.com/nuxeh/url-bot-rs
cd url-bot-rs
cargo build
运行测试
cargo test
配置
需要配置文件来指定 IRC 服务器详细信息、要启用的功能、数据库设置以及机器人的其他一般设置;可以通过 --conf=<path>
命令行选项手动指定此配置文件的路径。
如果未提供,机器人会查找您平台上的默认路径,例如,在Linux上,将使用XDG规范。
首先,将搜索以下目录以查找有效的配置
~/.config/url-bot-rs/
或者,如果设置了$XDG_CONFIG_PATH
$XDG_CONFIG_HOME/url-bot-rs/
如果在此目录中没有找到配置,将在以下位置创建具有默认值的配置
~/.config/url-bot-rs/config.toml
或者,如果设置了$XDG_CONFIG_PATH
$XDG_CONFIG_HOME/url-bot-rs/config.toml
--conf
参数可以多次提供,以便连接到多个服务器/网络。
此外,可以通过提供--conf-dir=<dir>
CLI参数来指定额外的搜索路径,其效果是加载此路径下非递归存在的任何有效配置。此选项也可以多次指定。
当使用--conf-dir
选项搜索配置时,任何network.enable
为false的配置将不会被加载。
配置文件选项
配置包括与机器人将要连接的IRC服务器相关的设置,包括但不限于
- IRC服务器地址
- 连接凭证
- 机器人加入时使用的昵称
- 要加入的频道
[network]
部分提供了配置将要连接的网络的一些元数据,包括
name
(字符串)网络的标识符。enable
(布尔值)是否启用此网络 - 仅在通过--conf-dir
CLI参数在搜索路径中找到配置时使用,如果配置是显式加载的,则忽略。
还可以在[features]
部分配置机器人操作的多个可选功能
mask_highlights
(布尔值)插入不可见字符以击败高亮正则表达式。send_notice
(布尔值)使机器人以通知而不是私人消息响应。report_metadata
(布尔值)如果启用,将报告图像元数据。report_mime
(布尔值)如果启用,如果未找到其他标题或元数据,则报告MIME类型。history
(布尔值)使用数据库启用以前的帖子信息。cross_channel_history
(布尔值)如果启用,只将预帖子信息发布到与原始帖子相同的频道。invite
(布尔值)如果启用,/invite
将使机器人加入频道。autosave
(布尔值)如果启用,/invite
和/kick
将自动写入包含更新频道列表的当前配置。send_errors_to_poster
(布尔值)如果启用,将尝试解析链接时发生的任何错误发送给发布链接的用户,通过私人消息。reply_with_errors
(布尔值)如果启用,总是以错误消息响应。partial_urls
(布尔值)尝试解析没有方案的URL的标题,例如“docs.rs”。nick_response
(布尔值)如果机器人被在消息中ping而没有任何其他操作要执行,则响应一条消息。reconnect
(布尔值)在发生错误后重新连接到服务器。
配置文件中的[parameters]
部分包含了一些可调节的参数
url_limit
(u8)每个消息处理的最大URL数量(默认:10)。status_channels
(列表)要创建、加入并使用任何从URL标题检索产生的错误消息的消息通道。nick_response_str
(字符串)用于昵称响应功能的消息。reconnect_timeout
(u32)在重新连接前等待的时间。ignore_nicks
(列表)昵称,这些昵称的消息将导致不检索标题。例如,要忽略同一频道中其他机器人的消息。
配置文件中的[http]
部分包含用于获取标题的HTTP请求的选项
timeout_s
(u64)任何给定请求的超时时间。max_redirections
(u8)要遵循的最大HTTP重定向数。max_retries
(u8)在收到可能为暂时的HTTP错误响应后(例如,503 Service Unavailable
)重试的最大次数。retry_delay_s
(u64)在重试前等待的秒数。accept_lang
(字符串)在发出请求时发送的HTTP请求头Accept-Lang
(默认:"en")。user_agent
(字符串)在HTTP请求中发送的用户代理字符串。
配置文件中的[database]
部分包含数据库的选项,如下所示
type
(字符串)是要使用的数据库类型,例如sqlite
。path
(字符串)是数据库文件的路径(用于sqlite
)。
如果使用--conf
命令行选项指定的位置不存在配置文件,将创建一个具有默认值的配置文件。
此存储库中提供了一个示例配置文件example.config.toml
。
插件
当前插件系统通过使用多个JSON API来获取更好的标题结果。每个都需要在配置文件中添加额外的配置。
-
Imgur
[plugins.imgur] api_key = "your API key"
-
Youtube
[plugins.youtube] api_key = "your API key"
-
Vimeo
[plugins.vimeo] api_key = "your API key"
在每种情况下,一旦配置中存在有效的API密钥,插件将自动工作。为了调试,可能需要使用具有--plugin
选项的url-bot-get
工具。
数据库
可以指定数据库,用于缓存发布的链接,以便如果再次发布相同的URL,则将原始发布者和发布时间添加到返回的消息中。可以使用配置文件[features]
部分的history
功能启用此功能。
目前支持的数据库类型字符串是
内存
sqlite
数据库类型可以在配置文件[database]
配置部分中指定,作为字段type
。可以给数据库指定一个相应的路径,作为字段path
。
对于SQLite,如果没有指定路径,将使用默认路径,并根据配置文件中[network]
部分指定的网络名称创建数据库。
从源代码安装
Cargo
cargo install url-bot-rs
Debian/Ubuntu (Linux)
git clone https://github.com/nuxeh/url-bot-rs
cd url-bot-rs
cargo install cargo-deb
cargo deb --install
Nix
以下内容应在NixOS上或在其他操作系统上的Nix环境中运行。
git clone https://github.com/nuxeh/url-bot-rs
cd url-bot-rs
nix-shell
cargo build
静态构建
Debian/Ubuntu
url-bot-rs
可以使用cargo
和rustup
进行静态构建。例如
-
安装依赖项
apt install make musl-tools
-
安装
rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env
-
添加Musl目标
rustup update rustup target add x86_64-unknown-linux-musl
-
构建
url-bot-rs
cargo build --release --features "openssl_vendored,sqlite_bundled" --target x86_64-unknown-linux-musl
作为服务运行
可以通过systemd
将机器人自动作为服务运行。在安装Debian软件包的情况下,这会自动设置,或者也可以手动设置。
Debian软件包安装
如果您使用Debian软件包进行安装,则会自动创建一个url-bot-rs
用户。此外,还会安装systemd单元,并在安装后自动启用和启动服务。
应根据下面的“自定义配置”部分进行配置。
在卸载Debian软件包时,根据Debian打包指南,不会删除url-bot-rs
用户或其家目录文件。这有助于保持UID的确定性,并允许在不丢失机器人配置的情况下重新安装或升级。
手动systemd安装
要手动设置systemd,必须复制单元文件,并在系统上创建url-bot-rs
用户。从项目仓库内部
sudo install -m 644 systemd/url-bot-rs.service /etc/systemd/system/
sudo useradd -m --system url-bot-rs --shell /usr/sbin/nologin
sudo systemctl enable --now url-bot-rs.service
应根据下面的“自定义配置”部分进行配置。
自定义配置
启动一次后,将在/home/url-bot-rs/.config/url-bot-rs/config.toml
创建默认配置,应进行编辑,然后重启机器人。
sudo systemctl restart url-bot-rs.service
您还可以在默认搜索路径下放置任何希望运行的配置
/home/url-bot-rs/.config/url-bot-rs/
检查状态
要检查状态或获取日志
systemctl status url-bot-rs.service
sudo journalctl -u url-bot-rs.service
url-bot-rs
附加命令行选项
- 在运行时提供
--help
将打印用法。 - 要打印附加的运行时信息,请添加
-v
或--verbose
。可以通过添加额外的v
来增加详细程度;在更高的详细程度下,可以打印收到的IRC消息、HTTP响应头以及有关URL解析的信息,例如设置的cookie等。
附加CLI工具
该存储库包含附加的二进制工具,有助于测试URL标题检索。
url-bot-get
使用与机器人相同的代码执行标题检索,但通过命令行提供URL,并提供可调整的请求参数,例如用户代理等。它旨在在标题检索因某些原因失败的情况下有用,以协助离线开发。
IRC
依赖项
~55–75MB
~1M SLoC