Commit 7906730c by HanSon

删除部分例子

1 parent d55e635b
...@@ -11,36 +11,33 @@ ...@@ -11,36 +11,33 @@
composer require hanson/robot composer require hanson/robot
``` ```
# 文档 # 文档
## 例子 详细文档在[wiki](https://github.com/HanSon/vbot/wiki)
[自动回复](https://github.com/HanSon/vbot/blob/before/example/tuling.php)
[红包提醒](https://github.com/HanSon/vbot/blob/before/example/hongbao.php) ## 例子
[轰炸群](https://github.com/HanSon/vbot/blob/before/example/groups.php) [所有类型例子](https://github.com/HanSon/vbot/blob/master/example/index.php)
[发送消息到某群名](https://github.com/HanSon/vbot/blob/before/example/group.php) [红包提醒](https://github.com/HanSon/vbot/blob/master/example/hongbao.php)
[消息转发](https://github.com/HanSon/vbot/blob/before/example/forward.php) [轰炸消息到某群名](https://github.com/HanSon/vbot/blob/master/example/group.php)
[自定义处理器](https://github.com/HanSon/vbot/blob/before/example/custom.php) [消息转发](https://github.com/HanSon/vbot/blob/master/example/forward.php)
[是否@了我](https://github.com/HanSon/vbot/blob/before/example/is_at.php) [自定义处理器](https://github.com/HanSon/vbot/blob/master/example/custom.php)
## 基本使用 ## 基本使用
``` ```
# 图灵API自动回复 // 图灵API自动回复
require_once __DIR__ . './../vendor/autoload.php'; require_once __DIR__ . './../vendor/autoload.php';
use Hanson\Robot\Foundation\Robot; use Hanson\Vbot\Foundation\Vbot;
use Hanson\Robot\Message\Message; use Hanson\Robot\Message\Message;
$robot = new Robot([ $robot = new Vbot([
'tmp' => '/path/to/tmp/', # 用于生成登录二维码以及文件保存 'tmp' => '/path/to/tmp/', # 用于生成登录二维码以及文件保存
'debug' => true # 用于是否输出用户组的json 'debug' => true # 用于是否输出用户组的json
]); ]);
...@@ -62,247 +59,18 @@ $robot->server->run(); ...@@ -62,247 +59,18 @@ $robot->server->run();
``` ```
# 特别感谢
# API
## server
```
# 消息处理处,接收到微信消息时的处理器
$robot->server->setMessageHandler(function($message){
});
```
```
# 自定义处理器,一直执行
$robot->server->setCustomHandler(function(){
});
```
## Message
### 属性
| 类型 | 名称 | 解释 |
| --- | --- | --- |
| array| from | 消息来源 |
| array| sender| 当消息来自于群组时,from为群组 ,而sender为消息发送者, 假若不为 group,sender 为空 |
| string| username| 消息来源的username |
| array| to | 消息接收者,一般为自己 |
| string | content | 经过处理的消息内容 |
| carbon | time | 消息接收的的时间 |
| string | fromType | 消息发送者的类型 |
| string | type | 消息内容的类型 |
### 方法
`bool send($word, $username)`
发送消息给username的用户或者群组
* 参数
* `string` `word` 回复的文字
* `stirng` `username` 用户或者群组的username
### type 消息类型
* `Text` 文字消息
* `Location` 位置
* ` Image` 图片
* `Voice` 语音
* ` AddUser` 添加朋友
* `Recommend` 推荐名片
* ` Animation `
* `Share` 链接分享
* `Video` 小视频
* `VideoCall` 视频聊天
* `Redraw`
* `RedPacket` 红包
* `Unknown` 未知
### fromType 消息发送者类型
* ` System` 系统消息
* `FriendRequest` 加好友申请
* ` Self` 自己
* `FileHelper` 文件助手
* ` Group` 群组
* `Contact` 联系人
* `Official` 公众号
* `Special` qq邮件, 微信团队 , 漂流瓶等特殊账号
* `Unknown` 未知
### 账号
无论是group, contact都有多个账号组成,而账号组成如下
```
{
"@d5b4e97cd7bdf68152393e8e6c30ab67ba57e8fa57b4fcb5917490407c93fb06": {
"Uin": 0,
"UserName": "@d5b4e97cd7bdf68152393e8e6c30ab67ba57e8fa57b4fcb5917490407c93fb06",
"NickName": "wendy",
"HeadImgUrl": "/cgi-bin/mmwebwx-bin/webwxgeticon?***",
"ContactFlag": 3,
"MemberCount": 0,
"MemberList": [],
"RemarkName": "",
"HideInputBarFlag": 0,
"Sex": 0,
"Signature": "",
"VerifyFlag": 0,
"OwnerUin": 0,
"PYInitial": "WENDY",
"PYQuanPin": "wendy",
"RemarkPYInitial": "",
"RemarkPYQuanPin": "",
"StarFriend": 0,
"AppAccountFlag": 0,
"Statues": 0,
"AttrStatus": 135269,
"Province": "",
"City": "",
"Alias": "",
"SnsFlag": 17,
"UniFriend": 0,
"DisplayName": "",
"ChatRoomId": 0,
"KeyWord": "",
"EncryChatRoomId": ""
}
}
```
最重要的信息为
| 字段名 | 含义|
| --- | --- |
| UserName| 每个账号唯一的ID,每次登录随机生成 |
| NickName| 账号的昵称|
| Alias| 微信号|
## 全局方法
本库用了大量的单例模式,为了方便写了一些方便的[全局方法](https://github.com/HanSon/vbot/blob/before/src/Support/helpers.php),contact,group,member等均继承了[illuminate/support/Collection](https://github.com/illuminate/support/blob/master/Collection.php)
相关文档: [中文文档](https://laravel-china.org/docs/5.3/collections) [英文文档](https://laravel.com/docs/5.3/collections)
### account()
#### 属性
| 类型 | 名称 | 解释 |
| --- | --- | --- |
| Hanson\Robot\Collections\Group| group | 群组 |
| Hanson\Robot\Collections\Contact| contact| 联系人 |
#### 方法
`getAccount($username)` 根据username返回账号
`返回值 array`
| 参数名 | 类型 | 解释 |
| ------ | ---- | ---- |
| username| string | 账号数组 |
### contact()
#### 方法
`getContactByUsername($username)` 根据username获取Contact
`返回值 array`
| 参数名 | 类型 | 解释 |
| ------ | ---- | ---- |
| username| string | 联系人的username|
`getContactById($id)` 根据微信号获取Contact
`返回值 array`
| 参数名 | 类型 | 解释 |
| ------ | ---- | ---- |
| id| string | 联系人的微信号|
`getUsernameById($id)` 根据微信号获取 username
`返回值 array`
| 参数名 | 类型 | 解释 |
| ------ | ---- | ---- |
| id| string | 联系人的微信号|
### group()
#### 方法
`isGroup($userName)` 根据username判断是否群组
`返回值 bool`
| 参数名 | 类型 | 解释 |
| ------ | ---- | ---- |
| username| string | 联系人的username|
`getGroupsByNickname($name, $blur = false, $onlyUsername = false)` 根据名称筛选群组
`返回值 array`
| 参数名 | 类型 | 解释 |
| ------ | ---- | ---- |
| name| string | 需要筛选的名称|
| blur| bool | 是否模糊匹配|
| onlyUsername | bool | 是否只筛选出username|
### member()
#### 方法
`getMemberByUsername($username)` 根据username获取成员
`返回值 array`
| 参数名 | 类型 | 解释 |
| ------ | ---- | ---- |
| name| string | 成员的username|
### myself()
#### 属性
* userName
* nickname 昵称
* sex 性别(0-女 1-男)
### http()
#### 方法
`get($url, array $query = [])` ajax get请求
`返回值 string`
| 参数名 | 类型 | 解释 |
| ------ | ---- | ---- |
| url| string | 请求链接|
| query| array | 请求参数数组|
`post($url, array $query = [], $json = false)` ajax post请求
`返回值 string|array`
| 参数名 | 类型 | 解释 |
| ------ | ---- | ---- |
| url| string | 请求链接|
| query| array | 请求参数数组|
| array| bool | 是否进行json_decode处理|
`json($url, array $query = [], $json = false)` ajax post json请求
`返回值 string|array`
| 参数名 | 类型 | 解释 | 感谢以上两位作者曾对本人耐心解答
| ------ | ---- | ---- |
| url| string | 请求链接|
| query| array | 请求参数数组|
| array| bool | 是否进行json_decode处理|
# 特别感谢 ## 参考项目
[lbbniu/WebWechat](https://github.com/lbbniu/WebWechat) [lbbniu/WebWechat](https://github.com/lbbniu/WebWechat)
[littlecodersh/ItChat](https://github.com/littlecodersh/ItChat) [littlecodersh/ItChat](https://github.com/littlecodersh/ItChat)
感谢以上两位作者曾对本人耐心解答 感谢楼上两位作者曾对本人耐心解答
## 参考项目
[liuwons/wxBot](https://github.com/liuwons/wxBot) 参考了整个微信的登录流程与消息处理 [liuwons/wxBot](https://github.com/liuwons/wxBot) 参考了整个微信的登录流程与消息处理
...@@ -319,7 +87,7 @@ $robot->server->setCustomHandler(function(){ ...@@ -319,7 +87,7 @@ $robot->server->setCustomHandler(function(){
- [x] 红包 - [x] 红包
- [x] 转账 - [x] 转账
- [x] 名片 - [x] 名片
- [ ] 好友验证 - [x] 好友验证
- [ ] 分享 - [ ] 分享
- [ ] 小程序 - [ ] 小程序
...@@ -343,7 +111,7 @@ $robot->server->setCustomHandler(function(){ ...@@ -343,7 +111,7 @@ $robot->server->setCustomHandler(function(){
- [ ] 好友操作 - [ ] 好友操作
- [ ] 给好友添加备注 - [ ] 给好友添加备注
- [ ] 通过好友验证 - [x] 通过好友验证
- [ ] 聊天窗口操作 - [ ] 聊天窗口操作
- [ ] 置顶聊天会话 - [ ] 置顶聊天会话
...@@ -351,6 +119,6 @@ $robot->server->setCustomHandler(function(){ ...@@ -351,6 +119,6 @@ $robot->server->setCustomHandler(function(){
- [ ] 命令行操作信息发送 - [ ] 命令行操作信息发送
# 已知bug # 待修复bug
* 30% 的几率初始化失败(暂时无解,如清楚问题欢迎PR) * 30% 的几率初始化失败(暂时无解,如清楚问题欢迎PR)
...@@ -9,20 +9,19 @@ ...@@ -9,20 +9,19 @@
require_once __DIR__ . './../vendor/autoload.php'; require_once __DIR__ . './../vendor/autoload.php';
use Hanson\Vbot\Foundation\Vbot; use Hanson\Vbot\Foundation\Vbot;
use Hanson\Vbot\Message\Message; use Hanson\Vbot\Message\Entity\Text;
$robot = new Vbot([ $robot = new Vbot([
'tmp' => __DIR__ . '/./../tmp/', 'tmp' => __DIR__ . '/./../tmp/',
'debug' => true 'debug' => true
]); ]);
$robot->server->setMessageHandler(function($message){ $robot->server->setMessageHandler(function ($message) {
if($message->type === 'Text'){ if ($message->type === 'Text') {
/** @var $message Message */ /** @var $message Text */
$contact = contact()->getUsernameById('hanson1994'); $contact = contact()->getUsernameById('hanson');
Text::send($message->content, $contact); Text::send($contact, $message);
} }
}); });
$robot->server->setCustomerHandler(function(){
});
$robot->server->run(); $robot->server->run();
<?php
/**
* Created by PhpStorm.
* User: HanSon
* Date: 2016/12/7
* Time: 16:33
*/
require_once __DIR__ . './../vendor/autoload.php';
use Hanson\Vbot\Foundation\Vbot;
use Hanson\Vbot\Message\Message;
$robot = new Vbot([
'tmp' => __DIR__ . '/./../tmp/',
]);
$robot->server->setMessageHandler(function($message){
/** @var $message Message */
if($message->type === 'Text'){
Text::send($message->fromType, $message->username);
}
});
$robot->server->run();
<?php
/**
* 发送给所有群消息!!!慎重!!!
* User: HanSon
* Date: 2016/12/7
* Time: 16:33
*/
require_once __DIR__ . './../vendor/autoload.php';
use Hanson\Vbot\Foundation\Vbot;
use Hanson\Vbot\Message\Message;
$robot = new Vbot([
'tmp' => __DIR__ . '/./../tmp/',
'debug' => true
]);
// 发送给所有群消息!!!慎重!!!
$robot->server->setCustomerHandler(function(){
/** @var $message Message */
$groups = group()->getGroupsByNickname('stackoverflow', true);
foreach ($groups as $group) {
Text::send('测试' . \Carbon\Carbon::now()->toDateTimeString(), $group['UserName']);
}
});
$robot->server->run();
...@@ -9,7 +9,8 @@ ...@@ -9,7 +9,8 @@
require_once __DIR__ . './../vendor/autoload.php'; require_once __DIR__ . './../vendor/autoload.php';
use Hanson\Vbot\Foundation\Vbot; use Hanson\Vbot\Foundation\Vbot;
use Hanson\Vbot\Message\Message; use Hanson\Vbot\Message\Entity\Message;
use Hanson\Vbot\Message\Entity\RedPacket;
use Hanson\Vbot\Support\Console; use Hanson\Vbot\Support\Console;
$robot = new Vbot([ $robot = new Vbot([
...@@ -18,12 +19,8 @@ $robot = new Vbot([ ...@@ -18,12 +19,8 @@ $robot = new Vbot([
$robot->server->setMessageHandler(function($message){ $robot->server->setMessageHandler(function($message){
/** @var $message Message */ /** @var $message Message */
if($message->type === 'RedPacket'){ if($message instanceof RedPacket){
if($message->fromType == 'Group'){ $nickname = account()->getAccount($message->from['UserName'])['NickName'];
$nickname = group()->get($message->username)['NickName'];
}else{
$nickname = contact()->get($message->username)['NickName'];
}
Console::log("收到来自 {$nickname} 的红包"); Console::log("收到来自 {$nickname} 的红包");
} }
......
<?php
/**
* Created by PhpStorm.
* User: HanSon
* Date: 2016/12/7
* Time: 16:33
*/
require_once __DIR__ . './../vendor/autoload.php';
use Hanson\Vbot\Foundation\Vbot;
use Hanson\Vbot\Message\Message;
use Hanson\Vbot\Message\Image;
use Hanson\Vbot\Support\Console;
$robot = new Vbot([
'tmp' => __DIR__ . '/./../tmp/',
]);
$robot->server->setMessageHandler(function($message){
/** @var $message Message */
if($message->content === '测试图片'){
// 自己发就发送给自己
Image::send($message->username, realpath(__DIR__ . '/./../tmp/jpg/1547651860337387181.jpg'));
}
if($message->type === 'Recall' && $message->rawMsg['FromUserName'] !== myself()->username){
Console::log($message->content);
Text::send($message->content, $message->username);
Image::send($message->username, realpath(__DIR__ . '/./../tmp/jpg/1547651860337387181.jpg'));
}
});
$robot->server->run();
<?php
/**
* Created by PhpStorm.
* User: HanSon
* Date: 2016/12/7
* Time: 16:33
*/
require_once __DIR__ . './../vendor/autoload.php';
use Hanson\Vbot\Foundation\Vbot;
use Hanson\Vbot\Message\Message;
use Hanson\Vbot\Support\Console;
$robot = new Vbot([
'tmp' => __DIR__ . '/./../tmp/',
]);
$robot->server->setMessageHandler(function($message){
/** @var $message Message */
if($message->fromType === 'Group' && $message->type === 'Text'){
if($message->isAt){
$groupName = group()->get($message->username)['NickName'];
$memberName = member()->get($message->sender['UserName'])['NickName'];
// ex: wechat群 的 HanSon at 了我
Console::log("{$groupName}{$memberName} at 了我");
}
}
});
$robot->server->run();
<?php
/**
* Created by PhpStorm.
* User: HanSon
* Date: 2016/12/7
* Time: 16:33
*/
require_once __DIR__ . './../vendor/autoload.php';
use Hanson\Vbot\Foundation\Vbot;
use Hanson\Vbot\Message\Message;
use Hanson\Vbot\Message\Image;
use Hanson\Vbot\Message\Entity\Text;
use Hanson\Vbot\Message\Emoticon;
use Hanson\Vbot\Message\Video;
$path = __DIR__ . '/./../tmp/';
$robot = new Vbot([
'tmp' => $path,
'debug' => true
]);
$robot->server->setMessageHandler(function($message) use ($path){
/** @var $message Message */
// 发送撤回消息 (排除自己)
if($message->type === 'Recall' && $message->rawMsg['FromUserName'] !== myself()->username ){
$msg = message()->get($message->msgId);
if($msg){
$nickname = $msg['sender'] ? $msg['sender']['NickName'] : account()->getAccount($msg['username'])['NickName'];
if($msg['type'] === 'Image'){
Text::send($message->username, "{$nickname} 撤回了一张照片");
Image::send($message->username, realpath($path . "jpg/{$message->msgId}.jpg"));
}elseif($msg['type'] === 'Emoticon'){
Text::send($message->username, "{$nickname} 撤回了一个表情");
Emoticon::send($message->username, realpath($path . "gif/{$message->msgId}.gif"));
}elseif($msg['type'] === 'Video' || $msg['type'] === 'VideoCall'){
Text::send($message->username, "{$nickname} 撤回了一个视频");
Video::send($message->username, realpath($path . "mp4/{$message->msgId}.mp4"));
}elseif($msg['type'] === 'Voice'){
Text::send($message->username, "{$nickname} 撤回了一条语音");
}else{
Text::send($message->username, "{$nickname} 撤回了一条信息 \"{$msg['content']}\"");
}
}
}
});
$robot->server->run();
<?php
/**
* Created by PhpStorm.
* User: HanSon
* Date: 2016/12/7
* Time: 16:33
*/
require_once __DIR__ . './../vendor/autoload.php';
use Hanson\Vbot\Foundation\Vbot;
use Hanson\Vbot\Message\Message;
$robot = new Vbot([
'tmp' => __DIR__ . '/./../tmp/',
]);
$robot->server->setMessageHandler(function($message){
/** @var $message Message */
if($message->type === 'Text'){
$url = 'http://www.tuling123.com/openapi/api';
$result = http()->post($url, [
'key' => '1dce02aef026258eff69635a06b0ab7d',
'info' => $message->content
], true);
return $result['text'];
}
});
$robot->server->run();
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!