Browse files

Add a random top reddit post script. Say subreddit or default to home…

…page.

Chose a post from random from the top ones for the day. The script tries to pick an image if it can find one.
  • Loading branch information...
1 parent 088ca44 commit f4cba005e266725aca238c722bdb6e537973a1bc @artfuldodger artfuldodger committed Feb 14, 2012
Showing with 46 additions and 0 deletions.
  1. +46 −0 src/scripts/reddit-random-top.coffee
View
46 src/scripts/reddit-random-top.coffee
@@ -0,0 +1,46 @@
+# a reddit <subreddit> - A random top (today) post from the specified subreddit. Tries to find a picture if possible.
+module.exports = (robot) ->
+ robot.respond /a reddit( .+)*/i, (msg) ->
+ reddit msg, msg.match[1]?.trim()
+
+reddit = (msg, subreddit) ->
+ url = if subreddit? then "http://www.reddit.com/r/#{subreddit}/top.json" else "http://www.reddit.com/top.json"
+ msg
+ .http(url)
+ .get() (err, res, body) ->
+
+ # Sometimes when a subreddit doesn't exist, it wants to redirect you to the search page.
+ # Oh, and it doesn't send back 302s as JSON
+ if body?.match(/^302/)?[0] == '302'
+ msg.send "That subreddit does not seem to exist."
+ return
+
+ posts = JSON.parse(body)
+
+ # If the response has an error attribute, let's get out of here.
+ if posts.error?
+ msg.send "That doesn't seem to be a valid subreddit. [http response #{posts.error}]"
+ return
+
+ unless posts.data?.children? && posts.data.children.length > 0
+ msg.send "While that subreddit exists, there does not seem to be anything there."
+ return
+
+ post = getPost(posts)
+
+ tries_to_find_picture = 0
+
+ while post?.domain != "i.imgur.com" && tries_to_find_picture < 30
+ post = getPost(posts)
+ tries_to_find_picture++
+
+ # Send pictures with the url on one line so Campfire displays it as an image
+ if post.domain == 'i.imgur.com'
+ msg.send "#{post.title} - http://www.reddit.com#{post.permalink}"
+ msg.send post.url
+ else
+ msg.send "#{post.title} - #{post.url} - http://www.reddit.com#{post.permalink}"
+
+getPost = (posts) ->
+ random = Math.round(Math.random() * posts.data.children.length)
+ posts.data.children[random]?.data

0 comments on commit f4cba00

Please sign in to comment.