WebQQ已于2019.01.01关闭,本文

QQ机器人是个好玩的东西,也有很多解决方案,比如最著名的酷Q机器人
,到这个只能在PC上用。安卓上能用的Sq QQ机器人,但是这个要Xposed,虽然基于手机qq注入,功能比较强,但是对我这种连Root都没有的用户,emmmm。所以我就来介绍几个能在Termux上玩的QQ机器人。

qqbot

Writen in Python,基于WebQQ协议

安装

pkg in python python-dev  clang# 安装依赖
pip3 install qqbot # 安装qqbot
pip3 install wcwidth
env LDFLAGS="-L/system/lib/ -lm -lcompiler_rt" pip3 install Pillow --global-option="build_ext" --global-option="--disable-jpeg"
# 安装后续用的依赖

启动

# 安装以后自然要赶快启动看看喽,但是
$ qqbot
.......
pytz.exceptions.UnknownTimeZoneError: 'Can not find any timezone configuration'
# 如何解决呢?
$ vim $PREFIX/lib/python3.6/site-packages/tzlocal/unix.py
# 编辑tzlocal包的unix.py文件,在vim里面输入50gg,跳转到第50行,然后粘贴如下内容

if os.path.exists('/system/bin/getprop'):
 import subprocess 
androidtz=subprocess.check_output(['getprop', 'persist.sys.timezone']).strip().decode() 
return pytz.timezone(androidtz)

# 然后再启动,依然爆炸
$ qqbot
.......
pytz.exceptions.UnknownTimeZoneError: 'Can not find any timezone configuration'

# 又是怎么回事呢?
# 这是因为Termux的默认PATH不包括/system/bin/,加到PATH里面就好了

$ PATH=$PATH:/system/bin/

# 这下终于好了
qqbot -cq
# 以文本方式显示二维码,双指缩小字体使其能完整的显示,截图使用QQ扫码登陆。

qqbot1.png

使用

现在,从屏幕左向右滑动,点击New Session,创建一个新的终端

$ qq help

QQBot 命令:
1) 帮助、停机和重启命令
    qq help|stop|restart

2) 联系人查询命令
    qq list buddy|group|discuss [qq|name|key=val]
    qq list group-member|discuss-member oqq|oname|okey=oval [qq|name|key=val]

3) 联系人更新命令
    qq update buddy|group|discuss
    qq update group-member|discuss-member oqq|oname|okey=oval

4) 消息发送命令
    qq send buddy|group|discuss qq|name|key=val message

5) 群管理命令: 设置/取消管理员 、 设置/删除群名片 、 群成员禁言 以及  踢除群成员
    qq group-set-admin ginfo minfo1,minfo2,...
    qq group-unset-admin ginfo minfo1,minfo2,...
    qq group-set-card ginfo minfo1,minfo2,... card
    qq group-unset-card ginfo minfo1,minfo2,...
    qq group-shut ginfo minfo1,minfo2,... [t]

基本使用方法如上,接下来实际使用看看

$ qq list buddy
好友列表:
+------+-------+----------+----------+--------+--------+------------+----------+
| 类型 | QQ    | 名称     | 网名     | 备注名 | 群名片 | UIN        | 群内角色 |
+------+-------+----------+----------+--------+--------+------------+----------+
| 好友 | #NULL | 高坂桐乃 | 高坂桐乃 |        |        | 1173114394 |          |
+------+-------+----------+----------+--------+--------+------------+----------+

$ qq send buddy 高坂桐乃 你好
向 好友“高坂桐乃” 发消息成功

看看效果
qqbot2.png

插件

可能你要问了,这个机器人就这点功能吗?
很不幸,因为基于WebQQ协议(你能在Github上找到的,基本上都是WebQQ协议),功能确实孱弱了一些,要想扩展,我们可以自己来写插件,我这里提供一个图灵机器人的插件。

pip3 install request
vim ~/.qqbot-tmp/plugins/turling.py

加入以下内容

import qqbot
 from random import randint
 import requests


 # 使用前请先前往 http://www.tuling123.com/register/index.jhtml
 # 申请 API key 谢谢
 # 另外需要 requests 支持
 # 修改成调用图灵官方接口
 url = 'http://www.tuling123.com/openapi/api'
 apikey = ''
# 请在上面填入你自己的API Key
 def onQQMessage(bot, contact, member, content):
     if bot.isMe(contact, member) != True:
         querystring = {
             "key": apikey,
             "info": content,
         }

         response = requests.request("GET", url, params=querystring)

         response_json = response.json()
         bot.SendTo(contact, response_json.get('text'))

我完全没有Py基础,写的不好不要吐槽
然后使用qq plug turling来加载插件,效果如下。
qqbot3.png

这个项目大抵也就如此了,要想实现更多功能,还请自己写插件。

Mojo-Webqq

Written in Perl,可能是最强的WebQQ机器人
看到这里你是不是想吐槽,怎么还是WebQQ,我也很无奈啊,能找到的大都是WebQQ协议的,我倒是看到过PCQQ协议的,但是C#写的,在Termux上有些难以运行。不过,这个Mojo-WebQQ在功能上还是很强的,至少官方提供了不少插件,下面容我细细道来。

安装

