新来了项目,需要能监听指定微信群的消息并进行转发。基于 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. CF - 1108 E 枚举上界+线段树维护

    题目传送门 枚举每个点作为最大值的那个点.然后既然是作为最大值出现的话,那么这个点就是不需要被减去的,因为如果最小值也在这个区间内的话,2者都减去1,对答案没有影响,如果是最小值不出现在这个区间内的话 ...

  2. kick start 2019 round D T2题解

    题目大意:由N个房子围成一个环,G个人分别顺时针/逆时针在房子上走,一共走M分钟,每分钟结束,每个人顺/逆时针走到相邻的房子.对于每个房子都会记录最后时刻到达的人(可能是一群人).最终输出每个人会被几 ...

  3. 接口压测工具WRK的学习与使用

    之前一直在使用jmeter,第一次接触wrk,记录下使用过程以便自己再次使用. 首先,WRK是linux系统上才可以使用的工具,我也不想剑走偏锋的去研究如何让wrk可以在windows系统上使用. 临 ...

  4. 2018 Multi-University Training Contest 3(部分题解)

    Problem F. Grab The Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Ja ...

  5. Webstorm 的设置

    背景色

  6. Python基础:Python运行的两种基本方式

    完成Python的安装之后,我们可以开始编写Python代码以及运行Python程序了.我们来看一下运行Python具体有哪几种方式 1.REPL 所谓REPL即read.eva.print.loop ...

  7. 理解Yarn的执行流程和组件作用

    Yarn引入案例 1.学生找院长报到,院长给学生一个学号 2.院长比较忙,继续找主任处理学生事务 3.系主任找院办给学生分配资源(书本) 4.主任找张老师教授java 5.张老师给学生安排座位 6.学 ...

  8. 如何在IDEA中导入一个普通的java工程

    1.如下: 2.如下,选中要导入的工程: 3.如下: 4.如下图 5.点击next,后如下图: 6.点击next后,如下图: 7.点击next后,如下图: 8.点击next后,如下图: 9.点击nex ...

  9. 反射,Expression Tree,IL Emit 属性操作对比

    .net的反射(Reflection) 是.Net中获取运行时类型信息的一种方法,通过反射编码的方式可以获得 程序集,模块,类型,元数据等信息. 反射的优点在于微软提供的API调用简单,使用方便: 表 ...

  10. Nginx安装及详解

    Nginx简介: Nginx(发音engine x)专为性能优化而开发的开源软件,是HTTP.反向代理.邮件代理.TCP/UDP协议代理软件,由俄罗斯的作者Igor Sysoev开发,其最知名的优点是 ...