Jump to content
coders-irc_Bot

reddit

Recommended Posts

  • Administrators
Posted

This is a forum request made by maria who wishes to have the latest comment checked via reddit.com. The script will then send the info to a channel with its title, short link and by whom. I thought I'd make this a snippet submission to benefit those who find it useful or usable.

Usage: right-click on your channel or nick list to toggle "Reddit On" and "Reddit Off" to get started.

Edit: I've updated the script to include the latest post as requested by maria previously.

alias -l reddit {
  var %i = 1, %socks = reddit reddit2
  while ($gettok(%socks,%i,32)) {
    var %v1 = $v1
    if ($sock(%v1)) sockclose $v1
    sockopen %v1 www.reddit.com 80
    sockmark %v1 msg $1
    inc %i
  }
}
alias -l trans {
  return $replace($1,&lt;,<,&gt;,>,&quot;,",&nbsp;,$chr(160),&amp;,&,&amp;#39;,')
}
on *:sockclose:reddit*:{
  if ($sock($sockname).name == reddit) {
    if ($hget(data2)) && ($hget(data3)) && ($hget(data4)) {
      $sock($sockname).mark $+($chr(2),Latest Comment:,$chr(2)) $&
        [ [ $remove($+($hget(data2,1).item,$chr(32),$hget(data2,1).data),r/) ] ]
      $sock($sockname).mark $+($chr(2),Latest Post:,$chr(2)) $&
        $+($hget(data3,1).item,$chr(32),$hget(data3,1).data) - $&
        $hget(data4,1).item by $hget(data5,1).item 
      hfree -w data*
    }
  }
  else { 
    if ($sock(reddit2)) sockclose $v1
    sockopen reddit2 www.reddit.com 80
    sockmark reddit2 msg $1
  }
}
menu channel,nicklist {
  Reddit
  .ON {
    if (!%reddits) {
      set -e %reddits $$?"Which Reddit to Watch?"
      set -e %reddittime $$?"How often do you want the latest post checked $&
        and sent to the channel in seconds?"
      $+(.timer,#,$network) 0 %reddittime reddit #
      echo 2 # * Reddit Set for: $+($chr(2),%reddits)
      echo 2 # * Time Interval in Seconds: $+($chr(2),%reddittime)
      if (%true) unset $v1
    }
    else echo 4 # * Reddit is Already Switched On!
  }
  .OFF { 
    if (%reddits) {
      $+(.timer,#,$network) off 
      echo 2 * Reddit Has Been Turned Off!
      unset %reddit* %true
    }
    else echo 4 # * Reddit is Already Switched Off!
  }
}
on *:sockopen:reddit*:{
  if ($sockerr) { 
    echo 4 $gettok($sock(reddit).mark,2,32) Error Connecting to $sock(reddit).addr
    sockclose reddit
  }
  if ($sock($sockname).name == reddit) {
    var %reddit = sockwrite -nt reddit
    %reddit GET $+(/r/,%reddits,/comments?limit=1) HTTP/1.0
    %reddit Connection: close
    %reddit Host: $+($sock(reddit).addr,$str($crlf,2))
  }
  else {
    var %reddit2 = sockwrite -nt reddit2
    %reddit2 GET $+(/r/,%reddits,/new.json?sort=new) HTTP/1.0
    %reddit2 Connection: close
    %reddit2 Host: $+($sock(reddit).addr,$str($crlf,2))
  }
}
on *:sockread:reddit*:{
  if ($sockerr) { 
    echo 4 $gettok($sock(reddit).mark,2,32) Error Reading $sock(reddit).addr
    sockclose reddit
  }
  if ($sock($sockname).name == reddit) {
    sockread &reddit
    var %g = $regsubex($bvar(&reddit,1-).text,/\/r\/|&#\d+;/g,)
    if ($regex(%g,/<\/div><\/form><ul class="flat-list buttons">(.*)/)) {
      hadd -m data $+($sock(reddit).addr,/tb/,$gettok($iif($regex($regml(1),$&
        /\/comments\/(\S+)\//),$trans($regml(1))),1,47))
    }
    if ($regex(%g,/class="title" rel="nofollow" >(.*)class="author/)) {
      hadd -m data2 $gettok($trans($regml(1)),1,60) - $&
        $!+($chr(3),12,$hget(data,1).item,$chr(3)) by $+($chr(3),05,$&
        $iif($regex($regml(1),/\/user\/(\S+)"/),$regml(1)))
    }
  }
  else {
    sockread &reddit2
    var %g2 = $bvar(&reddit2,1-).text
    if ($regex(%g2,/"title"\: "(.*)"/)) {
      hadd -m data3 $gettok($trans($regml(1)),1,34) 
    }
    if ($regex(%g2,/"id"\: "(.*)"/)) {
      hadd -m data4 $+($chr(3),12,$gettok($+(http://redd.it/,$&
        $trans($regml(1))),1,34),$chr(3))
      sockclose $sockname
    }
    if ($regex(%g2,/"author"\: "(.*)"/)) { 
      hadd -m data5 $+($chr(3),05,$gettok($regml(1),1,34))
    }
  }
}
on me:*:join:#:{
  if (%true) notice $me Reddit has been toggled off. Right-click on $&
    the nicklist or channel to toggle it on. | unset %true
}
on *:disconnect: if (%reddits) $+(.timer,#,$network) off | set -e %true 1
on me:*:part:#: if (%reddits) $+(.timer,#,$network) off | set -e %true 1
on *:kick:#:{
  if ($knick == $me) && (%reddits) $+(.timer,#,$network) off
  set -e %true 1
}
on *:quit:{
  if ($nick == $me) && (%reddits) {
    var %c = 1
    while ($comchan($me,%c)) {
      $+(.timer,$v1,$network) off
      set -e %true 1
      inc %c
    }
  }
}

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...


×
×
  • Create New...