跳转到主要内容

一个非常易于使用、简单扩展的Jabber机器人框架。

项目描述

简介

mtj.jibber是一个可以用于简化在所有Jabber(XMPP)服务器上对您友好邻里的房间(多用户聊天或MUCS)提供自动无用闲聊过程的软件包。

闲聊时间到了。

https://travis-ci.org/metatoaster/mtj.jibber.svg?branch=0.4.x https://coveralls.io/repos/metatoaster/mtj.jibber/badge.svg?branch=0.4.x

安装

这很简单。启动一个virtualenv,然后这样做

$ pip install mtj.jibber

这将从Python包索引(pypi)安装此软件包的最新稳定版本。如果您想这样做,请遵循该索引页上的文档

或者,如果您想对这个进行修改和开发,请随意进行分叉并克隆,或者直接从这个分叉克隆。当然,我也假设您已经设置了virtualenv。

$ git clone https://github.com/metatoaster/mtj.jibber.git
$ cd mtj.jibber
$ python setup.py develop

当然,在这种情况下,您应该遵循源代码库根目录中README.rst中列出的文档。

快速入门教程

制作这个的原因是为了允许极大的模块化和非常简单的使用。为了演示这一点,安装这个软件包并生成默认配置文件,如下所示

$ jibber --gen-config server > server.config.json
$ jibber --gen-config client > client.config.json

现在您可以像这样启动机器人

$ jibber server.config.json client.config.json debug
Starting interactive shell. `bot` is bound to the MucBot object.
Try calling bot.connect() to connect to the server specified in config file.
Note: process will NOT terminate if bot.is_alive() is False!
Alternatively call bot_test() to test here locally.
>>>

所以,如果这个软件包安装正确,交互式shell应该会像上面那样启动。现在您可以发出以下命令

>>> bot_test()
Test client ready; call client('Hello bot') to interact.
>>>

提供了一个新的功能,允许您与机器人交互,您只需遵循提示即可

>>> client('Hello bot')
2013-11-01 00:00:51,316 INFO mtj.jibber.testing hi Tester
>>>

测试客户端没有连接到任何服务器,因此所有交互都将仅在INFO级别显示在日志中。这可以用于您的最终集成测试。

当然,您希望机器人做更多的事情,让我们看看客户端配置文件。

客户端配置

packages对象包含机器人将要实例化的“包”列表。键如下

package

类的完整路径(或返回该类实例的任何可调用对象)。

kwargs

传递给该调用的关键字参数。

commands

一个由正则字符串和方法组成的2元组。方法是由调用package(**kwargs)返回的对象提供的可调用属性。正则表达式可以包含一些字符串格式关键字,最重要的是nickname,它是分配给机器人的昵称。命令只会在达到最大命令限制时执行,机器人不会尝试将所说的内容与这里的内容进行匹配。

commentators

与commands类似,但机器人在达到限制的情况下会尝试对所说的事情进行评论。默认值合理,我不会教你如何覆盖它,因为会产生令人捧腹的无限循环。

listeners

所有传递给机器人的消息都将被监听,但不会发送任何输出。

timers

一个将用于在延迟后实例化重复命令的对象列表。这相当高级,这里不做介绍。测试用例可能解释了它是如何工作的。

可以定义commands_max_match以匹配最多该数量的命令,即达到该数量后,命令将不会进一步级联。如果您的触发器重叠较多,这很有用。

现在,您可能想要扩展机器人以执行更多操作。让我们尝试在包列表中添加其他内容(记得您的JSON逗号位置!)

{
    "package": "mtj.jibber.bot.PickOne",
    "kwargs": {"items": [
        "red!", "orange!", "yellow!", "green!", "blue!", "violet!"]},
    "commands": [
        ["^rainbow (color|colour)!$", "play"]
    ]
}

PickOne类有一个play方法,它会以相等的概率选择所有项目中的一个。在这种情况下,一个匹配rainbow color!rainbow colour!的命令,并响应六个指定项目中的一个。演示运行

>>> client('rainbow color!')
2013-11-01 00:01:31,965 INFO mtj.jibber.testing violet!
>>> client('rainbow colour!')
2013-11-01 00:01:33,981 INFO mtj.jibber.testing orange!

还有一个类似的

{
    "package": "mtj.jibber.bot.ChanceGame",
    "kwargs": {"chance_table": [
        [0.125, "%(mucnick)s: BOOM"], [1, "%(mucnick)s: click"]
    ]},
    "commands": [
        ["^%(nickname)s: rr$", "play"]
    ]
}

