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 cb5f6d4d
authored
Jan 20, 2017
by
zhuanxuhit
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
修复了无法找到联系人姓名的bug同时直接在控制台输出二维码方便登陆
1 parent
5d6fbba5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
102 additions
and
6 deletions
composer.json
composer.lock
example/custom.php
src/Collections/Contact.php
src/Core/Server.php
composer.json
View file @
cb5f6d4
...
...
@@ -17,7 +17,9 @@
"illuminate/support"
:
"^5.3"
,
"nesbot/carbon"
:
"^1.21"
,
"php"
:
">=7.0.0"
,
"symfony/var-dumper"
:
"^3.2"
"symfony/var-dumper"
:
"^3.2"
,
"aferrandini/phpqrcode"
:
"^1.0"
,
"symfony/process"
:
"^3.2"
},
"minimum-stability"
:
"dev"
,
"autoload"
:
{
...
...
composer.lock
View file @
cb5f6d4
This diff is collapsed.
Click to expand it.
example/custom.php
View file @
cb5f6d4
...
...
@@ -18,9 +18,11 @@ $robot = new Vbot([
$flag
=
false
;
$robot
->
server
->
setCustomerHandler
(
function
()
use
(
&
$flag
){
$contact
=
contact
()
->
getUsernameById
(
'matts8023'
);
// RemarkName,代表的改用户在你通讯录的名字
$contact
=
contact
()
->
getUsernameByNickRemarkName
(
'hanson'
);
if
(
$contact
===
false
){
dd
(
"找不到你要的联系人,请确认联系人姓名"
);
}
if
(
!
$flag
){
Text
::
send
(
$contact
,
'来轰炸吧'
);
$flag
=
true
;
...
...
src/Collections/Contact.php
View file @
cb5f6d4
...
...
@@ -62,5 +62,20 @@ class Contact extends Collection
}
});
}
/**
* 根据通讯录中的名字获取通讯对象
*
* @param $id
* @return mixed
*/
public
function
getUsernameByNickRemarkName
(
$id
)
{
return
$this
->
search
(
function
(
$item
,
$key
)
use
(
$id
){
if
(
$item
[
'RemarkName'
]
===
$id
){
return
true
;
}
});
}
}
\ No newline at end of file
src/Core/Server.php
View file @
cb5f6d4
...
...
@@ -15,7 +15,14 @@ use Hanson\Vbot\Collections\Account;
use
Hanson\Vbot\Collections\ContactFactory
;
use
Hanson\Vbot\Collections\Group
;
use
Hanson\Vbot\Support\Console
;
use
PHPQRCode\QRencode
;
use
Symfony\Component\Console\Formatter\OutputFormatterStyle
;
use
Symfony\Component\Console\Output\ConsoleOutput
;
use
Symfony\Component\Console\Output\OutputInterface
;
use
Symfony\Component\DomCrawler\Crawler
;
use
PHPQRCode\QRcode
as
CQRcode
;
use
Symfony\Component\Process\Exception\ProcessFailedException
;
use
Symfony\Component\Process\ProcessBuilder
;
class
Server
{
...
...
@@ -96,7 +103,8 @@ class Server
public
function
prepare
()
{
$this
->
getUuid
();
$this
->
generateQrCode
();
// $this->generateQrCode();
$this
->
generateConsoleQrCode
();
Console
::
log
(
'[INFO] 请扫描二维码登录'
);
$this
->
waitForLogin
();
...
...
@@ -150,6 +158,75 @@ class Server
}
}
private
function
initStyle
(
OutputInterface
$output
)
{
$style
=
new
OutputFormatterStyle
(
'black'
,
'black'
);
$output
->
getFormatter
()
->
setStyle
(
'blackc'
,
$style
);
$style
=
new
OutputFormatterStyle
(
'white'
,
'white'
);
$output
->
getFormatter
()
->
setStyle
(
'whitec'
,
$style
);
}
/**
*
*/
public
function
generateConsoleQrCode
()
{
$text
=
'https://login.weixin.qq.com/l/'
.
$this
->
uuid
;
$output
=
new
ConsoleOutput
();
$this
->
initStyle
(
$output
);
$map
=
array
(
0
=>
'<whitec> </whitec>'
,
1
=>
'<blackc> </blackc>'
,
);
$lrPadding
=
1
;
$tbPadding
=
0
;
$text
=
CQRcode
::
text
(
$text
);
$length
=
strlen
(
$text
[
0
]);
$screenSize
=
$this
->
getTTYSize
();
if
(
!
$screenSize
)
{
$output
->
getErrorOutput
()
->
writeln
(
'<comment>Get Screen Size Failed</comment>'
);
}
else
{
list
(
$maxLines
,
$maxCols
)
=
$screenSize
;
$qrCols
=
2
*
(
$length
+
$lrPadding
*
2
);
$qrLines
=
count
(
$text
)
+
$tbPadding
*
2
;
if
(
$qrCols
>
$maxCols
||
$qrLines
>
$maxLines
){
$output
->
getErrorOutput
()
->
writeln
(
'<error>Max Lines/Columns Reached:请缩小控制台字体大小</error>'
);
return
;
}
}
$paddingLine
=
str_repeat
(
$map
[
0
],
$length
+
$lrPadding
*
2
)
.
"
\n
"
;
$after
=
$before
=
str_repeat
(
$paddingLine
,
$tbPadding
);
$output
->
write
(
$before
);
foreach
(
$text
as
$line
)
{
$output
->
write
(
str_repeat
(
$map
[
0
],
$lrPadding
));
for
(
$i
=
0
;
$i
<
$length
;
$i
++
)
{
$type
=
substr
(
$line
,
$i
,
1
);
$output
->
write
(
$map
[
$type
]);
}
$output
->
writeln
(
str_repeat
(
$map
[
0
],
$lrPadding
));
}
$output
->
write
(
$after
);
}
private
function
getTTYSize
()
{
if
(
!
posix_isatty
(
STDOUT
)){
return
false
;
}
$ttyName
=
posix_ttyname
(
STDOUT
);
$builder
=
new
ProcessBuilder
();
$process
=
$builder
->
setPrefix
(
'stty'
)
->
setArguments
(
array
(
'-f'
,
$ttyName
,
'size'
))
->
getProcess
();
try
{
$process
->
mustRun
();
}
catch
(
ProcessFailedException
$e
)
{
return
false
;
}
$output
=
$process
->
getOutput
();
if
(
!
preg_match
(
'~^(\d+)\s+(\d+)$~'
,
$output
,
$match
))
{
return
false
;
}
return
array
(
$match
[
1
],
$match
[
2
]);
}
/**
* waiting user to login
*
...
...
@@ -253,7 +330,7 @@ class Server
$content
=
http
()
->
json
(
$url
,
[
'BaseRequest'
=>
$this
->
baseRequest
]);
$result
=
json_decode
(
$content
,
true
);
$this
->
generateSyncKey
(
$result
,
$first
);
...
...
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