forked from github/hubot-scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
play.coffee
177 lines (159 loc) · 6.61 KB
/
play.coffee
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# Play music. At your office. Like a boss.
#
# play.coffee uses play, an open source API to playing music:
# https://github.com/holman/play
#
# You can watch the screencast at:
# http://zachholman.com/screencast/play/
#
# Make sure you set up your HUBOT_PLAY_URL environment variable with the URL to
# your company's play.
#
# play - Plays music.
# stop - Stops the music.
# play next - Plays the next song.
# what's playing - Returns the currently-played song.
# I want this song - Returns a download link for the current song.
# I want this album - Returns a download link for the current album.
# play <artist> - Queue up ten songs from a given artist.
# play <name> by <artist> - Queues up a song by an artist.
# play album <album> - Queues up an album.
# list songs by <artist> - Lists the songs by the artist String.
# where's play - Gives you the URL to the web app.
# volume [0-10] - Adjust the volume of play.
# be quiet - Mute play.
# say <message> - `say` your message over your speakers.
# play stats - Show some play stats.
URL = "#{process.env.HUBOT_PLAY_URL}/api"
module.exports = (robot) ->
robot.respond /where'?s play/i, (message) ->
message.send("play's at #{process.env.HUBOT_PLAY_URL}")
robot.respond /what'?s playing/i, (message) ->
message.http("#{URL}/now_playing").get() (err, res, body) ->
json = JSON.parse(body)
str = "\"" + json.song_title + "\" by " +
json.artist_name + ", from \"" + json.album_name + "\"."
message.send("Now playing " + str)
robot.respond /say (.*)/i, (message) ->
message.http("#{URL}/say")
.query(message: message.match[1])
.get() (err, res, body) ->
message.send(message.match[1])
robot.respond /play stats/i, (message) ->
message.http("#{URL}/stats")
.get() (err, res, body) ->
json = JSON.parse(body)
message.send(json.message)
robot.respond /volume (.*)/i, (message) ->
message.http("#{URL}/volume")
.query(level: message.match[1])
.header('Content-Length', 0)
.post({}) (err, res, body) ->
console.log body
json = JSON.parse(body)
if json.success == true
message.send("Bumped the volume for ya.")
else
message.send("Whoa, can't change the volume. Weird.")
robot.respond /volume$/i, (message) ->
message.http("#{URL}/volume")
.get() (err, res, body) ->
json = JSON.parse(body)
message.send(json.message)
robot.respond /quiet/i, (message) ->
message.http("#{URL}/volume")
.query(level: 1)
.header('Content-Length', 0)
.post() (err, res, body) ->
json = JSON.parse(body)
if json.success == true
message.send("Running silent.")
else
message.send("Whoa, can't change the volume. Weird.")
robot.respond /(un)?pause( play)?/i, (message) ->
message.http("#{URL}/pause")
.header('Content-Length', 0)
.post() (err, res, body) ->
json = JSON.parse(body)
if json.success == true
message.send("Fine, fine.")
else
message.send("Nope, can't. You're on your own.")
robot.respond /play next/i, (message) ->
message.http("#{URL}/next")
.header('Content-Length', 0)
.post() (err, res, body) ->
json = JSON.parse(body)
if json.success == true
message.send("On to the next one.")
else
message.send("hwhoops")
robot.respond /play ["']?(.+)["']?/i, (message) ->
return if message.match[1].match(' by ')
return if message.match[1] == 'next'
return if message.match[1] == 'stats'
return if message.match[1].split(' ')[0] == 'song'
return if message.match[1].split(' ')[0] == 'album'
return if message.match[1].split(' ')[0] == 'something'
message.http("#{URL}/add_artist")
.query(user_login: message.message.user.githubLogin, artist_name: message.match[1])
.header('Content-Length', 0)
.post() (err, res, body) ->
json = JSON.parse(body)
if json.error
message.send(json.error)
else
message.send("Queued up 10 " + json.artist_name + " tracks.")
robot.respond /play album ["']?(.+)["']?/i, (message) ->
message.http("#{URL}/add_album")
.query(user_login: message.message.user.githubLogin, name: message.match[1])
.header('Content-Length', 0)
.post() (err, res, body) ->
json = JSON.parse(body)
if json.error
message.send(json.error)
else
str = json.album_name + " by " + json.artist_name + "."
message.reply("Queued up " + str)
robot.respond /play ["']?(.+)["']? by ["']?(.+)["']?/i, (message) ->
message.http("#{URL}/add_song")
.query(user_login: message.message.user.githubLogin, artist_name: message.match[2], song_title: message.match[1])
.header('Content-Length', 0)
.post() (err, res, body) ->
json = JSON.parse(body)
if json.song_title
str = "\"" + json.song_title + "\" by " +
json.artist_name + ", from \"" + json.album_name + "\"."
message.send("Queued up " + str)
else
message.send("Never heard of it.")
robot.respond /(I like|star|I love) this song/i, (message) ->
message.http("#{URL}/star_now_playing")
.query(user_login: message.message.user.githubLogin)
.header('Content-Length', 0)
.post() (err, res, body) ->
json = JSON.parse(body)
message.send("You have a weird taste in music, but I'll remember it.")
robot.respond /play something i('d)? like/i, (message) ->
message.http("#{URL}/play_stars")
.query(user_login: message.message.user.githubLogin)
.header('Content-Length', 0)
.post() (err, res, body) ->
json = JSON.parse(body)
message.send("Queued up " + json.song_title + " by " + json.artist_name)
robot.respond /I want this song/i, (message) ->
message.http("#{URL}/now_playing").get() (err, res, body) ->
json = JSON.parse(body)
message.send("Cool! Me too. You can snag it at: #{process.env.HUBOT_PLAY_URL}#{json.song_download_path}")
robot.respond /I want this album/i, (message) ->
message.http("#{URL}/now_playing").get() (err, res, body) ->
json = JSON.parse(body)
message.send("Cool! Me too. You can snag it at: #{process.env.HUBOT_PLAY_URL}#{json.album_download_path}")
robot.respond /list songs by ["']?(.+)["']?/i, (message) ->
artist = message.match[1]
message.http("#{URL}/search")
.query(facet: 'artist', q: artist)
.get() (err, res, body) ->
json = JSON.parse(body)
songs = json.song_titles.join("\n ")
message.send("Songs by " + artist + ":\n " + songs)