#bot #title #irc #config-file

bin+lib url-bot-rs

Rust 编写的最小化 IRC URL 机器人

11 个版本

0.4.3 2022年1月27日
0.4.2 2022年1月27日
0.4.0-rc.22021年12月15日
0.3.2 2021年12月14日
0.2.3 2020年1月13日

#888网络编程

每月 36 次下载

ISC 许可证

185KB
5K SLoC

url-bot-rs

build test clippy macOS windows coveralls codecov crates.io

用于从 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\\AppData\Roaming\url-bot-rs\config\config.toml

软件包

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可以使用cargorustup进行静态构建。例如

  • 安装依赖项

    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

#url-bot-rs中,存在MoznetFreenodeOFTC上的IRC频道。

依赖项

~55–75MB
~1M SLoC