getCache()->save("link_{$message->getChat()->getId()}", $message->getText()); $telegram->getMethods()->sendMessage($message->getChat(), 'Ок, записал: ' . $message->getText()); return State::INITIAL; }; $showLink = function (Message $message, Telegram $telegram) { $link = $telegram->getCache()->fetch("link_{$message->getChat()->getId()}"); if (!$link) { $link = 'Ссылка не задана! Используй /setlink'; } $telegram->getMethods()->sendMessage($message->getChat(), $link); return State::INITIAL; }; $sendCode = function (Message $message, Telegram $telegram) use ($dozorApi) { $code = trim(substr($message->getText(), 1)); $result = false; try { $result = $dozorApi->sendCode($message->getChat(), $code); } catch (\Exception $e) { $telegram->getMethods()->sendMessage($message->getChat(), 'Ошибка сети', true); } if ($result) { $telegram->getMethods()->sendMessage($message->getChat(), $result, true); } return State::INITIAL; //Set initial state }; $getDb = function (Message $message, Telegram $telegram) { $text = trim(substr($message->getText(), 1)); $db = [ '1' => ['А', 'Я', 'A', 'Z', '000001', '. -'], '2' => ['Б', 'Ю', 'B', 'Y', '000010', '- . . .'], '3' => ['В', 'Э', 'C', 'X', '000011', '. - -'], '4' => ['Г', 'Ь', 'D', 'W', '000100', '- - .'], '5' => ['Д', 'Ы', 'E', 'V', '000101', '- . .'], '6' => ['Е', 'Ъ', 'F', 'U', '000110', '.'], '7' => ['Ё', 'Щ', 'G', 'T', '000111', '.'], '8' => ['Ж', 'Ш', 'H', 'S', '001000', '. . . -'], '9' => ['З', 'Ч', 'I', 'R', '001001', '- - . .'], '10' => ['И', 'Ц', 'J', 'Q', '001010', '. .'], '11' => ['Й', 'Х', 'K', 'P', '001011', '. - - -'], '12' => ['К', 'Ф', 'L', 'O', '001100', '- . -'], '13' => ['Л', 'У', 'M', 'N', '001101', '. - . .'], '14' => ['М', 'Т', 'N', 'M', '001110', '- -'], '15' => ['Н', 'С', 'O', 'L', '001111', '- .'], '16' => ['О', 'Р', 'P', 'K', '010000', '- - -'], '17' => ['П', 'П', 'Q', 'J', '010001', '. - - .'], '18' => ['Р', 'О', 'R', 'I', '010010', '. - .'], '19' => ['С', 'Н', 'S', 'H', '010011', '. . .'], '20' => ['Т', 'М', 'T', 'G', '010100', '-'], '21' => ['У', 'Л', 'U', 'F', '010101', '. . -'], '22' => ['Ф', 'К', 'V', 'E', '010110', '. . - .'], '23' => ['Х', 'Й', 'W', 'D', '010111', '. . . .'], '24' => ['Ц', 'И', 'X', 'C', '011000', '- . - .'], '25' => ['Ч', 'З', 'Y', 'B', '011001', '- - - .'], '26' => ['Ш', 'Ж', 'Z', 'A', '011010', '- - - -'], '27' => ['Щ', 'Ё', ' ', ' ', '011011', '- - . -'], '28' => ['Ъ', 'Е', ' ', ' ', '011100', '- - . - -'], '29' => ['Ы', 'Д', ' ', ' ', '011101', '- . - -'], '30' => ['Ь', 'Г', ' ', ' ', '011110', '- . . -'], '31' => ['Э', 'В', ' ', ' ', '011111', '. . - . .'], '32' => ['Ю', 'Б', ' ', ' ', '100000', '. . - -'], '33' => ['Я', 'А', ' ', ' ', '100001', '. - . -'], ]; $result = 'Непонятно :('; $header = ' № | А | Я | A | Z | Двоичн | Морзе ' . PHP_EOL . '____________________________________'; if ($text == '$') { $result = ''; foreach ($db as $key => $value) { if ($key < 10) { $result .= "0$key | $value[0] | $value[1] | $value[2] | $value[3] | $value[4] | $value[5]" . PHP_EOL; } else { $result .= "$key | $value[0] | $value[1] | $value[2] | $value[3] | $value[4] | $value[5]" . PHP_EOL; } } } elseif (is_numeric($text) && (isset($db[$text]))) { $value = $db[$text]; if ($text < 10) { $result = "0$text | $value[0] | $value[1] | $value[2] | $value[3] | $value[4] | $value[5]" . PHP_EOL; } else { $result = "$text | $value[0] | $value[1] | $value[2] | $value[3] | $value[4] | $value[5]" . PHP_EOL; } } else { foreach ($db as $key => $value) { if (mb_strtolower($value[0], 'utf8') == mb_strtolower($text)) { if ($key < 10) { $result = "0$key | $value[0] | $value[1] | $value[2] | $value[3] | $value[4] | $value[5]" . PHP_EOL; } else { $result = "$key | $value[0] | $value[1] | $value[2] | $value[3] | $value[4] | $value[5]" . PHP_EOL; } } if (strtolower($value[2]) == strtolower($text)) { if ($key < 10) { $result = "0$key | $value[0] | $value[1] | $value[2] | $value[3] | $value[4] | $value[5]" . PHP_EOL; } else { $result = "$key | $value[0] | $value[1] | $value[2] | $value[3] | $value[4] | $value[5]" . PHP_EOL; } } } } if ($result) { $telegram->getMethods()->sendMessage($message->getChat(), '```' . $header . PHP_EOL . $result . '```', true); } return State::INITIAL; //Set initial state }; $goBack = function (Message $message, Telegram $telegram) { return State::INITIAL; }; $pause = function (Message $message, Telegram $telegram) { return 'STATE_PAUSE'; }; return (new Script($telegram))-> state(State::INITIAL)-> //Start initial state action(new isText('/link'), $showLink)-> action(new isText('/setlink'), [ 'Пришлите ссылку с пином /cancel', 'STATE_SET_LINK' ])-> action(new isText('/pause'), [ 'Замер. /resume для возврата', 'STATE_PAUSE' ])-> action(new isMatch('/^\!.+?$/i'), $sendCode)-> action(new isMatch('/^\$.+?$/i'), $getDb)-> action(new isAnyText(), $goBack)-> end()-> state('STATE_SET_LINK')-> action(new isText('/cancel'), $goBack)-> action(new isAnyText(), $saveLink)-> end()-> state('STATE_PAUSE')-> action(new isText('/resume'), ['Я вернулся!', State::INITIAL])-> action(new isAnyText(), $pause)-> end(); } }