autoPrefixManagers)) { $this->autoPrefixManagers = new AutoPrefixManagersList(); } return $this->autoPrefixManagers; } /** * Apply the auto prefix managers on a command (until one of them manage it) * * @param Command $command The command * * @return Command The command */ public function applyAutoPrefixOnCommand (Command $command): Command { /** @var IAutoPrefixManager $autoPrefixManager */ foreach ($this->getAutoPrefixManagers() as $autoPrefixManager) { if (($namesPrefix = $autoPrefixManager->getCommandPrefix($command)) !== null) { if (mb_strlen($namesPrefix) > 0) { $namesPrefix .= ':'; } if (self::getNamePrefix($command->getName()) !== $namesPrefix) { $command->setName($namesPrefix . $command->getName()); } $aliases = $command->getAliases(); foreach ($aliases as &$alias) { if (self::getNamePrefix($alias) !== $namesPrefix) { $alias = $namesPrefix . $alias; } } $command->setAliases($aliases); break; } } return $command; } /** * Get the prefix from a command name or alias * * @param string $name The command name or alias * * @return string The prefix (empty if none) */ private static function getNamePrefix (string $name): string { $lastPos = mb_strrpos($name, ':'); if ($lastPos === false) { return ''; } $prefix = mb_substr($name, 0, $lastPos); if (mb_strlen($prefix) > 0) { $prefix .= ':'; } return $prefix; } }