-
Notifications
You must be signed in to change notification settings - Fork 0
/
slackcast.php
70 lines (51 loc) · 1.69 KB
/
slackcast.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
require ('vendor/autoload.php');
require('slack.class.php');
require('sound.class.php');
use Goutte\Client;
$channel = $argv[1];
$outputfile = $argv[2];
if (empty($channel) || empty($outputfile))
die("Usage: slackcast.php [channel] [outputfile]\r\n");
if (empty(getenv('SLACK_API')) || empty(getenv('SLACK_USER'))) {
die("Please set environment variables SLACK_API and SLACK_USER");
}
$sound = new Sound();
$slack = new Slack( array(
'api_key' => getenv('SLACK_API'),
'slack_user' => getenv('SLACK_USER')
));
if ($channel == 'private')
die("Feature coming soon.\r\n");
$slack->load_channels();
if (empty($slack->channels[$channel]))
die("Channel not found.\r\n");
$json = $slack->get_channel_history($slack->channels[$channel]['id']);
$json->messages = array_reverse($json->messages);
foreach ($json->messages as $m) {
$message = $m->text;
// mute the hubot somewhat
if ($slack->users[$m->user]['name'] == 'hubot') {
$items = explode(" ", $message);
$items = array_slice($items, 0, 10);
$message = implode(" ", $items);
}
$message = clean_message($message, $slack);
$message = clean_urls($message);
$sound->add_sentence($slack->users[$m->user]['name'] . ' says ' . $message);
}
$sound->generate($outputfile);
function clean_message($text, $slack) {
// user mentions
$message = preg_replace_callback('~<@(.*?)>~', function ($matches) use ($slack) {
return $sound->users[$matches[1]]['name'];
}, $text);
// emotes
$message = preg_replace_callback('~:(.*?):~', function ($matches) {
return ' emote ' . $matches[1];
}, $message);
return $message;
}
function clean_urls($text) {
return preg_replace('~<http|https.*?>~', ' some url ', $text);
}