新来了项目,需要能监听指定微信群的消息并进行转发。基于 PHP 7 的 web 微信机器人 Vbot 可以满足需求。Vbot 本质上就是实现了登录网页版微信来进行自动回复、群管理等等操作。

github 地址:https://github.com/hanson/vbot,官网地址:http://create.hanc.cc/vbot/

安装

环境要求:

PHP >= 7.0.0

PHP fileinfo 扩展

PHP gd 扩展

PHP SimpleXML 扩展

安装命令:

composer require hanson/vbot

基本使用

接下来是干货了。由于项目需求较简单,没有涉及到高深的东西,读者各取所需就行。

项目框架是 Laravel,从指定群中监听消息,如果符合格式,则自动转发到目标群中。

Vbot 的使用一般分为四步:初始化 Vbot 实例;设置消息处理器;设置监听器;启动 Vbot 服务。

初始化 Vbot 实例

Vbot 初始化配置只是修改指定了下载、日志、缓存文件等等的存储路径。

config/vbot.conf:

 <?php

 $path = storage_path('wechat');
return [
'path' => $path,
/*
* swoole 配置项(执行主动发消息命令必须要开启,且必须安装 swoole 插件)
*/
'swoole' => [
'status' => false,
'ip' => '127.0.0.1',
'port' => '8866',
],
/*
* 下载配置项
*/
'download' => [
'image' => true,
'voice' => true,
'video' => true,
'emoticon' => true,
'file' => true,
'emoticon_path' => $path . '/emoticons', // 表情库路径(PS:表情库为过滤后不重复的表情文件夹)
],
/*
* 输出配置项
*/
'console' => [
'output' => true, // 是否输出
'message' => true, // 是否输出接收消息 (若上面为 false 此处无效)
],
/*
* 日志配置项
*/
'log' => [
'level' => 'debug',
'permission' => 0777,
'system' => $path . '/log', // 系统报错日志
'message' => $path . '/log', // 消息日志
],
/*
* 缓存配置项
*/
'cache' => [
'default' => 'file', // 缓存设置 (支持 redis 或 file)
'stores' => [
'file' => [
'driver' => 'file',
'path' => $path . '/cache',
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
],
],
/*
* 拓展配置
* ==============================
* 如果加载拓展则必须加载此配置项
*/
'extension' => [
// 管理员配置(必选),优先加载 remark(备注名)
'admin' => [
'remark' => '',
'nickname' => '',
],
// 'other extension' => [ ... ],
],
];

app/Console/Commands/SendVbot.php:

 public function handle()
{
$vbot = new Vbot(config('vbot_conf'));
}

设置消息处理器

app/Console/Commands/SendVbot.php:

 public function handle()
{
...
$myvbot = app(MyVbot::class); // 获取消息处理器实例
$messageHandler = $vbot->messageHandler; // 收到消息时触发
$messageHandler->setHandler([$myvbot, 'messageHandler']);
}

app/Handlers/MyVbot:

 <?php

 namespace App\Handlers;

 use Hanson\Vbot\Message\Text;
use Illuminate\Support\Collection; class MyVbot
{
public function messageHandler(Collection $message)
{
// 消息发送者类型
$fromType = $message['fromType'] ?? null;
// 消息类型
$type = $message['type'] ?? null;
// 经过处理显示在控制台的消息
$content = $message['content'] ?? null;
// 转格式后的消息
$message_in = $message['message'] ?? null;
// 发送者的 Username,当为群消息时此值为 sender 的 username
$username = $message['username'] ?? null; // 消息来源
$fromUserName = $message['from']['UserName'] ?? null;
$fromNickName = $message['from']['NickName'] ?? null; // 群消息发送者
$senderUserName = $message['sender']['UserName'] ?? null;
$senderNickName = $message['sender']['NickName'] ?? null; ... vbot('console')->log("【转发消息】:{$content}");
Text::send($group_username, $content); ...
}
}

设置监听器

app/Console/Commands/SendVbot.php:

 public function handle()
{
...
$myobserver = app(MyObserver::class); // 获取监听器实例
$observer = $vbot->observer; // 二维码监听器
$observer->setQrCodeObserver([$myobserver, 'setQrCodeObserver']); $observer->setLoginSuccessObserver([$myobserver, 'setLoginSuccessObserver']); $observer->setExitObserver([$myobserver, 'setExitObserver']);
}

app/Observers/MyObserver.php:

 <?php

 namespace App\Observers;

 use App\Repositories\Ding2Repository;

 class MyObserver
{
protected $ding2Repository;
protected $uri;
protected $console; public function __construct(Ding2Repository $ding2Repository)
{
$this->ding2Repository = $ding2Repository;
$this->console = vbot('console');
$this->uri = 'https://oapi.dingtalk.com/robot/send?access_token=xxx';
} public function setQrCodeObserver($qrCodeUrl)
{
$qrcode_url = str_replace('/l/', '/qrcode/', $qrCodeUrl);
$this->ding2Repository->robotQrSend($this->uri, $qrcode_url);
} public function setLoginSuccessObserver()
{
$this->ding2Repository->robotLoginSuccessSend($this->uri); $this->console->log('登录成功');
} public function setExitObserver()
{
$this->ding2Repository->robotExitSend($this->uri); $this->console->log('程序退出');
}
}

启动 Vbot 服务

 public function handle()
{
...
try {
$vbot->server->serve();
} catch (Exception $e) {
$this->error($e->getMessage());
}
}

编码完成之后就可以运行 PHP 命令来启动 Vbot 进程。

PHP 微信机器人 Vbot 结合 Laravel 基础入门及实例的更多相关文章

  1. 零基础入门微信小程序开发

    注:本文来源于:<零基础入门微信小程序开发> 课程介绍 本达人课是一个系列入门教程,目标是从 0 开始带领读者上手实战,课程以微信小程序的核心概念作为主线,介绍配置文件.页面样式文件.Ja ...

  2. Laravel 推荐-基础入门+实战+拓展视频教程

    1.laravel基础 1.Composer:类库管理神器 - Laravel的安装和配置 2.路由:地址和方法的小媒人 - 基础路由 3.控制器:管家婆 - 基础用法 4.视图:最终结果输出 5.b ...

  3. Python创建微信机器人

    微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地,今天我们要将便是如何用Python来生成一个微信机器人,突然想起鲁迅先生曾经说过的一句话:因为是微信机器人系列的 ...

  4. 这是一款借助chrome 插件的微信机器人

    1.chrome kit微信机器人简介 借助chrome 插件 js注入来实现消息的发送 chrome devtool api的调用来监听https请求 打开微信登录界面,在扫码登录前必须先打开too ...

  5. 基于itchat的微信群聊小助手基础开发(一)

    前段时间由于要管理微信群,基于itchat开发了一个简单的微信机器人 主要功能有: 图灵机器人功能 群聊昵称格式修改提示 消息防撤回功能 斗图功能 要开发一个基于itchat的最基本的聊天机器人,在g ...

  6. C#区块链零基础入门,学习路线图 转

    C#区块链零基础入门,学习路线图 一.1分钟短视频<区块链100问>了解区块链基本概念 http://tech.sina.com.cn/zt_d/blockchain_100/ 二.C#区 ...

  7. 机器人程序设计——之如何正确入门ROS | 硬创公开课(附视频/PPT)【转】

    转自:http://blog.exbot.net/archives/2966 导语:本期公开课面向想入手ROS却又不知从何下手的小伙伴,为大家梳理好学习思路. ROS和Android一样是开源的,功能 ...

  8. laravel基础课程---1、laravel安装及基础介绍(laravel如何安装)

    laravel基础课程---1.laravel安装及基础介绍(laravel如何安装) 一.总结 一句话总结: [修改composer镜像地址].[明确laravel的安装要求].[安装指定版本的la ...

  9. 零基础入门 实战mpvue2.0多端小程序框架

    第1章 课程快速预览(必看!!!)在这一章节中,老师讲带领你快速预览课程整体.其中,涉及到为什么要做这么一门实战课程.制作一个小程序的完整流程是怎么样的,以及如何做项目的技术选型. 第2章 30 分钟 ...

随机推荐

  1. extends 关键字

    来源于百度: 在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. 例子1:public class Clie ...

  2. 【Offer】[33] 【二叉搜索树的后序遍历序列】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回true, 否则返回false. 假设输入的数组的任意两个数字 ...

  3. IDC数据中心应具备如下基本条件:

    IDC数据中心应具备如下基本条件: 电力:有充足的直流电力保证,同时还应具备UPS不间断电源及充足的电池组以备用.高端数据中心通常配备柴油发电机等. 环境:符合电信标准的建筑设施,防尘防静电,相对适合 ...

  4. Linux运维基础提高之RAID卡和磁盘分区

    磁盘大小计算: 柱面的数量*每个柱面的大小(容量) [root@luffy001 ~]# fdisk -l Disk /dev/sda: 10.7 GB, 10737418240 bytes 255 ...

  5. Python作业本——第3章 函数

    今天看完了第三章,习题都是一些概念性的问题,就不一一解答了. 实践项目是创建一个Collatz序列,并且加上验证输入是不是一个整数. def collatz(number): if number % ...

  6. 实验吧CTF练习题---WEB---Forms解析

    实验吧web之Forms 地址:http://www.shiyanbar.com/ctf/1819 flag值:ctf{forms_are_easy}   解题步骤: 1.查看页面源代码,从中发现&q ...

  7. Android Q 正式命名为 Android 10

    根据官方博文,谷歌已经公布了 Android Q 的名称,它并不是想以前一样,以甜食命名,也不是以任何以字母 Q 开头来命名,而是简单称它为 Android 10. 该公司表示,它正在改变其发布版本的 ...

  8. 彻底解决android拍照后无法显示的问题

    这是对上篇"android 图片拍照,相册选图,剪切并显示"的文章之后的 改进 上一篇文章虽然能解决图片的拍照剪切以及显示,但是发现他有一个缺点, 如果该程序单独运行,貌似没有任何 ...

  9. 本地代码上传github失败常见错误

    1.上传失败 解决办法如下: 可以通过如下命令进行github与本地代码合并: git pull --rebase origin master 重新执行上传命令: git push -u origin ...

  10. 【学习笔记】第六章 python核心技术与实践--深入浅出字符串

    [第五章]思考题答案,仅供参考: 思考题1:第一种方法更快,原因就是{}不需要去调用相关的函数: 思考题2:用列表作为key在这里是不被允许的,因为列表是一个动态变化的数据结构,字典当中的key要求是 ...