function obtain(\CharlotteDunois\Livia\Commands\Context $context, $provided = array(), $promptLimit = null) {
        if($promptLimit === null) {
            $promptLimit = $this->promptLimit;
        }
    
        $this->client->dispatcher->setAwaiting($context);
        
        $values = array();
        $results = array();
        
        try {
            $promise = $this->obtainNext($context, $provided, $promptLimit, $values, $results, 0)->then(function ($result = null) use ($context, &$values, &$results) {
                $this->client->dispatcher->unsetAwaiting($context);
                
                if($result !== null) {
                    return $result;
                }
                
                return array(
                    'values' => $values,
                    'cancelled' => null,
                    'prompts' => \array_merge(array(), ...\array_map(function (\CharlotteDunois\Livia\Arguments\ArgumentBag $res) {
                        return $res->prompts;
                    }, $results)),
                    'answers' => \array_merge(array(), ...\array_map(function (\CharlotteDunois\Livia\Arguments\ArgumentBag $res) {
                        return $res->answers;
                    }, $results))
                );
            }, function ($error) use ($context) {
                $this->client->dispatcher->unsetAwaiting($context);
                
                throw $error;
            });
            
            $this->client->dispatcher->setAwaiting($context, $promise);
            return $promise;
        } catch (\Throwable $error) {
            $this->client->dispatcher->unsetAwaiting($context);
            
            throw $error;
        }
    }
function obtain(\CharlotteDunois\Livia\Commands\Context $context, $provided = array(), $promptLimit = null) {
        if($promptLimit === null) {
            $promptLimit = $this->promptLimit;
        }
    
        $this->client->dispatcher->setAwaiting($context);
        
        $values = array();
        $results = array();
        
        try {
            $promise = $this->obtainNext($context, $provided, $promptLimit, $values, $results, 0)->then(function ($result = null) use ($context, &$values, &$results) {
                $this->client->dispatcher->unsetAwaiting($context);
                
                if($result !== null) {
                    return $result;
                }
                
                return array(
                    'values' => $values,
                    'cancelled' => null,
                    'prompts' => \array_merge(array(), ...\array_map(function (\CharlotteDunois\Livia\Arguments\ArgumentBag $res) {
                        return $res->prompts;
                    }, $results)),
                    'answers' => \array_merge(array(), ...\array_map(function (\CharlotteDunois\Livia\Arguments\ArgumentBag $res) {
                        return $res->answers;
                    }, $results))
                );
            }, function ($error) use ($context) {
                $this->client->dispatcher->unsetAwaiting($context);
                
                throw $error;
            });
            
            $this->client->dispatcher->setAwaiting($context, $promise);
            return $promise;
        } catch (\Throwable $error) {
            $this->client->dispatcher->unsetAwaiting($context);
            
            throw $error;
        }
    }
function obtain ( \ CharlotteDunois \ Livia \ Commands \ Context $ context , $ provided = array ( ) , $ promptLimit = null ) { if ( $ promptLimit === null ) { $ promptLimit = $ this -> promptLimit ; } $ this -> client -> dispatcher -> setAwaiting ( $ context ) ; $ values = array ( ) ; $ results = array ( ) ; try { $ promise = $ this -> obtainNext ( $ context , $ provided , $ promptLimit , $ values , $ results , 0 ) -> then ( function ( $ result = null ) use ( $ context , & $ values , & $ results ) { $ this -> client -> dispatcher -> unsetAwaiting ( $ context ) ; if ( $ result !== null ) { return $ result ; } return array ( 'values' => $ values , 'cancelled' => null , 'prompts' => \ array_merge ( array ( ) , ... \ array_map ( function ( \ CharlotteDunois \ Livia \ Arguments \ ArgumentBag $ res ) { return $ res -> prompts ; } , $ results ) ) , 'answers' => \ array_merge ( array ( ) , ... \ array_map ( function ( \ CharlotteDunois \ Livia \ Arguments \ ArgumentBag $ res ) { return $ res -> answers ; } , $ results ) ) ) ; } , function ( $ error ) use ( $ context ) { $ this -> client -> dispatcher -> unsetAwaiting ( $ context ) ; throw $ error ; } ) ; $ this -> client -> dispatcher -> setAwaiting ( $ context , $ promise ) ; return $ promise ; } catch ( \ Throwable $ error ) { $ this -> client -> dispatcher -> unsetAwaiting ( $ context ) ; throw $ error ; } }
Obtains values for the arguments, prompting if necessary.
@param \CharlotteDunois\Livia\Commands\Context  $message
@param array                                    $provided
@param int|float                                $promptLimit
@return \React\Promise\ExtendedPromiseInterface
Obtains values for the arguments prompting if necessary .