Mojo-WebQQ:在自己的 VPS 上搭建 QQ 机器人

作为群主,总希望有一个 QQ 机器人帮助自己管理群,实现自动的警告、禁言等操作,这样能省下不少时间。今天就介绍一下这款 Mojo-WebQQ,主要功能就是群管理,同时还能接入图灵机器人的 API,实现自动回复,活跃群气氛。

或者,你单纯的想在 VPS 上挂 QQ,那也是可以的。再或者,在 VPS 上像黑客那样聊天。

Mojo-WebQQ 简介

Mojo-WebQQ 是一个使用 Perl 语言编写的 SmartQQ / WebQQ 客户端框架(非GUI),可以通过插件提供基于 HTTP 协议的 API 接口供其他语言或系统调用。

特色功能

  • 支持 群组踢人、禁言、设置/取消管理员、修改群成员名片、邀请好友入群、群签到
  • 支持 获取好友、群组、群成员的真实QQ号码
  • 支持 新增/失去好友、新增/退出群组、新增/失去群成员 等事件提醒(非实时)
  • 支持 Windows/Linux/Mac 多平台,支持docker镜像,易安装部署,不懂Perl也能用
  • 提供 基于HTTP协议的API接口 ,简洁丰富,方便和其他编程语言集成
  • 一个产品狗的倾情之作,代码由内而外都更加注重“用户体验”,外加主人人品极好,你懂的

安装 Mojo-WebQQ

这里以我自己的配置环境为例,介绍一下安装过程,更详细的请前往参考文献的 Github 项目主页。

安装环境:Ubuntu 16.04 LTS 64bit

1. 安装 Perl

安装之前请先确认下你的系统是否已经安装了 Perl,一般 Ubuntu 都自带了,通过命令:

perl -v

可以查看 Perl 版本号。至少需要 5.10.1 +,推荐 5.14 +。

由于 Ubuntu自带,就不废话了。

2. 安装 cpanm 包管理工具(若已安装可忽略)

方法:

cpan -i App::cpanminus

3. 使用 cpanm 在线安装 Mojo::Webqq 模块

cpanm Mojo::Webqq

如果服务器在国内,可以直接使用国内镜像站点:

cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq

一般没什么问题,至此就安装结束了。有问题请看参考文献的 Github 项目地址。

使用 Mojo-WebQQ

这里我只介绍一下使用这个 QQ 机器人来管理群,包括欢迎新人、禁言、插科打诨等功能。更多用法,还是自己去项目主页看。

首先我们先小试牛刀,看看能不能运行起来。

新建一个 qq.pl 文件:

vim qq.pl

写上如下内容:

#!/usr/bin/env perl
use Mojo::Webqq;
my $client = Mojo::Webqq->new();
$client->load("ShowMsg");
$client->run();

保存(Esc 然后 :wq)。然后运行试试:

perl qq.pl

一般没啥问题,会看到初始化信息。比如(我这个已经是加载了插件的,具体的请继续看):

root@bwh-hk:~# perl qq.pl
[17/11/16 21:22:39] [info] 当前正在使用 Mojo-Webqq v2.1.4
[17/11/16 21:22:39] [info] 客户端加载cookie[ /tmp/mojo_webqq_cookie_default.dat ]
[17/11/16 21:22:39] [info] 执行插件[ Mojo::Webqq::Plugin::GroupManage ]
[17/11/16 21:22:39] [info] 执行插件[ Mojo::Webqq::Plugin::ShowMsg ]
[17/11/16 21:22:39] [info] 执行插件[ Mojo::Webqq::Plugin::StockInfo ]
[17/11/16 21:22:39] [info] 执行插件[ Mojo::Webqq::Plugin::MobileInfo ]
[17/11/16 21:22:39] [info] 执行插件[ Mojo::Webqq::Plugin::Translation ]
[17/11/16 21:22:39] [info] 执行插件[ Mojo::Webqq::Plugin::ZiYue ]
[17/11/16 21:22:39] [info] 执行插件[ Mojo::Webqq::Plugin::SmartReply ]
[17/11/16 21:22:39] [info] 检测到最近登录活动,尝试直接恢复登录…
[17/11/16 21:22:39] [info] 获取数据验证参数…
[17/11/16 21:22:39] [info] 尝试进行登录(2)…
[17/11/16 21:22:40] [info] 帐号(xxxxxx)登录成功
[17/11/16 21:22:40] [info] 更新个人信息…
[17/11/16 21:22:40] [info] 更新好友信息…
[17/11/16 21:22:40] [info] 更新好友扩展信息…
[17/11/16 21:22:43] [info] 更新群列表信息…
[17/11/16 21:22:43] [info] 更新群列表扩展信息…
[17/11/16 21:22:43] [info] 更新讨论组列表信息…
[17/11/16 21:22:43] [info] 开始接收消息…

好了,看到上述信息说明之前的安装没问题。第一次登录需要扫码。二维码在 /tmp 目录下,有个 mojo_webqq_qrcode_default.png 的文件,把那个文件下载下来,用手机扫码即可登录。

接下来开始配置群管理功能。打开刚刚的 qq.pl 文件。加入一些内容,最后大概如下:

#!/usr/bin/env perl
use Mojo::Webqq;
my $client = Mojo::Webqq->new();
$client->load("ShowMsg");
$client->load("GroupManage",data=>{ 
    allow_group => ["老唐交流群"],  # 可选,允许插件的群,可以是群名称或群号码
    ban_group   => ["私人群",123456], # 可选,禁用该插件的群,可以是群名称或群号码
    new_group_member => '欢迎新成员 @%s 入群[鼓掌][鼓掌][鼓掌]', # 新成员入群欢迎语,%s会被替换成群成员名称
    lose_group_member => '很遗憾 @%s 离开了本群[流泪][流泪][流泪]', # 成员离群提醒
    speak_limit => {# 发送消息频率限制
        period          => 10, # 统计周期,单位是秒
        warn_limit      => 8, # 统计周期内达到该次数,发送警告信息
        warn_message    => '@%s 警告, 您发言过于频繁,可能会被禁言或踢出本群', # 警告内容
        shutup_limit    => 10, # 统计周期内达到该次数,成员会被禁言
        shutup_time     => 600, # 禁言时长
        #kick_limit      => 15,   # 统计周期内达到该次数,成员会被踢出本群
    },
    pic_limit => {#发图频率限制
        period          => 600,
        warn_limit      => 6,
        warn_message   => '@%s 警告, 您发图过多,可能会被禁言或踢出本群',
        shutup_limit    => 8,
        kick_limit      => 10,
    },
    keyword_limit => { # 关键词屏蔽,可以加上禁言等选项,配置同上。
        period=> 600,
        keyword=>[qw(fuck 傻逼 你妹 滚)],
        warn_limit=>3,
        shutup_limit=>5,
        #kick_limit=>undef,
    },
});
$client->run();

简单的做个说明。主要是在 $client->run(); 前面加入插件 GroupManage,也就是群管理插件。注意 $client->run(); 必须放在最后。把上面的群号等信息修改成你自己管理的群,然后统计频率、禁言时间等自己设置即可。保存文件,然后运行即可。

还有个插科打诨的功能,其实是一个叫作 SmartReply 的插件。可以通过下面方式开启:

$client->load("SmartReply",data=>{
    apikey          => '4c53b48522ac4efdfe5dfb4f6149ae51', # 可选,最好自己去 http://www.tuling123.com 注册一个。
    allow_group     => ["老唐交流群"],  #可选,允许插件的群,可以是群名称或群号码
    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(小灰 小红 小猪)], #触发智能回复的关键字,使用时请设置is_need_at=>0
});

除了上面的插件,还有一些可选插件。比如“子曰”(随机回复论语),比如查询股票,翻译等。有需要的可以自行开通。最详细的配置,请前往参考文献中的文档页面。

最后附上一个我的配置文件供参考:

#!/usr/bin/env perl
use Mojo::Webqq;
my $client = Mojo::Webqq->new();
$client->load("ShowMsg");
$client->load("SmartReply",data=>{
    apikey          => '<请用你自己的apikey替换>',
    allow_group     => ["123456789","987654321"],  #可选,允许插件的群,可以是群名称或群号码
    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(小灰 小红 小猪)], #触发智能回复的关键字,使用时请设置is_need_at=>0
});
$client->load("GroupManage",data=>{ 
    allow_group => ["123456789","987654321"],  #可选,允许插件的群,可以是群名称或群号码
    new_group_member => '欢迎新成员 @%s 入群[鼓掌][鼓掌][鼓掌],请仔细阅读群公告,注意敏感词', #新成员入群欢迎语,%s会被替换成群成员名称
    lose_group_member => '很遗憾 @%s 离开了本群[流泪][流泪][流泪]', #成员离群提醒
    speak_limit => {#发送消息频率限制
        period          => 10, #统计周期,单位是秒
        warn_limit      => 8, #统计周期内达到该次数,发送警告信息
        warn_message    => '@%s 警告, 您发言过于频繁,可能会被禁言或踢出本群', #警告内容
        shutup_limit    => 10, #统计周期内达到该次数,成员会被禁言
        shutup_time     => 600, #禁言时长
        #kick_limit      => 15,   #统计周期内达到该次数,成员会被踢出本群
    },
    pic_limit => {#发图频率限制
        period          => 600,
        warn_limit      => 6,
        warn_message   => '@%s 警告, 您发图过多,可能会被禁言或踢出本群',
        shutup_limit    => 8,
        # kick_limit      => 10,
    },
    keyword_limit => { # 敏感词禁言
        period          => 600,  # 统计周期,单位是秒
        keyword         =>[qw(你的敏感词 你的敏感词2)],
        warn_limit      =>1,  # 第一次进行警告
        warn_message    => '@%s 警告:注意措辞,及时撤回,请大声朗读并背诵群公告', #警告内容
        shutup_limit    =>2,  # 第二次直接禁言
        shutup_time     => 18000,  # 禁言时间,单位也是秒
        #kick_limit=>undef,  # 如果想直接踢人,可以设置这个,否则建议默认
    },
});
$client->load("StockInfo");  # 开启查询股票功能
$client->load("MobileInfo");  # 开启查询手机归属地功能
$client->load("Translation");  # 开启翻译功能
$client->load("ZiYue");  # 开启论语功能
$client->run();

参考文献


【AD】美国洛杉矶CN2 VPS/香港CN2 VPS/日本CN2 VPS推荐,延迟低、稳定性高、免费备份_搬瓦工vps

【AD】RackNerd 推出的 KVM VPS 特价优惠,在纽约、西雅图、圣何塞和阿什本每年仅需 12.88 美元!