Skip to content

Instantly share code, notes, and snippets.

@themightychris
Forked from anonymous/discourse-webhook.php
Last active August 29, 2015 14:26
Show Gist options
  • Save themightychris/25f14fddaffbdd67ebfe to your computer and use it in GitHub Desktop.
Save themightychris/25f14fddaffbdd67ebfe to your computer and use it in GitHub Desktop.
<?php
// settings
$slackHook = 'YOUR_SLACK-ISSUED_WEBHOOK_URL_HERE';
$discourseHost = 'YOUR_DISCOURSE_HOSTNAME';
// decode webhook payload
list($post, $topic, $user) = json_decode(file_get_contents('php://input'), true);
// 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 .= ": <http://$discourseHost/t/$post[topic_id]|$topic[title]>";
$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);
// confugre cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $slackHook);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'payload' => json_encode([
'username' => "$user[username]@$discourseHost",
'icon_url' => str_replace('{size}', 100, "http://$discourseHost/$user[avatar_template]"),
'text' => $messageText
])
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// execute request
$response = curl_exec($ch);
curl_close($ch);
// write slack response to output
die($response);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment