2012年8月23日星期四

折腾 xmpptalk

Xmpptalk 是百合仙子的一个 XMPP(比如 GTalk)多人聊天机器人。只要加该机器人为好友,就可以和其他加该机器人为好友的人聊天。机器人负责转发消息。

首先,强调这篇文章发表是 2012 年 8 月。在此之后可能会更新,所以当你看到这文章的时候,原来的程序可能已经更新不再使用这种方法了,所以请自己考虑清楚每一步。
一个 VPS 是必不可少的,怎么购买 VPS 不是本文谈论的范畴。
  1. 下载 xmpptalk 的源代码。
    git clone https://github.com/lilydjwg/xmpptalk
  2. 不要先运行 scripts/quickinstall.sh!它会毁了你的系统的!
    使用发行版自带的软件包工具安装下列软件:
    • python3.2
    • python3.2-dev
    • python2.7
    • python2.7-dev
    • mongodb (安装之后请启动服务,ArchLinux 用户貌似要手动创建 /data/db 目录)
    • mercurial (有的发行版里面叫做 hg)
    • prosody (如果你不打算使用公共的 XMPP 服务,而自己开一个 XMPP 服务器)
    • mongokit (很多发行版里面是没有这个包的,而且由于没有更新,不支持 python3,所以需要用 2to3 转换,后面介绍这个包的详细安装)
  3. 安装 mongokit。这一段的版本号全部自己变通,因为你看到文章的时候原程序可能已经更新了。
    wget http://pypi.python.org/packages/source/m/mongokit/mongokit-0.8.tar.gz
    tar xvzf mongokit-0.8.tar.gz
    cd mongokit-0.8
    原程序在安装的时候会自动下载 setuptools,但由于需要的版本 0.6c7-py2.7 已经无法下载,目前的版本是 0.6c11-py2.7,所以我们需要手工下载目前版本,并且修改名字为需要的版本。
    wget -O setuptools-0.6c7-py2.7.egg http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
    sudo python2 setup.py install
    下一步是把 python2 的模块转换为 python3。
    sudo cp -a /usr/local/lib/python2.7/dist-packages/mongokit-0.8-py2.7.egg/mongokit /usr/local/lib/python3.2/dist-packages/
    sudo 2to3 -w /usr/local/lib/python3.2/dist-packages/mongokit
    安装好了再去运行 scripts/quickinstall.sh,用 root 权限。
  4. 配置 config.py,此文件是 Python 语法,请按注释进行配置。
    一定要修改的地方有 jidrootsaltdatabase(数据库名字不要 . 等特殊符号)、settings.password
    如果要配置 Prosody,机器人的 XMPP 地址要写成自己的 VPS 的域名,等一会配置 Prosody 的时候创建你要的机器人账户。
  5. 配置 Prosody
    Prosody 的配置有一点烦人,你还需要在本地电脑上准备好 Pidgin 一类的 xmpp 聊天软件。
    Prosody 的全局配置文件在 /etc/prosody/prosody.cfg.lua
    打开后找到
    allow_registration = false;
    false 修改成 true,在完成新用户注册之后再修改回来。
    下面代码中斜体的 example.com 表示要修改成自己站点的名字。
    sudo cp /etc/prosody/conf.avail/example.com.cfg.lua /etc/prosody/conf.d/example.com.cfg.lua
    打开 /etc/prosody/conf.d/example.com.cfg.lua,删除下面这行:
    enabled = false -- Remove this line to enable this host
    然后修改所有的 example.com 为自己站点的名字。
    然后用 root 执行:
    cd /etc/prosody/certs
    openssl req -new -x509 -nodes -days 99999 -out "example.com.crt" -keyout "example.com.key"
    然后一路回车或者填写一些信息。
    最后重启 Prosody 服务,比较通用的命令是:
    sudo /etc/init.d/prosody restart
    当然如果你的发行版提供开关服务的命令,使用它,比如 ArchLinux(SysVInit)的命令是 sudo rc.d restart prosody
  6. 创建 XMPP 账户
    用你的 XMPP 客户端(比如 Pidgin)创建一个新账号,服务器填写你的 VPS 的地址,勾选“在服务器上创建此新账号”。
  7. 启动 xmpptalk
    在 xmpptalk 的目录里面,第一次需要初始化数据库,输入:
    python3 dbman.py
    然后启动机器人:
    python3 main.py
至此结束。你还可以配置机器人来达到更多的功能,另外建议开启 Prosody 的加密功能,具体配置可以在 /etc/prosody/prosody.cfg.lua 中找到。

Tips: 如果发现重新启动服务器之后 mongodb 迟迟不肯工作,试试看删除 /var/lib/mongodb/mongod.lock,然后重新启动 mongodb 服务即可。

Update 2012-08-31: 今天发布了我自己的 chatlist。依赖项只有一个 SleekXMPP
安装 SleekXMPP 的命令放在下面:

git clone https://github.com/fritzy/SleekXMPP.git
cd SleekXMPP
sudo python3 setup.py install
请记住全程用 Python 3(如果你机器默认的 Python 是 Python 2 的话)。