Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation
This project
Loading...
Sign in
hfpp2012
/
vbot
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 4fb2b794
authored
Dec 21, 2016
by
hanccc
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
设置from
1 parent
3ec1bce2
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
183 additions
and
50 deletions
src/Collections/Account.php
src/Core/MessageHandler.php
src/Core/Server.php
src/Message/Location.php
src/Message/Message.php
src/Message/Text.php
src/Models/Content.php
src/Models/Origin.php
src/Models/Sender.php
src/Collections/Account.php
View file @
4fb2b79
...
...
@@ -37,6 +37,11 @@ class Account extends Collection
return
static
::
$instance
;
}
/**
* 增加群聊天
*
* @param $groupMember
*/
public
function
addGroupMember
(
$groupMember
)
{
$account
=
static
::
$instance
->
all
();
...
...
@@ -46,6 +51,11 @@ class Account extends Collection
static
::
$instance
->
make
(
$account
);
}
/**
* 增加联系人聊天
*
* @param $normalMember
*/
public
function
addNormalMember
(
$normalMember
)
{
$account
=
static
::
$instance
->
all
();
...
...
@@ -55,6 +65,14 @@ class Account extends Collection
static
::
$instance
->
make
(
$account
);
}
/**
* 获取联系人名称
*
* @param string $id
* @param string $type 群或者联系人
* @param bool $prefer 返回最佳名称或名称数组
* @return array|null
*/
public
function
getContactName
(
$id
,
$type
,
$prefer
=
false
)
{
$target
=
static
::
$instance
->
get
(
$type
);
...
...
@@ -75,7 +93,21 @@ class Account extends Collection
return
null
;
}
return
$prefer
?
array_values
(
$name
)[
0
]
:
$name
;
return
$prefer
?
current
(
$name
)
:
$name
;
}
/**
* 获取联系人
*
* @param $id
* @param string $type 类型
* @return array
*/
public
function
getContact
(
$id
,
$type
)
{
$target
=
static
::
$instance
->
get
(
$type
);
return
$target
[
$id
]
??
null
;
}
}
\ No newline at end of file
src/Core/MessageHandler.php
View file @
4fb2b79
...
...
@@ -91,7 +91,7 @@ class MessageHandler
$message
=
$this
->
sync
();
foreach
(
$message
[
'AddMsgList'
]
as
$msg
)
{
Log
::
echo
((
new
Message
)
->
make
(
$selector
,
$msg
)
->
content
->
msg
);
}
Log
::
echo
(
json_encode
(
$message
));
...
...
src/Core/Server.php
View file @
4fb2b79
...
...
@@ -11,8 +11,8 @@ namespace Hanson\Robot\Core;
use
Endroid\QrCode\QrCode
;
use
GuzzleHttp\Client
;
use
Hanson\Robot\
Model
s\ContactFactory
;
use
Hanson\Robot\
Model
s\GroupAccount
;
use
Hanson\Robot\
Collection
s\ContactFactory
;
use
Hanson\Robot\
Collection
s\GroupAccount
;
use
Hanson\Robot\Support\Log
;
use
QueryPath\Exception
;
use
Symfony\Component\DomCrawler\Crawler
;
...
...
@@ -220,6 +220,7 @@ class Server
static
::
$myAccount
=
$result
[
'User'
];
if
(
$result
[
'BaseResponse'
][
'Ret'
]
!=
0
){
file_put_contents
(
$this
->
config
[
'tmp'
]
.
'debug.json'
,
$content
);
throw
new
Exception
(
'[ERROR] init fail!'
);
}
}
...
...
src/Message/Location.php
View file @
4fb2b79
...
...
@@ -12,4 +12,15 @@ namespace Hanson\Robot\Message;
class
Location
{
public
static
function
isLocation
(
$content
)
{
return
str_contains
(
'webwxgetpubliclinkimg'
,
$content
);
}
public
static
function
getLocationText
(
$content
)
{
$result
=
explode
(
'<br/>'
,
$content
);
return
current
(
array_slice
(
$result
,
-
2
,
1
));
}
}
\ No newline at end of file
src/Message/Message.php
View file @
4fb2b79
...
...
@@ -10,21 +10,26 @@ namespace Hanson\Robot\Message;
use
Hanson\Robot\Core\Server
;
use
Hanson\Robot\Models\Account
;
use
Hanson\Robot\Models\ContactAccount
;
use
Hanson\Robot\Models\OfficialAccount
;
use
Hanson\Robot\Models\SpecialAccount
;
use
Hanson\Robot\Collections\Account
;
use
Hanson\Robot\Collections\ContactAccount
;
use
Hanson\Robot\Collections\OfficialAccount
;
use
Hanson\Robot\Collections\SpecialAccount
;
use
Hanson\Robot\Models\Content
;
use
Hanson\Robot\Models\Sender
;
class
Message
{
/**
* @
* @
var Sender
*/
public
$
sender
;
public
$
from
;
public
$
receiver
;
public
$
to
;
/**
* @var Content
*/
public
$content
;
public
$time
;
...
...
@@ -55,70 +60,121 @@ class Message
$this
->
rawMsg
=
$msg
;
if
(
$msg
[
'MsgType'
]
==
51
)
{
$this
->
sender
->
name
=
'system'
;
$this
->
sender
->
type
=
0
;
}
elseif
(
$msg
[
'MsgType'
]
==
37
)
{
$this
->
sender
->
type
=
37
;
}
elseif
(
Server
::
isMyself
(
$msg
[
'FromUserName'
]))
{
$this
->
sender
->
name
=
'self'
;
$this
->
sender
->
type
=
1
;
}
elseif
(
$msg
[
'ToUserName'
]
===
'filehelper'
)
{
$this
->
sender
->
name
=
'file_helper'
;
$this
->
sender
->
type
=
2
;
}
elseif
(
substr
(
$msg
[
'FromUserName'
],
0
,
2
)
===
'@@'
)
{
$this
->
sender
->
name
=
Account
::
getInstance
()
->
getContactName
(
$msg
[
'FromUserName'
],
Account
::
NORMAL_MEMBER
,
true
);
$this
->
sender
->
type
=
3
;
}
elseif
(
ContactAccount
::
getInstance
()
->
isContact
(
$msg
[
'FromUserName'
]))
{
$this
->
sender
->
name
=
Account
::
getInstance
()
->
getContactName
(
$msg
[
'FromUserName'
],
Account
::
NORMAL_MEMBER
,
true
);
$this
->
sender
->
type
=
4
;
}
elseif
(
OfficialAccount
::
getInstance
()
->
isPublic
(
$msg
[
'FromUserName'
]))
{
$this
->
sender
->
name
=
Account
::
getInstance
()
->
getContactName
(
$msg
[
'FromUserName'
],
Account
::
NORMAL_MEMBER
,
true
);
$this
->
sender
->
type
=
5
;
}
elseif
(
SpecialAccount
::
getInstance
()
->
get
(
$msg
[
'FromUserName'
],
false
))
{
$this
->
sender
->
name
=
Account
::
getInstance
()
->
getContactName
(
$msg
[
'FromUserName'
],
Account
::
NORMAL_MEMBER
,
true
);
$this
->
sender
->
type
=
6
;
}
else
{
$this
->
sender
->
name
=
'unknown'
;
$this
->
sender
->
type
=
99
;
}
// $this->sender = new Sender();
// $this->content = new Content();
$this
->
sender
->
name
=
html_entity_decode
(
$this
->
sender
->
name
);
$this
->
setSender
();
$this
->
setContent
();
return
$this
;
}
/**
* 设置消息发送者
*/
private
function
setSender
()
{
$account
=
Account
::
getInstance
();
$from
=
$this
->
rawMsg
[
'FromUserName'
];
$fromType
=
substr
(
$this
->
rawMsg
[
'FromUserName'
],
0
,
2
)
===
'@@'
?
Account
::
GROUP_MEMBER
:
Account
::
NORMAL_MEMBER
;
$this
->
from
=
$account
->
getContact
(
$from
,
$fromType
);
// if ($this->rawMsg['MsgType'] == 51) {
// $this->sender->name = 'system';
// $this->sender->type = 'System';
// } elseif ($this->rawMsg['MsgType'] == 37) {
// $this->sender->type = 'FriendRequest';
// } elseif (Server::isMyself($this->rawMsg['FromUserName'])) {
// $this->sender->name = 'self';
// $this->sender->type = 'Self';
// } elseif ($this->rawMsg['ToUserName'] === 'filehelper') {
// $this->sender->name = 'file_helper';
// $this->sender->type = 'FileHelper';
// } elseif (substr($this->rawMsg['FromUserName'], 0, 2) === '@@') { # group
// $this->sender->name = $account->getContactName($this->rawMsg['FromUserName'], Account::GROUP_MEMBER, true);
// $this->sender->type = 'Group';
// $this->sender->group = $account->getContact($this->rawMsg['FromUserName'], Account::GROUP_MEMBER);
// } elseif (ContactAccount::getInstance()->isContact($this->rawMsg['FromUserName'])) {
// $this->sender->name = $account->getContactName($this->rawMsg['FromUserName'], Account::NORMAL_MEMBER, true);
// $this->sender->type = 'Contact';
// } elseif (OfficialAccount::getInstance()->isPublic($this->rawMsg['FromUserName'])) {
// $this->sender->name = $account->getContactName($this->rawMsg['FromUserName'], Account::NORMAL_MEMBER, true);
// $this->sender->type = 'Public';
// } elseif (SpecialAccount::getInstance()->get($this->rawMsg['FromUserName'], false)) {
// $this->sender->name = $account->getContactName($this->rawMsg['FromUserName'], Account::NORMAL_MEMBER, true);
// $this->sender->type = 'Special';
// } else {
// $this->sender->name = 'unknown';
// $this->sender->type = 'Unknown';
// }
//
// if($this->sender->type !== 'Group'){
// $this->sender->from = $account->getContact($this->rawMsg['FromUserName'], Account::NORMAL_MEMBER);
// }
//
// $this->sender->name = html_entity_decode($this->sender->name);
}
private
function
setContent
()
{
$this
->
handleContent
();
}
private
function
handleContent
()
{
// $msgType = $msg['MsgType'];
$
content
=
html_entity_decode
(
$this
->
rawMsg
[
'Content'
]);
$
this
->
rawMsg
[
'Content'
]
=
html_entity_decode
(
$this
->
rawMsg
[
'Content'
]);
// $msgId = $msg['MsgId'];
$this
->
handleContentByType
(
$content
);
$this
->
handleContentByType
();
$this
->
handleMessageByType
();
}
private
function
handleContentByType
(
$content
)
/**
* 根据消息来源处理消息
*/
private
function
handleContentByType
()
{
if
(
$this
->
sender
->
type
===
0
){
$this
->
type
=
'Empty'
;
}
elseif
(
$this
->
sender
->
type
===
2
){
$this
->
type
=
'Text'
;
$this
->
content
=
$this
->
formatContent
(
$content
);
}
elseif
(
$this
->
sender
->
type
===
3
){
$this
->
handleGroupContent
(
$
content
);
if
(
$this
->
sender
->
type
===
'System'
){
$this
->
content
->
type
=
'Empty'
;
}
elseif
(
$this
->
sender
->
type
===
'FileHelper'
){
# File Helper
$this
->
content
->
type
=
'Text'
;
$this
->
content
->
msg
=
$this
->
formatContent
(
$this
->
rawMsg
[
'Content'
]
);
}
elseif
(
$this
->
sender
->
type
===
'Group'
){
# group
$this
->
handleGroupContent
(
$
this
->
rawMsg
[
'Content'
]
);
}
}
/**
* 处理消息类型
*/
private
function
handleMessageByType
()
{
if
(
$this
->
rawMsg
[
'MsgType'
]
==
1
){
if
(
Location
::
isLocation
(
$this
->
rawMsg
[
'Content'
])){
$this
->
setLocationMessage
();
}
else
{
}
}
}
/**
* 设置当前message 为 location
*/
private
function
setLocationMessage
()
{
$this
->
type
=
'Location'
;
$this
->
url
=
$this
->
rawMsg
[
'Url'
];
$this
->
content
->
msg
=
Location
::
getLocationText
(
$this
->
rawMsg
[
'Content'
]);
}
/**
* handle group content
*
* @param $content
...
...
@@ -128,7 +184,7 @@ class Message
list
(
$uid
,
$content
)
=
explode
(
'<br/>'
,
$content
,
2
);
$this
->
sender
->
user
=
Account
::
getInstance
()
->
get
(
'normalMember'
)[
substr
(
$uid
,
0
,
-
1
)];
$this
->
content
=
$this
->
formatContent
(
$content
);
$this
->
content
->
msg
=
$this
->
formatContent
(
$content
);
}
private
function
formatContent
(
$content
)
...
...
src/Message/Text.php
View file @
4fb2b79
...
...
@@ -12,4 +12,8 @@ namespace Hanson\Robot\Message;
class
Text
{
public
static
function
make
(
$msg
)
{
}
}
\ No newline at end of file
src/Models/Content.php
View file @
4fb2b79
...
...
@@ -12,4 +12,9 @@ namespace Hanson\Robot\Models;
class
Content
{
public
$type
;
public
$msg
;
public
$raw
;
}
\ No newline at end of file
src/Models/Origin.php
View file @
4fb2b79
...
...
@@ -12,4 +12,13 @@ namespace Hanson\Robot\Models;
class
Origin
{
public
$type
;
public
$id
;
const
GROUP
=
'Group'
;
const
CONTACT
=
'Contact'
;
}
\ No newline at end of file
src/Models/Sender.php
View file @
4fb2b79
...
...
@@ -12,4 +12,19 @@ namespace Hanson\Robot\Models;
class
Sender
{
/**
* @var String 消息来源名称
*/
public
$name
;
public
$type
;
public
$from
;
public
$to
;
/**
* @var array 显示的聊天窗口
*/
public
$contact
;
}
\ No newline at end of file
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment