新来了项目,需要能监听指定微信群的消息并进行转发。基于 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. java基础面试(二)

    最近有搜了几个面试题,大家一起来探讨一下. 1.Oracle 的分页 --分页查询一 select * from (select a1.*,rownum rn from (select * from ...

  2. 【3】Decision tree(决策树)

    前言 Decision tree is one of the most popular classification tools 它用一个训练数据集学到一个映射,该映射以未知类别的新实例作为输入,输出 ...

  3. 一小时入门 Python

    因为需求, 需要用到py, 所以来学学py, 因为有java基础 一小时入门py语法是不成问题的, 但是仅仅入门基础语法而已, 不涉及算法,不涉及大数据,机器学习,人工智能, 但是py这么火爆,就在于 ...

  4. mariadb 离线安装

    [root@localhost local]# cd /var/local[root@localhost local]# lsmariadb[root@localhost local]# cd /ma ...

  5. Matlab2016b破解安装教程——超详细

    一.MATLAB是什么 MATLAB :是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simuli ...

  6. 安装Harbor管理镜像服务

    Harbor是什么? 还记得Docker Registry么?它是Docker官方提供的镜像仓库,简单易用,一键就可以部署.使用. 虽然看起来不错,但是Registry有些问题需要解决: 没有图形界面 ...

  7. Net基础篇_学习笔记_第十天_方法(函数)

    方法(函数): 函数就是将一堆代码进行重用的一种机制.//解决冗余代码问题------方法出现了.            面向对象的三大特征:封装.继承.多态 函数的语法:[public] stati ...

  8. 增删改查——Statement接口

    1.增加数据表中的元组 package pers.datebase.zsgc; import java.sql.Connection; import java.sql.DriverManager; i ...

  9. 03 (H5*) Vue第三天

    目录: 1:Vue-resource中的全局配置. 2:Vue动画2部曲 3:animate动画 4:钩子函数动画 5:组件三部曲,推荐使用template标签来创建组件模板 1:Vue-resour ...

  10. LayUI 上传IE11上传格式错误之后, layer.load(1)的动画一直在,没有关闭(仅限IE11)

    这个问题,测试反馈的时候,有丝丝的不相信,毕竟layui大家都是那么用的,结果后来用最简单的测试,发现确实会出现动画一直在的情况,如下: 上网搜索,也没发现一些有效的信息,最后就是自己读upload. ...