跳转到主要内容

IRC机器人 - 功能全面,可扩展和可定制

项目描述

https://img.shields.io/pypi/v/pmxbot.svg https://img.shields.io/pypi/pyversions/pmxbot.svg tests Ruff https://readthedocs.org/projects/pmxbot/badge/?version=latest https://img.shields.io/badge/skeleton-2024-informational https://tidelift.com/badges/package/pypi/pmxbot

pmxbot是一个用Python编写的IRC和Slack机器人。最初是为YouGov内部的用途构建的,它已经过净化并放到了世界上。您可以在项目网站上了解更多详细信息。

命令

pmxbot会监听以'!'开头的前缀命令。如果它知道这是一个命令,它会回复,执行动作等。它可以搜索网络,存储引用,跟踪karma,做出决定,几乎可以做任何其他您想要的事情。它将日志、引用和karma存储在sqlite或MongoDB数据库中,还有一个用于审查日志和karma的Web界面。

包含

如果pmxbot检测到它被告知要识别的单词和短语,它将回应您所说的话。例如,提及sql on rails。

要求

pmxbot需要Python 3。它还需要在setup.py中定义的一些Python包。一些可选依赖项可以通过extras安装。

  • mongodb:启用MongoDB持久性(而不是sqlite)。

  • irc:IRC机器人客户端。

  • slack: Slack机器人客户端。

  • viewer: 启用网页查看器应用程序。

测试

pmxbot 包含一个测试套件,它对 Python IRC 服务器进行了一些功能测试,以及相当多的单元测试。安装 tox 并运行 tox 来执行测试。

配置

配置基于非常简单的 YAML 文件。查看源代码树中的 config.yaml 以获取示例。

使用

一旦设置了配置文件,只需调用 pmxbot config.yaml,它就会加入并连接。我们建议在您喜欢的进程管理器下运行 pmxbot,以便在崩溃(或由于计划重启而终止)时自动重启。

自定义功能

Setuptools 入口点插件

pmxbot 提供了一种扩展机制来添加命令,并且即使对于其内置命令也使用这种机制。

要创建一个 setuptools 入口点插件,使用 setuptools 传统方式打包您的模块,并将其与 pmxbot 一起安装。您的包应通过在包的 setup.py 中包含类似以下内容来在 pmxbot_handlers 组中定义入口点:

entry_points = {
    'pmxbot_handlers': [
        'plugin name = pmxbot.mymodule',
    ],
},

启动时,pmxbot 将加载 pmxbot.mymodule插件名称 可以是任何名称,但应该是一个适合识别插件的名称(并且它将在 pmxbot 启动时显示)。

请注意,pmxbot 包是一个命名空间包,您可以使用该命名空间为您的插件命名(例如 pmxbot.nsfw)。

如果您的插件需要任何初始化,请指定一个初始化函数(或类方法)作为入口点。例如

'plugin name = pmxbot.mymodule:initialize_func'

启动时,pmxbot 将不带参数调用 initialize_func

在脚本中,您需要导入您需要使用的装饰器

from pmxbot.core import command, contains, regexp, execdelay, execat`.

然后,使用适当的行装饰每个函数,以便 pmxbot 能够注册它。

一个命令 (!g) 获取 @command 装饰器

@command(aliases=('tt', 'tear', 'cry'))
def tinytear(rest):
  "I cry a tiny tear for you."
  if rest:
    return "/me sheds a single tear for %s" % rest
  else:
    return "/me sits and cries as a single tear slowly trickles down its cheek"

一个响应(当有人说话时)使用 @contains 装饰器

@contains("sqlonrails")
def yay_sor():
  karma.Karma.store.change('sql on rails', 1)
  return "Only 76,417 lines..."

每个处理程序可以请求以下任何参数

  • channel(发生消息的频道)

  • nick(触发命令或行为的昵称)

  • rest(命令之后的任何文本)

一个更复杂的响应(当您想要从消息中提取数据时)使用 @regexp 装饰器

@regexp("jira", r"(?<![a-zA-Z0-9/])(OPS|LIB|SALES|UX|GENERAL|SUPPORT)-\d\d+")
def jira(client, event, channel, nick, match):
    return "https://jira.example.com/browse/%s" % match.group()

有关如何实现基于 setuptools 的插件的示例,请参阅 pmxbot 项目本身中的许多示例之一或一些流行的第三方项目

Web 界面

pmxbot 包含一个 Web 服务器,允许用户查看日志、阅读帮助和检查 karma。您可以使用相同的 YAML 配置文件指定主机、端口、基本路径、徽标、标题等。只需像 pmxbotweb config.yaml 一样运行,它就会启动。像 pmxbot 一样,建议使用进程管理器来在终止后重启进程。

pmxbot 作为 Slack 机器人(本地)

要使用 pmxbot 作为 Slack 机器人,请使用 pmxbot[slack] 安装,并在您的配置中将 slack token 设置为您 Bot User 的令牌。简单,容易。

pmxbot 作为 Slack 机器人(IRC)

由于 Slack 提供了 IRC 接口,因此配置 pmxbot 以在 Slack 中使用很容易。以下是方法

  1. 使用 pmxbot[irc] 安装。

  2. 启用 IRC 网关 <https://slack.zendesk.com/hc/en-us/articles/201727913-Connecting-to-Slack-over-IRC-and-XMPP>.

  3. 为机器人创建一个电子邮件。

  4. 在 Slack 中创建机器人的账户并激活其账户。

  5. 使用新账号登录Slack,并获取该账号的IRC网关密码 <https://my.slack.com/account/gateways>

  6. 按照IRC服务器的配置方式配置pmxbot,但使用以下连接设置:

    消息速率限制:2.5 每秒密码:<网关密码> 服务器地址:<团队名称>.irc.slack.com 服务器端口:6667

    速率限制是必要的,因为如果Slack在10秒内收到超过25条消息,它将踢掉机器人,因此将速率限制为每秒2.5条消息可以避免达到限制。

  7. 考虑将“log_channels”和“other_channels”留空,尤其是在依赖Slack日志的情况下。Slack将自动将pmxbot重新加入它已被 /邀请 的任何频道。

企业版

作为Tidelift订阅的一部分提供。

该项目和数千个其他包的维护者正在与Tidelift合作,提供一项企业订阅,涵盖所有您使用的开源软件。

了解更多.

项目详情


发布历史 发布通知 | RSS订阅

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

pmxbot-1122.17.0.tar.gz (208.0 kB 查看哈希值)

上传时间 源代码

构建分发

pmxbot-1122.17.0-py3-none-any.whl (156.2 kB 查看哈希值)

上传于 Python 3

由以下组织支持