. * * @author Daniil Gentili * @copyright 2016-2023 Daniil Gentili * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 * @link https://docs.madelineproto.xyz MadelineProto documentation */ namespace danog\MadelineProto; use const DIRECTORY_SEPARATOR; use const HAD_MADELINE_PHAR; /** * Snitch. * * @internal */ final class Snitch { /** * Maximum starts without a phar file. */ public const MAX_NO_PHAR_STARTS = 3; /** * Whether madeline.phar was downloaded from scratch. */ private array $hadInstalled = []; /** * Called before serialization. */ public function __sleep(): array { return ['hadInstalled']; } /** * Wakeup function. */ public function __wakeup(): void { if (\defined('HAD_MADELINE_PHAR')) { $this->hadInstalled []= HAD_MADELINE_PHAR; if (\count($this->hadInstalled) > self::MAX_NO_PHAR_STARTS) { array_shift($this->hadInstalled); if (!array_sum($this->hadInstalled)) { // For three times, MadelineProto was started with no phar file $this->die(); } } } } /** * Die. */ private function die(): void { //Shutdown::removeCallback('restarter'); $message = Lang::$current_lang["do_not_remove_MadelineProto.log_phar"]; Logger::log($message, Logger::FATAL_ERROR); file_put_contents(Magic::$cwd.DIRECTORY_SEPARATOR.'DO_NOT_REMOVE_MADELINEPROTO_LOG_SESSION_'.random_int(PHP_INT_MIN, PHP_INT_MAX), $message); //die("$message\n"); } }