Exemplo n.º 1
0
 protected function request($url, $cache_ttl = false, $cache_ext = '', $format = 'json')
 {
     $restapi = new RestApi();
     $restapi->setFormat($format);
     if ($cache_ttl && $this->cacheEnabled()) {
         $restapi->setCache($cache_ttl, $this->config['cache_directory'], $cache_ext);
     } else {
         $restapi->setCacheLife(0);
     }
     return $restapi->request($url, array('headers' => array('User-Agent: jarvis')));
 }
Exemplo n.º 2
0
 public function connect()
 {
     $restapi = new RestApi();
     $result = $restapi->request('https://slack.com/api/rtm.start', array('get' => array('token' => $this->oauth_token)));
     if (is_object($result) && !empty($result->url)) {
         $loop = \React\EventLoop\Factory::create();
         $logger = new \Zend\Log\Logger();
         if ($this->debug) {
             $writer = new \Zend\Log\Writer\Stream("php://output");
         } else {
             $writer = new \Zend\Log\Writer\Noop();
         }
         $logger->addWriter($writer);
         $this->client = $client = new \Devristo\Phpws\Client\WebSocket($result->url, $loop, $logger);
         $client->on("connect", function () use($logger, $client) {
             $logger->notice("Connected");
         });
         $client->on("message", function ($message) use($client, $logger) {
             $event = json_decode($message->getData());
             if (!is_object($event)) {
                 $logger->warning("Invalid JSON");
                 return;
             }
             $logger->notice("Received message:\n" . print_r($event, true));
             if (isset($event->type) && $event->type == 'message' && empty($event->subtype)) {
                 $user = $event->user;
                 // TODO: get username
                 $channel = $event->channel;
                 $message = $event->text;
                 $message = preg_replace('/<(http[^\\|]+)\\|[^>]+>/', '$1', $message);
                 $message = preg_replace('/<(http[^\\>]+)>/', '$1', $message);
                 $communication = array('user_name' => $user, 'text' => $message, 'bot_type' => 'slack');
                 if ($response = $this->respond($communication)) {
                     $responseEvent = array('id' => $this->id, 'type' => 'message', 'channel' => $channel, 'text' => $response);
                     $logger->notice("Sending message:\n" . print_r($responseEvent, true));
                     $client->send(json_encode($responseEvent));
                 }
             }
         });
         $loop->addPeriodicTimer(5, function () use($client, $logger) {
             $id = ++$this->id;
             $logger->info('Sending ping');
             $event = array('id' => $id, 'type' => 'ping');
             $client->send(json_encode($event));
         });
         $client->open();
         $loop->run();
     }
 }
Exemplo n.º 3
0
if ($jarvis_config['enabled_adapters'] != 'all' && !in_array('slack', $jarvis_config['enabled_adapters'])) {
    exit("Slack adapter is disabled");
}
if (!isset($jarvis_config['slack_client_id']) || !isset($jarvis_config['slack_client_secret'])) {
    exit("Slack client id and/or secret are not defined in configuration\n");
}
if (isset($jarvis_config['slack_oauth_token'])) {
    exit("Slack authentication has already been completed\n");
}
$path = preg_replace('/\\?.*$/', '', $_SERVER['REQUEST_URI']);
$redirect_uri = 'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . $path;
if (empty($_GET['code'])) {
    $state = 'start';
} else {
    $state = 'callback';
    $restapi = new RestApi();
    $result = $restapi->request('https://slack.com/api/oauth.access', array('post' => array('client_id' => $jarvis_config['slack_client_id'], 'client_secret' => $jarvis_config['slack_client_secret'], 'code' => $_GET['code'], 'redirect_uri' => $redirect_uri)));
}
?>
<html>
<body>
    <?php 
if ($state == 'start') {
    ?>
    <p>
        <a href="https://slack.com/oauth/authorize?client_id=<?php 
    echo $jarvis_config['slack_client_id'];
    ?>
&amp;redirect_uri=<?php 
    echo urlencode($redirect_uri);
    ?>