Reddit的一个机器人框架,用于管理帖子、维基页面、小部件、菜单等。
项目描述
子管理器
子管理器是一个Reddit的机器人框架,用于在一个或多个子版块上自动化各种任务,无需编写任何代码即可进行配置和运行。它的初始应用是自动生成、创建、固定和更新帖子,以及相关任务。此外,它还可以用于在维基页面、小部件和帖子之间自动同步和重新格式化内容,以及标记同一内容的相应部分(包括子版块的侧边栏和其他内容)。它包括对自动安装用于在现代Linux发行版上实时运行的Systemd服务单元的支持,这在r/SpaceX子版块的生产中被使用,并且也可以通过您选择的任何其他方式在您的系统上运行。
法律声明:为了避免任何疑问,子管理器以及r/SpaceX的GitHub组织和子版块是非官方的粉丝创作,与Reddit或SpaceX无任何关联,这些是各自公司注册的商标。
安装
注意:在某些Linux发行版中,您可能需要在下面的命令中将python3
替换为python
(如果目前还没有将python
映射到python3
)。
创建并激活新的虚拟环境
虽然可以在系统Python中安装子管理器,但我们强烈建议您创建并激活一个虚拟环境,以避免与其他系统上的包发生冲突或引起其他问题。使用标准工具venv
,您可以创建如下环境:
python -m venv your-env-name
您可以使用以下命令在Linux和macOS上激活它:
source your-env-name/bin/activate
或者在Windows(cmd)上:
.\your-env-name\Scripts\activate.bat
当然,您可以使用任何您选择的任何环境管理工具(conda、virtualenvwrapper、pyenv等);这些步骤只是一个例子。
下载并安装
要从Python包索引(PyPI)下载并安装该软件包,只需激活您的环境并运行:
python -m pip install submanager
或者,如果您想使用我们精确的固定依赖项,您可以clone
这个仓库并从requirements.txt
文件安装。
git clone https://github.com/r-spacex/submanager.git
cd submanager
python -m pip install -r requirements.txt
python -m pip install .
使用
要使用子管理器,您需要激活您之前创建的适当环境,然后执行其主入口点。例如,在bash下的venv:
source your-env-name/bin/activate
submanager <command>
要查看可用的各种命令和选项,请传递--help
标志。
贡献
有关如何贡献到子管理器的信息,包括报告问题、设置开发环境以及贡献代码,请参阅贡献指南。
配置
首先,您可能想要生成主子管理器用户配置文件,以便告诉它您想要它做什么。为此,只需运行submanager generate-config
即可在默认路径生成它,并输出一个带有一些起始示例的库存配置文件(以人类可读的TOML格式)。以人类友好的TOML格式存储用户配置的静态配置文件位于submanager
子目录中操作系统适用的用户配置目录,以机器友好的JSON格式存储持续内部状态的动态配置文件位于submanager
子目录中操作系统适用的用户状态目录。要查看您系统上这些文件的完整路径和状态,只需运行submanager get-config-info
。您可以使用相应的--config-path
和--dynamic-config-path
选项指定一个或两个替代配置文件,允许您在同一台机器上同时运行多个实例的机器人(例如,避免将所有内容都挤进一个大配置文件,或使用多个核心)。
为了提高健壮性并强制执行安全的维护实践,现在必须停止并重新启动子管理器以读取更新的配置。可以通过相应的enabled
选项启用和禁用单个模块,如sync_manager
和thread_manager
,并且可以按照以下说明进一步配置。要执行各种检查,以确保您的配置有效并且将导致成功运行,而无需实际执行任何改变状态的红迪动作,请运行submanager validate-config
;如果发生错误,信息输出将解释问题以及通常如何修复它。
配置凭证
从Sub Manager v0.5.0版本开始,可以使用特定模块(sync_manager
,thread_manager
),特定任务(同步项目、线程)以及甚至特定源和目标来指定用于给定操作的红迪(Reddit)账号,还可以全局指定。您需要配置并注册用于红迪应用程序访问的账号,并使用红迪API进行注册。我们建议您在praw.ini
中配置您的凭证,并通过PRAW的site_name
参数在相应账号的config
子表中引用它们,这可以在您意外或故意将config.toml
存储在公共位置时避免任何秘密泄露。但是,如果您愿意,praw.Reddit
可以接受的各个参数(例如username
,password
,client id
,client secret
,refresh token
等)也可以作为accounts
表下指定账号的config
子表下的子键包含。Sub Manager v0.5.0支持了红迪在2021年初宣布的新令牌管理器刷新令牌处理,而v0.6.0版本则因红迪撤销该更改而取消了对PRAW的支持。尽管这一变化发生在Sub Manager(v0.6.0)的第一个公开发布之前,但Sub Manager仍然会为用户处理这个问题。
发布间隔
如果已为配置的线程项启用了发布新线程的功能,则可以在周期(例如每月的第一天)过后的某个时间点,或者在前一个线程发布后的每N个周期内发布。
new_thread_interval
指定为字符串,可以是"UNIT"
形式(例如"daily"
,"month"
等)以触发第一种行为,也可以是"N UNIT"
形式(例如"10 weeks"
,"1 year"
等)以调用第二种行为,其中N
是一个正整数,UNIT
是一个支持的周期单位。两者都支持的周期单位包括年、月、日、小时、分钟和秒;目前后者支持周,但前者不支持(因为没有一个明确无误的、与地区无关的周起始点,而且它们不能均匀地分为月或年)。对于两种形式,单位可以带有或没有s
或ly
作为后缀。
目前实现中存在一个小的限制:将其设置为按需创建新线程而不是按计划(或根本不创建)并不完全明显。但是有一个相对简单的解决方案——只需将new_thread_interval
设置为false
,然后在您想要创建新线程时,将其设置为例如1 day
,等待repeat_interval_s
秒以创建新线程(或者如果您不耐烦,可以手动重启),然后将它设置回false
。
我们很快将添加一个适当的功能,可能是一个新的CLI命令,例如submanager create-thread <thread_name>
,以编程方式告诉正在运行的Sub Manager实例按需创建新帖子。
同步部分
在source
和targets
中指定的文本pattern
会在伪Markdown“注释”中搜索,即不显示在渲染文本中的空链接,如下所示
[](#/ <PATTERN><PATTERN_START>)
Example section content
[](#/ <PATTERN><PATTERN_END>)
这允许轻松地在源和目标之间同步特定部分。
如果未指定任何变量(例如 pattern
)的 target
,则其值将递归地从同步对中的相应 defaults
表继承,然后是同步配置部分,包括每个的 context
子表以及配置中的 default_context
。相反,任何特定目标的 replace_patterns
都会在所有目标的 source
中指定的那些之后(以及额外地)应用;注意 source
部分除非指定为 target
,否则实际上不会被修改。
作为服务运行
要安装一个将自动运行 Sub Manager 的 Systemd 用户服务,激活您的 Sub Manager 环境,然后只需运行 submanager install-service
命令。默认情况下,这将安装一个名为 submanager.service
的用户级服务,它将以主要配置运行 Sub Manager。如果您想安装具有不同配置的其他服务,请像往常一样使用 --config-path
指定配置文件路径,并且(如果您不想覆盖默认服务,以便可以同时运行多个),指定一个自定义 suffix
;生成的服务将被命名为 submanager-<suffix>.service
。
安装的服务可以通过典型方式启用和启动,
systemctl --user daemon-reload
systemctl --user enable submanager
systemctl --user start submanager
您可以使用常规方式分别检查其状态和日志,
systemctl --user status submanager
journalctl --user -xe -u submanager
请注意,当作为 Systemd 用户实例运行时,有一些需要考虑的事项,最重要的是使其在启动时自动启动,而不是在登录时启动,并且在用户注销后(例如在服务器、VPS 或其他无人值守的机器上)持久存在。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
submanager-0.6.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b1527713d7b214040b8afb66621ac111dc05c0467de1a1c695d5d6d388ad6b16 |
|
MD5 | 92deb23fab0d8a51070471d4aee8854b |
|
BLAKE2b-256 | 121d6b601d5a6d4cbadeed0fb34f0610aedd2362a9663c8db69297937a75d112 |
submanager-0.6.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 178fd4920cd3cd3b53670cb9b4c7c713cde6b491a6d4dec247364653c27b1c4b |
|
MD5 | bb02eab9a8b7d99a6926d0b972ae74ed |
|
BLAKE2b-256 | 07c65863429f9b068428c803b99b1279ba073c7d1d915372ed8d3f86a5b29fa6 |