diff --git a/site-root/discourse-webhook.php b/site-root/discourse-webhook.php new file mode 100644 index 00000000..d2b09282 --- /dev/null +++ b/site-root/discourse-webhook.php @@ -0,0 +1,74 @@ + $post, + '$topic' => $topic, + '$user' => $user +], true)); + + +// skip empty events that seem to get fired when topics get edited: +if (empty($topic['title'])) { + die('Ignoring request, no topic title'); +} + + +// skip private messages +if ($topic['archetype'] == 'private_message') { + die('Ignoring request, private message'); +} + + +// compose message for Slack +$messageText = "New topic on $discourseHost"; + +#// This doesn't work because the category is a number... we'll need to map them on our own to category names or slack rooms +#if (!empty($topic['category'])) { +# $messageText .= " in $topic[category]"; +#} + +$messageText .= ": "; +$messageText .= "\n\n> " . str_replace("\n", "\n> ", $post['raw']); + +#// post full event payload to Slack +#$messageText .= "\n\n\n" . json_encode(['post' => $post, 'topic' => $topic, 'user' => $user], JSON_PRETTY_PRINT); + + +// post to slack +$response = Emergence\Slack\API::request('chat.postMessage', [ + 'post' => [ + 'channel' => Emergence\Slack\API::getChannelId('general'), + 'username' => "$user[username]@$discourseHost", + 'icon_url' => str_replace('{size}', 100, "http://$discourseHost/$user[avatar_template]"), + 'text' => $messageText, + ] +]); + + +// write slack response to output +print_r($response);