_getValidUrl($config['webhook_url'] ?? ''); if (empty($webhook_url)) { $this->logger->error('Webhook '.$this->_getName().' is missing necessary configuration. Skipping...'); return; } $raw_vars = [ 'content' => $config['content'] ?? '', 'title' => $config['title'] ?? '', 'description' => $config['description'] ?? '', 'url' => $config['url'] ?? '', 'author' => $config['author'] ?? '', 'thumbnail' => $config['thumbnail'] ?? '', 'footer' => $config['footer'] ?? '', ]; $vars = $this->_replaceVariables($raw_vars, $event->getNowPlaying()); // Compose webhook $embed = [ 'title' => $vars['title'] ?? '', 'description' => $vars['description'] ?? '', 'url' => $this->_getValidUrl($vars['url']) ?? '', 'color' => 2201331, // #2196f3 ]; $embed = array_filter($embed); if (!empty($vars['author'])) { $embed['author'] = [ 'name' => $vars['author'], ]; } if (!empty($vars['thumbnail']) && $this->_getValidUrl($vars['thumbnail'])) { $embed['thumbnail'] = [ 'url' => $this->_getValidUrl($vars['thumbnail']), ]; } if (!empty($vars['footer'])) { $embed['footer'] = [ 'text' => $vars['footer'], ]; } $webhook_body = []; $webhook_body['content'] = $vars['content'] ?? ''; // Don't include an embed if all relevant fields are empty. if (count($embed) > 1) { $webhook_body['embeds'] = [$embed]; } // Dispatch webhook $this->logger->debug('Dispatching Discord webhook...'); try { $response = $this->http_client->request('POST', $webhook_url, [ 'headers' => [ 'Content-Type' => 'application/json', ], 'json' => $webhook_body, ]); $this->logger->addRecord( ($response->getStatusCode() !== 204 ? Logger::ERROR : Logger::DEBUG), sprintf('Webhook %s returned code %d', $this->_getName(), $response->getStatusCode()), ['message_sent' => $webhook_body, 'response_body' => $response->getBody()->getContents()] ); } catch(TransferException $e) { $this->logger->error(sprintf('Error from Discord (%d): %s', $e->getCode(), $e->getMessage())); } } }