跳转到主要内容

Reddit的一个机器人框架,用于管理帖子、维基页面、小部件、菜单等。

项目描述

子管理器

PyPI Python version Framework Tests Pytest Pre-Commit Code style wemake Code style Black

License Maintainer PyPI status GitHub version PyPI version PyPI wheel Subreddit subscribers

Tests status Lint status Mega-Linter Semgrep scan CodeQL analysis Checked with MyPy Awesome badges

子管理器是一个Reddit的机器人框架,用于在一个或多个子版块上自动化各种任务,无需编写任何代码即可进行配置和运行。它的初始应用是自动生成、创建、固定和更新帖子,以及相关任务。此外,它还可以用于在维基页面、小部件和帖子之间自动同步和重新格式化内容,以及标记同一内容的相应部分(包括子版块的侧边栏和其他内容)。它包括对自动安装用于在现代Linux发行版上实时运行的Systemd服务单元的支持,这在r/SpaceX子版块的生产中被使用,并且也可以通过您选择的任何其他方式在您的系统上运行。

法律声明:为了避免任何疑问,子管理器以及r/SpaceX的GitHub组织和子版块是非官方的粉丝创作,与RedditSpaceX无任何关联,这些是各自公司注册的商标。

安装

注意:在某些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_managerthread_manager,并且可以按照以下说明进一步配置。要执行各种检查,以确保您的配置有效并且将导致成功运行,而无需实际执行任何改变状态的红迪动作,请运行submanager validate-config;如果发生错误,信息输出将解释问题以及通常如何修复它。

配置凭证

从Sub Manager v0.5.0版本开始,可以使用特定模块(sync_managerthread_manager),特定任务(同步项目、线程)以及甚至特定源和目标来指定用于给定操作的红迪(Reddit)账号,还可以全局指定。您需要配置并注册用于红迪应用程序访问的账号,并使用红迪API进行注册。我们建议您在praw.ini中配置您的凭证,并通过PRAW的site_name参数在相应账号的config子表中引用它们,这可以在您意外或故意将config.toml存储在公共位置时避免任何秘密泄露。但是,如果您愿意,praw.Reddit可以接受的各个参数(例如usernamepasswordclient idclient secretrefresh 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是一个支持的周期单位。两者都支持的周期单位包括年、月、日、小时、分钟和秒;目前后者支持周,但前者不支持(因为没有一个明确无误的、与地区无关的周起始点,而且它们不能均匀地分为月或年)。对于两种形式,单位可以带有或没有sly作为后缀。

目前实现中存在一个小的限制:将其设置为按需创建新线程而不是按计划(或根本不创建)并不完全明显。但是有一个相对简单的解决方案——只需将new_thread_interval设置为false,然后在您想要创建新线程时,将其设置为例如1 day,等待repeat_interval_s秒以创建新线程(或者如果您不耐烦,可以手动重启),然后将它设置回false

我们很快将添加一个适当的功能,可能是一个新的CLI命令,例如submanager create-thread <thread_name>,以编程方式告诉正在运行的Sub Manager实例按需创建新帖子。

同步部分

sourcetargets中指定的文本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 (55.3 kB 查看哈希值

上传时间:

构建分发

submanager-0.6.0-py3-none-any.whl (59.6 kB 查看哈希值

上传时间: Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面