Skip to content
This repository was archived by the owner on Jun 8, 2023. It is now read-only.

Commit 0a34c66

Browse files
author
Tom Bell
committed
Merge pull request #919 from pksunkara/master
Added kickstarter feed script
2 parents 66155ce + 1bd73a9 commit 0a34c66

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

src/scripts/kickstarter.coffee

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# Description:
2+
# Updates from KickStarter project
3+
#
4+
# Configuration:
5+
# KICKSTARTER_PROJECT
6+
# KICKSTARTER_INTERVAL
7+
#
8+
# Commands:
9+
# hubot kickstarter start - Start the kickstarter update feed
10+
# hubot kickstarter change <mins> - Change the interval of kickstarter updates
11+
# hubot kickstarter stop - Stop the kickstarter update feed
12+
#
13+
# Author:
14+
# pksunkara
15+
16+
module.exports = (robot) ->
17+
init = false
18+
timer = 0
19+
interval = parseInt(process.env.KICKSTARTER_INTERVAL || 5)
20+
21+
previous =
22+
flag: false
23+
percent: 0
24+
pledged: 0
25+
26+
robot.respond /kickstarter start/i, (msg) ->
27+
if not init
28+
init = true
29+
setTimer interval, msg
30+
msg.send "Started the kickstarter update feed"
31+
else
32+
msg.send "Its already running!"
33+
34+
robot.respond /kickstarter stop/i, (msg) ->
35+
if init
36+
init = false
37+
clearTimeout timer
38+
msg.send "Stopped the kickstarter update feed"
39+
40+
robot.respond /kickstarter change ([1-9][0-9]*)/i, (msg) ->
41+
clearTimeout timer
42+
interval = parseInt msg.match[1]
43+
setTimer interval, msg
44+
msg.send "Changed the kickstarter update interval"
45+
46+
setTimer = (interval, msg) ->
47+
timer = setTimeout scrape, interval*60*1000, robot, (err, data) ->
48+
if not err and data
49+
setTimer interval, msg
50+
51+
if not previous.flag
52+
previous =
53+
flag: true
54+
percent: data.percent
55+
pledged: data.pledged
56+
57+
msg.send "#{currency(data.currency)} #{pledged(data.pledged)} from #{data.backers} backers (#{percent(data.percent)})"
58+
else
59+
if previous.pledged < data.pledged
60+
msg.send "#{currency(data.currency)} #{pledged(data.pledged)} from #{data.backers} backers (#{percent(data.percent)}) (#{changed(previous.pledged, data.pledged)})"
61+
62+
if previous.percent < 1 and data.percent > 1
63+
msg.send "HURRAY! We are funded successfully! PARTY TIME EVERYONE!"
64+
65+
previous.pledged = data.pledged
66+
previous.percent = data.percent
67+
else
68+
setTimer 0, msg
69+
70+
changed = (p, d) ->
71+
Math.round(d - p)
72+
73+
pledged = (p) ->
74+
Math.round(p).toString().replace /\B(?=(\d{3})+(?!\d))/g, ','
75+
76+
percent = (t) ->
77+
"#{Math.round(t * 10000)/100} %"
78+
79+
currency = (c) ->
80+
if c is 'USD' then "$" else "£"
81+
82+
scrape = (robot, cb) ->
83+
robot.http("http://www.kickstarter.com/projects/#{process.env.KICKSTARTER_PROJECT}")
84+
.get() (err, res, body) ->
85+
if err then return cb err
86+
87+
b = body.match /data-backers-count=\"([0-9]*)\"/
88+
p = body.match /data-pledged=\"([0-9]*.[0-9]*)\"/
89+
c = body.match /data-currency=\"([A-Z]{3})\"/
90+
t = body.match /data-percent-raised=\"([0-9]*.[0-9]*)\"/
91+
92+
cb null,
93+
backers : b[1]
94+
pledged : p[1]
95+
currency: c[1]
96+
percent : t[1]

0 commit comments

Comments
 (0)