vbot是一款基于php环境的高度自定义的微信机器人,能够实现自动回复,消息转发,防撤回,留言统计等功能。但是官方的最低限制条件是需要php7,这就有点尴尬了,不过有了docker后,这就不是问题了。
来源
Docker/php 镜像主页:https://hub.docker.com/_/php/
HanSon/vbot 项目主页:https://github.com/HanSon/vbot
需求
docker已安装(如何在Debian8上安装Docker虚拟环境)
准备
新建工作目录
1 |
mkdir /var/www/vbot |
进入工作目录
1 |
cd /var/www/vbot |
安装composer(如果没有安装)
1 |
curl -sS https://getcomposer.org/installer | php |
使用composer下载vbot及依赖组件至本地
1 |
php composer.phar require hanson/vbot |
在根目录下新建tmp目录
1 |
mkdir /var/www/vbot/tmp |
环境搭建
使用以下命令创建并运行虚拟容器,原始镜像使用PHP官方的7.0-apache分支。
1 |
docker run -d -t -i -v /var/www/vbot/:/var/www/html -p 8080:80 --name vbot php:7.0-apache /bin/bash |
其中-v后是网站主目录映射,-p后面是映射端口。这里还可以使用7.0-cli分支,但是为了考虑以后可能会需要网页界面,所以还是使用带apache的分支。
列出所有正在运行的虚拟容器
1 |
docker ps |
找到虚拟容器的ID,执行以下命令进入虚拟容器的命令行模式
1 |
docker attach <your-container-id> |
进入虚拟机命令行模式后,Shell的命令行标识符会从$变为#
因为官方镜像并没有包括附加组件库,所以还需额外安装GD库,因为vbot的二维码功能需要GD库,如果不安装的话,在运行程序时会导致出错。
在容器的命令行界面分别运行以下命令安装iconv、mcrypt以及GD库
1 2 3 4 |
apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng12-dev docker-php-ext-install -j$(nproc) iconv mcrypt docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ docker-php-ext-install -j$(nproc) gd |
编写程序
在根目录下创建server.php,并修改为以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php // include composer autoload require 'vendor/autoload.php'; use Hanson\Vbot\Foundation\Vbot; use Hanson\Vbot\Message\Entity\Message; use Hanson\Vbot\Message\Entity\Text; $path = __DIR__ . 'tmp/'; $robot = new Vbot([ 'tmp' => 'tmp/', # 用于生成登录二维码以及文件保存 'debug' => true # 用于是否输出用户组的json ]); // 图灵自动回复 function reply($str){ return http()->post('http://www.tuling123.com/openapi/api', [ 'key' => '1dce02aef026258eff69635a06b0ab7d', 'info' => $str ], true)['text']; } $robot->server->setMessageHandler(function ($message) use ($path) { // 文字信息 if ($message instanceof Text) { /** @var $message Text */ // 联系人自动回复 if ($message->fromType === 'Self') { return reply($message->content); } } return false; }); $robot->server->run(); |
以上程序运行后将通过图灵API自动回复自己给自己发送的文字消息
运行
使用以下命令运行该程序
1 |
php server.php |
当命令行提示扫描二维码时,去tmp/目录下找到qr.png,下载到本地后,打开手机微信客户端,扫描该二维码,并确认登录。
正确登录后的输出
1 2 3 4 5 6 7 8 9 10 |
root@8b36adedd106:/var/www/html# php index2.php [INFO] 请扫描二维码登录 [ERROR] 登录超时,请重试 [INFO] 请点击确认登录微信 登录URL:https://wx.qq.com/cgi-bin/mmwebwx-bin/ url is:https://wx.qq.com/cgi-bin/mmwebwx-bin [INFO] 登录成功 [INFO] 初始化成功 [INFO] 开始初始化联系人 [INFO] 初始化联系人成功 |
常见错误
缺少GD库
原因是由于php官方Docker镜像中没有集成GD库,需要自行安装GD库
初始化失败
原因是由于该帐号已在其他地方登录,在开始运行程序前需要先退出所有的网页微信登录,再运行该程序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
root@8b36adedd106:/var/www/html# php index2.php [INFO] 请扫描二维码登录 [ERROR] 登录超时,请重试 [INFO] 请点击确认登录微信 登录URL:https://wx.qq.com/cgi-bin/mmwebwx-bin url is:https://wx.qq.com/cgi-bin/mmwebwx-bin [INFO] 登录成功 Fatal error: Uncaught Exception: [ERROR] 初始化失败,链接:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit in /var/www/html/vendor/hanson/vbot/src/Core/Server.php:261 Stack trace: #0 /var/www/html/vendor/hanson/vbot/src/Core/Server.php(85): Hanson\Vbot\Core\Server->init() #1 /var/www/html/index2.php(23): Hanson\Vbot\Core\Server->run() #2 {main} thrown in /var/www/html/vendor/hanson/vbot/src/Core/Server.php on line 261 |
实例
在通讯录中找到自己,每次给自己发送消息,都会收到图灵机器人的回复。
There are no comments yet