autoPrefixManagers; } /** * Set The lists of manager for commands auto prefix * * @param IAutoPrefixManager[] $autoPrefixManagers The lists of manager for commands auto prefix * * @return $this */ public function setAutoPrefixManagers (array $autoPrefixManagers): self { $this->autoPrefixManagers = $autoPrefixManagers; return $this; } /** * Add a manager for commands auto prefix * * @param IAutoPrefixManager $manager The manager * @param IAutoPrefixManager ...$extraManagers Extra managers to add * * @return $this */ public function addAutoPrefixManagers (IAutoPrefixManager $manager, IAutoPrefixManager ...$extraManagers): self { $this->autoPrefixManagers[] = $manager; foreach ($extraManagers as $extraNamespace) { $this->autoPrefixManagers[] = $extraNamespace; } return $this; } /** * Apply commands auto prefixes * * @return $this */ public function applyAutoPrefixes (): self { $commands = array_unique($this->all(), SORT_REGULAR); // Remove commands duplicate caused by aliases foreach ($commands as $command) { foreach ($this->getAutoPrefixManagers() as $autoPrefixManager) { if (($namesPrefix = $autoPrefixManager->getCommandPrefix($command)) !== null) { if (mb_strlen($namesPrefix) > 0) { $namesPrefix .= ':'; } $command->setName($namesPrefix . $command->getName()); $aliases = $command->getAliases(); foreach ($aliases as &$alias) { $alias = $namesPrefix . $alias; } $command->setAliases($aliases); break; } } } return $this; } }