Commit 992b2a82 by zhuanxuhit

将产生QRCode的代码放入Console中

1 parent cb5f6d4d
...@@ -19,7 +19,7 @@ $flag = false; ...@@ -19,7 +19,7 @@ $flag = false;
$robot->server->setCustomerHandler(function() use (&$flag){ $robot->server->setCustomerHandler(function() use (&$flag){
// RemarkName,代表的改用户在你通讯录的名字 // RemarkName,代表的改用户在你通讯录的名字
$contact = contact()->getUsernameByNickRemarkName('hanson'); $contact = contact()->getUsernameByRemarkName( 'hanson');
if ($contact === false){ if ($contact === false){
dd("找不到你要的联系人,请确认联系人姓名"); dd("找不到你要的联系人,请确认联系人姓名");
} }
......
...@@ -68,7 +68,7 @@ class Contact extends Collection ...@@ -68,7 +68,7 @@ class Contact extends Collection
* @param $id * @param $id
* @return mixed * @return mixed
*/ */
public function getUsernameByNickRemarkName($id) public function getUsernameByRemarkName( $id)
{ {
return $this->search(function($item, $key) use ($id){ return $this->search(function($item, $key) use ($id){
if($item['RemarkName'] === $id){ if($item['RemarkName'] === $id){
......
...@@ -10,19 +10,9 @@ namespace Hanson\Vbot\Core; ...@@ -10,19 +10,9 @@ namespace Hanson\Vbot\Core;
use Endroid\QrCode\QrCode; use Endroid\QrCode\QrCode;
use GuzzleHttp\Client;
use Hanson\Vbot\Collections\Account;
use Hanson\Vbot\Collections\ContactFactory; use Hanson\Vbot\Collections\ContactFactory;
use Hanson\Vbot\Collections\Group; use Hanson\Vbot\Collections\Group;
use Hanson\Vbot\Support\Console; 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 class Server
{ {
...@@ -103,8 +93,8 @@ class Server ...@@ -103,8 +93,8 @@ class Server
public function prepare() public function prepare()
{ {
$this->getUuid(); $this->getUuid();
// $this->generateQrCode(); $this->generateQrCode();
$this->generateConsoleQrCode(); Console::showQrCode('https://login.weixin.qq.com/l/' . $this->uuid);
Console::log('[INFO] 请扫描二维码登录'); Console::log('[INFO] 请扫描二维码登录');
$this->waitForLogin(); $this->waitForLogin();
...@@ -158,75 +148,6 @@ class Server ...@@ -158,75 +148,6 @@ 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 * waiting user to login
* *
......
...@@ -9,6 +9,13 @@ ...@@ -9,6 +9,13 @@
namespace Hanson\Vbot\Support; namespace Hanson\Vbot\Support;
use PHPQRCode\QRcode;
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\ProcessBuilder;
class Console class Console
{ {
...@@ -17,4 +24,69 @@ class Console ...@@ -17,4 +24,69 @@ class Console
echo $str . PHP_EOL; echo $str . PHP_EOL;
} }
private static function initStyle(OutputInterface $output) {
$style = new OutputFormatterStyle('black', 'black');
$output->getFormatter()->setStyle('blackc', $style);
$style = new OutputFormatterStyle('white', 'white');
$output->getFormatter()->setStyle('whitec', $style);
}
private static 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]);
}
public static function showQrCode($text)
{
$output = new ConsoleOutput();
static::initStyle($output);
$map = array(
0 => '<whitec> </whitec>',
1 => '<blackc> </blackc>',
);
$lrPadding = 1;
$tbPadding = 0;
$text = QRcode::text($text);
$length = strlen($text[0]);
$screenSize = static::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);
}
} }
\ No newline at end of file \ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!