这个与PickOne类似,但允许指定一个概率,该概率是2元组的第一个元素。投掷是在0和1(包括)之间的随机实数,匹配是通过在该列表中进行级联向下查找来完成的。匹配是通过检查该数字是否小于概率数字来完成的。如果匹配,则返回相应的结果。演示运行

>>> client('bot: rr')
2013-11-01 00:02:11,647 INFO mtj.jibber.testing Tester: click
>>> client('bot: rr')
2013-11-01 00:02:12,714 INFO mtj.jibber.testing Tester: click
>>> client('bot: rr')
2013-11-01 00:02:12,822 INFO mtj.jibber.testing Tester: click
>>> client('bot: rr')
2013-11-01 00:02:13,006 INFO mtj.jibber.testing Tester: BOOM

请注意,您还可以在这里指定字符串格式关键字。最有用的是mucnick,它对应于发送该行的用户。这些基于sleekxmpp使用的msg片段,因此有关所有详细信息,请查阅相关文档(或聪明的断点位置)。

为了完整性,如果您遵循了上述说明,您的配置应该类似于以下命令生成的输出

$ jibber --gen-config client_example

哦,对了,您可以自然地开发自己的模块,以实现您希望机器人执行的操作。请随意使用mtj.jibber.bot中的类作为您的起点,并且作为一个如何使用自定义命令构建包的进一步示例,请查看mtj.jibberext

服务器配置

服务器配置应尽量简单。这样做是为了将连接设置与您可能希望传递给朋友的实际机器人设置分开。以下为密钥:

jid

用于连接到服务器的jid。

password

与jid关联的密码。

host

用于连接到服务器的host。这是可选的,因为可以从jid推导出来,但实际host通常不同,因此通常需要指定。

port

默认为5222。

其余密钥将传递给sleekxmpp客户端实例的connect方法。如果您好奇它们是什么,请参考那里的文档。

实时操作

填写正确的信息(jid/密码/host以及您希望机器人加入的房间)然后您就可以调用bot.connect()!或者您可以用fg替换debug,让它立即连接并丢弃交互式shell。

额外功能

如果您发现自己不断完全重新启动机器人,因为单行代码或设置更改,而且这个过程也很繁琐,那么在调试shell中有一个辅助方法可以只通过一个函数调用重新加载客户端配置文件以及所有模块,包括相关的计时器和触发器。

>>> bot_reinit()
Successfully reinitialized bot configuration and modules.
>>>

请注意:此函数可能存在安全隐患。配置文件或机器人启动后添加的模块中的语法错误将引发异常,加载将被中止,机器人将处于新鲜但部分实例化的状态。这可能会或可能不会导致您加载的代码/模块存在特定问题。

变更日志

0.4 - 2015-09-12

  • 对所有方法完全要求提供bot参数。

  • 支持将处理程序连接到较低级别的事件,使得可以通过配置文件将它们连接到可用的模块/类路径。这在presence模块中实现。

  • 暂时来说,Presence是用于较低级别事件的新的基本Handler

  • 第一个这样的处理程序是当机器人在频道中不再存在时自动重新加入,实现在Muc类中。

  • 另一个是问候者,实现在MucGreeter类中。

  • Command类现在是Handler的子类;现在这是将要检查的类。将来,当可以为提供的可调用函数执行参数签名验证时,可能取消此要求。

  • 引入了LastActivity功能;可以用作!seen触发器,以获取用户最后一次被看到的大致时间。这是一个演示实现。

  • 测试客户端类现在支持正确的调度;clear方法现在按预期工作。

  • 其他一些小的清理和更新测试。

0.3 - 2014-10-08

  • MucChatBot.send_message现在对由包方法生成的格式不正确的消息具有更强的抵抗力,并且现在允许覆盖mbodymhtml参数,这将传递到真正的send_message方法中,如果机器人作者希望完全控制输出。

  • 以与单个文本或dict相同的方式一致地处理由package_methods生成的列表。

  • 不再为Command类的每个实例分配对bot的引用。

0.2 - 2014-02-27

  • 为私有消息命令处理私有聊天消息。

  • 从jibber shell命令生成核心配置文件。

  • 调试模式内动态模块重新加载的辅助方法。

0.1 - 2013-11-14

  • 实现核心功能,包括作为muc客户端连接XMPP服务器,并提供触发处理器和动态模块/对象加载器,以便这些触发器可以执行某些操作。

项目详情


下载文件

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

源代码分发

mtj.jibber-0.4.tar.gz (25.0 kB 查看哈希值)

上传时间 源代码

支持