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'))); }
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(); } }
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']; ?> &redirect_uri=<?php echo urlencode($redirect_uri); ?>