. * * @author Daniil Gentili * @copyright 2016-2020 Daniil Gentili * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 * * @link https://docs.madelineproto.xyz MadelineProto documentation */ namespace danog\MadelineProto; use danog\MadelineProto\Db\DbPropertiesTrait; /** * Event handler. */ abstract class EventHandler extends InternalDoc { use DbPropertiesTrait { DbPropertiesTrait::initDb as private internalInitDb; } /** * Whether the event handler was started. */ private bool $startedInternal = false; /** * API instance. */ protected MTProto $API; /** * Internal constructor. * * @internal * * @param APIWrapper $MadelineProto MadelineProto instance * * @return void */ public function initInternal(APIWrapper $MadelineProto): void { self::link($this, $MadelineProto->getFactory()); $this->API =& $MadelineProto->getAPI(); foreach ($this->API->getMethodNamespaces() as $namespace) { $this->{$namespace} = $this->exportNamespace($namespace); } } /** * Start method handler. * * @internal * * @return \Generator */ public function startInternal(): \Generator { if ($this->startedInternal) { return; } if (isset(static::$dbProperties)) { yield from $this->internalInitDb($this->API); } if (\method_exists($this, 'onStart')) { yield $this->onStart(); } $this->startedInternal = true; } /** * Get peers where to send error reports. * * @return array|string|int */ public function getReportPeers() { return []; } /** * Get API instance. * * @return MTProto */ public function getAPI(): MTProto { return $this->API; } }