Skip to content

Commit

Permalink
Merge pull request #50 from HanSon/dev
Browse files Browse the repository at this point in the history
🎲 优化群控功能
  • Loading branch information
Hanson authored Mar 16, 2017
2 parents db06d62 + cdd3479 commit b3bfcfa
Show file tree
Hide file tree
Showing 19 changed files with 404 additions and 138 deletions.
15 changes: 12 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,22 @@ PS:运行后二维码将保存于设置的缓存目录,命名为qr.png,控

**请在terminal运行!请在terminal运行!请在terminal运行!**

## 体验

<img src="https://ws2.sinaimg.cn/large/685b97a1gy1fdordpa0cgj20e80e811z.jpg" height="320">

扫码后,验证输入“上山打老虎”即可自动加为好友并且拉入vbot群。

vbot并非24小时执行,有时会因为开发调试等原因暂停功能。如果碰巧遇到关闭情况,可加Q群 492548647 了解开放时间。执行后发送“拉我”即可自动邀请进群。

vbot示例源码为 https://github.com/HanSon/vbot/blob/master/example/index.php


## 文档

详细文档在[wiki](https://github.com/HanSon/vbot/wiki)

### 例子

[所有类型例子](https://github.com/HanSon/vbot/blob/master/example/index.php)
### 小DEMO

[红包提醒](https://github.com/HanSon/vbot/blob/master/example/hongbao.php)

Expand Down
178 changes: 135 additions & 43 deletions example/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,173 +35,265 @@
]);

// 图灵自动回复
function reply($str){
function reply($str)
{
return http()->post('http://www.tuling123.com/openapi/api', [
'key' => '1dce02aef026258eff69635a06b0ab7d',
'info' => $str
], true)['text'];

}

// 设置管理员
function isAdmin($message)
{
$adminAlias = 'hanson1994';

if (in_array($message->fromType, ['Contact', 'Group'])) {
if ($message->fromType === 'Contact') {
return $message->from['Alias'] === $adminAlias;
} else {
return isset($message->sender['Alias']) && $message->sender['Alias'] === $adminAlias;
}
}

return false;
}

$groupMap = [
[
'nickname' => 'vbot 测试群',
'id' => 1
]
];

$robot->server->setOnceHandler(function () use ($groupMap) {
group()->each(function ($group, $key) use ($groupMap) {
foreach ($groupMap as $map) {
if ($group['NickName'] === $map['nickname']) {
$group['id'] = $map['id'];
$groupMap[$key] = $map['id'];
group()->setMap($key, $map['id']);
}
}
return $group;
});
});

$robot->server->setMessageHandler(function ($message) use ($path) {
/** @var $message Message */

// 位置信息 返回位置文字
if ($message instanceof Location) {
/** @var $message Location */
Text::send('地图链接:'.$message->from['UserName'], $message->url);
return '位置:'.$message;
Text::send('地图链接:' . $message->from['UserName'], $message->url);
return '位置:' . $message;
}

// 文字信息
if ($message instanceof Text) {
/** @var $message Text */

if (str_contains($message->content, 'vbot') && !$message->isAt) {
return "你好,我叫vbot,我爸是HanSon\n我的项目地址是 https://github.com/HanSon/vbot \n欢迎来给我star!";
}

// 联系人自动回复
if ($message->fromType === 'Contact') {
if ($message->content === '拉我') {
$username = group()->getUsernameById(1);

group()->addMember($username, $message->from['UserName']);
}

if($message->content === '测试'){
$username = group()->getUsernameById(1);
print_r($username);
print_r(group()->get($username));
}

return reply($message->content);
// 群组@我回复
} elseif ($message->fromType === 'Group' && $message->isAt) {
return reply($message->content);
} elseif ($message->fromType === 'Group') {

if (str_contains($message->content, '设置群名称') && isAdmin($message)) {
group()->setGroupName($message->from['UserName'], str_replace('设置群名称', '', $message->content));
}

if (str_contains($message->content, '搜人') && isAdmin($message)) {
$nickname = str_replace('搜人', '', $message->content);
$members = group()->getMembersByNickname($message->from['UserName'], $nickname, true);
$result = '搜索结果 数量:' . count($members) . "\n";
foreach ($members as $member) {
$result .= $member['NickName'] . ' ' . $member['UserName'] . "\n";
}
return $result;
}

if (str_contains($message->content, '踢人') && isAdmin($message)) {
$username = str_replace('踢人', '', $message->content);
group()->deleteMember($message->from['UserName'], $username);
}

if (str_contains($message->content, '踢我') && $message->isAt) {
Text::send($message->from['UserName'], '拜拜 ' . $message->sender['NickName']);
group()->deleteMember($message->from['UserName'], $message->sender['UserName']);
return 'vbot 从未见过这么犯贱的人';
}

if ($message->isAt) {
return reply($message->content);
}
}
}

// 图片信息 返回接收到的图片
if ($message instanceof Image) {
return $message;
// return $message;
}

// 视频信息 返回接收到的视频
if ($message instanceof Video) {
return $message;
// return $message;
}

// 表情信息 返回接收到的表情
if ($message instanceof Emoticon) {
return $message;
Emoticon::sendRandom($message->from['UserName']);
}

// 语音消息
if($message instanceof Voice){
if ($message instanceof Voice) {
/** @var $message Voice */
return '收到一条语音并下载在' . $message::getPath($message::$folder) . "/{$message->msg['MsgId']}.mp3";
// return '收到一条语音并下载在' . $message::getPath($message::$folder) . "/{$message->msg['MsgId']}.mp3";
}

// 撤回信息
if ($message instanceof Recall && $message->msg['FromUserName'] !== myself()->username) {
/** @var $message Recall */
if($message->origin instanceof Image){
if ($message->origin instanceof Image) {
Text::send($message->msg['FromUserName'], "{$message->nickname} 撤回了一张照片");
Image::sendByMsgId($message->msg['FromUserName'], $message->origin->msg['MsgId']);
}elseif($message->origin instanceof Emoticon){
} elseif ($message->origin instanceof Emoticon) {
Text::send($message->msg['FromUserName'], "{$message->nickname} 撤回了一个表情");
Emoticon::sendByMsgId($message->msg['FromUserName'], $message->origin->msg['MsgId']);
}elseif($message->origin instanceof Video){
} elseif ($message->origin instanceof Video) {
Text::send($message->msg['FromUserName'], "{$message->nickname} 撤回了一个视频");
Video::sendByMsgId($message->msg['FromUserName'], $message->origin->msg['MsgId']);
}elseif($message->origin instanceof Voice){
} elseif ($message->origin instanceof Voice) {
Text::send($message->msg['FromUserName'], "{$message->nickname} 撤回了一条语音");
}else{
} else {
Text::send($message->msg['FromUserName'], "{$message->nickname} 撤回了一条信息 \"{$message->origin->msg['Content']}\"");
}
}

// 红包信息
if($message instanceof RedPacket){
if ($message instanceof RedPacket) {
// do something to notify if you want ...
return $message->content . ' 来自 ' .$message->from['NickName'];
return $message->content . ' 来自 ' . $message->from['NickName'];
}

// 转账信息
if($message instanceof Transfer){
if ($message instanceof Transfer) {
/** @var $message Transfer */
return $message->content . ' 收到金额 ' . $message->fee;
}

// 推荐名片信息
if($message instanceof Recommend){
if ($message instanceof Recommend) {
/** @var $message Recommend */
if($message->isOfficial){
if ($message->isOfficial) {
return $message->from['NickName'] . ' 向你推荐了公众号 ' . $message->province . $message->city .
" {$message->info['NickName']} 公众号信息: {$message->description}";
}else{
} else {
return $message->from['NickName'] . ' 向你推荐了 ' . $message->province . $message->city .
" {$message->info['NickName']} 头像链接: {$message->bigAvatar}";
}
}

// 请求添加信息
if($message instanceof RequestFriend){
if ($message instanceof RequestFriend) {
/** @var $message RequestFriend */
$groupUsername = group()->getGroupsByNickname('芬芬', true)->first()['UserName'];

Text::send($groupUsername, "{$message->info['NickName']} 请求添加好友 \"{$message->info['Content']}\"");

if($message->info['Content'] === '上山打老虎'){
if ($message->info['Content'] === '上山打老虎') {
Text::send($groupUsername, '暗号正确');
$message->verifyUser($message::VIA);
}else{
} else {
Text::send($groupUsername, '暗号错误');
}
}

// 分享信息
if($message instanceof Share){
if ($message instanceof Share) {
/** @var $message Share */
$reply = "收到分享\n标题:{$message->title}\n描述:{$message->description}\n链接:{$message->url}";
if($message->app){
if ($message->app) {
$reply .= "\n来源APP:{$message->app}";
}
return $reply;
}

// 分享小程序信息
if($message instanceof Mina){
if ($message instanceof Mina) {
/** @var $message Mina */
$reply = "收到小程序\n小程序名词:{$message->title}\n链接:{$message->url}";
return $reply;
}

// 公众号推送信息
if($message instanceof Official){
if ($message instanceof Official) {
/** @var $message Official */
$reply = "收到公众号推送\n标题:{$message->title}\n描述:{$message->description}\n链接:{$message->url}\n来源公众号名称:{$message->app}";
return $reply;
}

// 手机点击聊天事件
if($message instanceof Touch){
Text::send($message->msg['ToUserName'], "我点击了此聊天");
if ($message instanceof Touch) {
// Text::send($message->msg['ToUserName'], "我点击了此聊天");
}

// 新增好友
if($message instanceof \Hanson\Vbot\Message\Entity\NewFriend){
\Hanson\Vbot\Support\Console::log('新加好友:' . $message->from['NickName']);
if ($message instanceof \Hanson\Vbot\Message\Entity\NewFriend) {
\Hanson\Vbot\Support\Console::debug('新加好友:' . $message->from['NickName']);
Text::send($message->from['UserName'], "客官,等你很久了!感谢跟 vbot 交朋友,如果可以帮我点个star,谢谢了!https://github.com/HanSon/vbot");
group()->addMember(group()->getUsernameById(1), $message->from['UserName']);
return '现在拉你进去vbot的测试群,进去后为了避免轰炸记得设置免骚扰哦!如果被不小心踢出群,跟我说声“拉我”我就会拉你进群的了。';
}

// 群组变动
if($message instanceof GroupChange){
if ($message instanceof GroupChange) {
/** @var $message GroupChange */
if($message->action === 'ADD'){
\Hanson\Vbot\Support\Console::log('新人进群');
return $message->content;
}elseif($message->action === 'REMOVE'){
\Hanson\Vbot\Support\Console::log('群主踢人了');
return $message->content;
}elseif($message->action === 'RENAME'){
\Hanson\Vbot\Support\Console::log($message->from['NickName'].' 改名为 '.$message->rename);
if ($message->action === 'ADD') {
\Hanson\Vbot\Support\Console::debug('新人进群');
return '欢迎新人 ' . $message->nickname;
} elseif ($message->action === 'REMOVE') {
\Hanson\Vbot\Support\Console::debug('群主踢人了');
return $message->content;
} elseif ($message->action === 'RENAME') {
// \Hanson\Vbot\Support\Console::log($message->from['NickName'] . ' 改名为 ' . $message->rename);
if (group()->getUsernameById(1) == $message->from['UserName'] && $message->rename !== 'vbot 测试群') {
group()->setGroupName($message->from['UserName'], 'vbot 测试群');
return '行不改名,坐不改姓!';
}
} elseif ($message->action === 'BE_REMOVE') {
\Hanson\Vbot\Support\Console::debug('你被踢出了群 ' . $message->group['NickName']);
} elseif ($message->action === 'INVITE') {
\Hanson\Vbot\Support\Console::debug('你被邀请进群 ' . $message->from['NickName']);
}
}

return false;

});

$robot->server->setExitHandler(function(){
$robot->server->setExitHandler(function () {
\Hanson\Vbot\Support\Console::log('其他设备登录');
});

$robot->server->setExceptionHandler(function(){
$robot->server->setExceptionHandler(function () {
\Hanson\Vbot\Support\Console::log('异常退出');
});

Expand Down
Loading

0 comments on commit b3bfcfa

Please sign in to comment.