这是一件蛮有趣的事情。我因为做 logstash 的 QQ 群管理员,碰到了一个幸福的烦恼:群里有不少高水平且乐于分享的朋友时常给人解答问题,而且一来一回的能牵扯出来不少让人眼前一亮的实践,但是 QQ 聊天记录不像邮件列表和 IRC 那样可以很方便的长期保存共享给后来人学习查找!这简直是国内参与开源技术最头疼的一件事情了,知识没法复用,偏偏越是需要这些知识的人,越是喜欢通过 QQ 来寻求帮助!前两天偶然想到,其实可以通过机器人潜水进来获取聊天记录,然后发布出来!询问了一下 @比尔盖子V 童鞋,他推荐给我 avbot 项目。#妈蛋这名字怎能不吐槽#
作者非常 nice 的提供好了 RPM 可以直接安装在服务器上。所以安装步骤真的就没啥可讲的了。
不过这个项目本意是做 QQ、IRC 和 XMPP 的互联互通,所以把心思用来了 --map
的实现,作为我们这里只想单单记录 QQ 群聊天记录来说,它不支持指定只获取某个群的记录,所以最好的办法就是新申请一个 QQ 号,只加这一个群……
运行起来以后,会在当前目录下生成一个 avlog.db
库,记录聊天记录,同时生成一个 QQ 群号命名的目录,里面按日期存放当天的聊天记录的 HTML 文件。直接用 nginx 发布出来就好啦!
照搬 avbot 官网 demo 页面做好了 logstash 群聊天记录的查看搜索页,见:http://logstash.chenlinux.com/
下一步可以做的事情是做自动应答。已经测试过可以通过 RPC 接口收发消息。不过昨天碰到的一个怪事情是,没能准确收到 QQ 群号,于是变成了 none,结果发送就一直失败。这个重启进程让他重新获得一次就可以了。
收消息示例:
curl 'http://localhost:6176/message'
{
"protocol": "qq",
"channel": "315428175",
"room":
{
"code": "3614128622",
"groupnumber": "315428175",
"name": "Logstash"
},
"op": "0",
"who":
{
"code": "225519360",
"nick": "田间",
"name": "田间",
"qqnumber": "",
"card": ""
},
"preamble": "qq(田间): ",
"message":
{
"text": "我们这暂时没运维 "
}
}
发消息示例:
curl -XPOST http://localhost:6176/message -d '{"protocol":"qq","channel":"315428175","message":{"text":"Hi, my name is logstashbot, this message came from curl command!"}}'