pkg in wget make clang perl openssl-dev openssl-tool libcrypt libcrypt-dev
# 安装依赖
cpan -i App::cpanminus
# 安装另一个包管理器cpanm
cpanm Mojo::Webqq
# 安装Mojo-Webqq,可能会出现一些依赖问题,懒得把Termux重装一遍来测试了,如果有问题的话请跟我反馈。
cpanm Webqq::Encryption
# 安装用来密码登陆的库,但是我每次都失败😤

启动

编辑启动脚本vim login.pl

use Mojo::Webqq;
use Digest::MD5 qw(md5_hex);
my $client=Mojo::Webqq->new(
    account     => 123456,      #QQ账号
    pwd         => md5_hex('你的密码'),  #登录密码
    http_debug  =>  0,          #是否打印详细的debug信息
    log_level   =>  "info",     #日志打印级别,debug|info|msg|warn|error|fatal
    login_type  =>  "login",    #登录方式,login 表示账号密码登录
);

$client->load("ShowMsg");
$client->run();

perl login.pl来启动
然后新建一个Session,输入cp $TMPDIR/mojo*.png ~/storage/dcim/,然后在qq里面扫码登陆,不过我这边在qq里面显示不出来这张图,所以我是在系统相册里再截一次图的。

qqbot5.png

不过这个Mojo-Webqq之所以能称之为最强,主要还是在于它的插件,下面我来介绍一下它的插件。

IRCShell

如你所见,Mojo-Webqq是没有前面的那个qqbot的交互使用的方法的,所以如果需要交互使用,可以用Weechat(不是WeChat,微信)。

pkg in weechat
cpan -i Mojo::IRC::Server::Chinese
# 安装依赖

编辑我之前说的启动脚本vim login.pl,在最后的run()之前添加

$client->load("IRCShell",data=>{
    listen=>[ {host=>"0.0.0.0",port=>6667},], #可选,IRC服务器监听的地址+端口,默认0.0.0.0:6667
    load_friend => 0, #可选,是否初始为每个好友生成irc虚拟帐号并加入频道 #我的好友
});

然后正常启动perl login.pl,登陆,接着打开我之前说的weechat

weechat
# 打开weechat,在weechat中输入
/server add qq 127.0.0.1
/connect qq
/join #群组名
# 比如我这里就是/join #Termux社
# 只有第一次需要/server add ,以后直接/connect qq就行
# 然后就可以在Termux里尽情聊天了,更多的关于Weechat的使用,请自行百度

qqbot6.png

SmartReply

智能回复其实就是前文提到的图灵机器人,同样需要你注册一个图灵的账号,这点就不多说了。那么vim login.pl,加入

$client->load("SmartReply",data=>{
    apikey          =>"'', # 填入自己的Api Key
    friend_reply    => 1, #是否针对好友消息智能回复
    group_reply     => 1, #是否针对群消息智能回复
    allow_group     => ["PERL学习交流"],  #可选,允许插件的群,可以是群名称或群号码
    ban_group       => ["私人群",123456], #可选,禁用该插件的群,可以是群名称或群号码
    ban_user        => ["坏蛋",123456], #可选,禁用该插件的用户,可以是用户的显示名称或qq号码
    notice_reply    => ["对不起,请不要这么频繁的艾特我","对不起,您的艾特次数太多"], #可选,提醒时用语
    notice_limit    => 8 ,  #可选,达到该次数提醒对话次数太多,提醒语来自默认或 notice_reply
    warn_limit      => 10,  #可选,达到该次数,会被警告
    ban_limit       => 12,  #可选,达到该次数会被列入黑名单不再进行回复
    ban_time        => 1200,#可选,拉入黑名单时间,默认1200秒
    period          => 600, #可选,限制周期,单位 秒
    is_need_at      => 1,  #默认是1 是否需要艾特才触发回复 仅针对群消息
    keyword         => [qw(小灰 小红 小猪)], #触发智能回复的关键字
});

接下来启动程序perl login.pl,大致与之前的相似,就不截图了。

ProgramCode

这是一个非常有意思的插件,可以在QQ上写代码并显示运行结果。

$client->load("ProgramCode");

然后在QQ里面向机器人发送

code|语言>>>
代码

比如我这里

code|csharp>>>
using System;
namespace Hello
{
    class Program
    {
        public static void Main()
        {
            Console.WriteLine("C#是世界上最好的语言");
        }
    }
}

qqbot4.png

更多用法请参考官方文档

其他版本

还有许多不同语言和协议的qq机器人,这里就不一一详细介绍了,只做个列表。
SmartQQBot:同样是用Python写的,不过乍一看感觉比之前的QQBot项目好用一点。
qqbot :CoffeeScript版本,没试过。

另外再提两个PCQQ协议的项目,不过都是C#的,我在Termux用mono并没有通过编译,还是等我下一篇《为Termux上编译Dotnet Core》出来再看看吧。

QQBot :这个似乎并不怎么靠谱,因为我在电脑上也没能编译过。
PCQQ-Protocol :这个在PC上能够正常使用,但是功能还是比较孱弱,主要还是开发的时间比较短。

结语

这篇我写了很长时间,本以为开学之前就能写完,结果竟然脱了三个星期,高三啊,确实不一样。所以以后更新肯定比较随性,难受。

另外,能看到下面评论区(Disqus插件被墙)的朋友,能给个评论吗?总感觉这个博客就我只有一个人。

在文中多次出现的QQ群是Termux社,不要问我加群问题的答案,谢谢。