Pastebin URL Detector for mIRC

By Vegito on Jun 26, 2015


Updates:

[09/03/2016]

  • Script is working again.

[05/09/2015]

  • FIXED: Now also returns the info when someone queries you with the pastebin paste/user url.

[25/07/2015]

  • Pastebin URL Detector will now detect url at any position of your message.

[18/07/2015]

  • Pastebin URL Detector now supports multi-sockets.
  • Data is now stored in sockmark instead of global variables.
  • Now also displays (edited) if the paste has been edited by the poster.
  • Added a 3 seconds timeout to prevent spam.
  • Now also detects Pastebin user urls. (See below for example)

[29/06/2015]

  • Pastebin URL Detector now also returns whether paste exists or is private!

Image

Image


Syntax:

Enter a Pastebin url in channel or query.


Examples:

  • Paste url:
    Image

  • User url:
    Image

Credits for $htmltoascii, $ht2chr and $ht2as alias goes to David Schor.

alias -l ht2chr {
  if (#x* iswm $1) return $chr($base($mid($1, 3), 16, 10))
  elseif (#* iswm $1) return $chr($mid($1, 2))
  else return $ht2as($1)
}
alias -l ht2as {
  var %A quot amp lt gt nbsp iexcl cent pound curren yen brvbar sect uml copy ordf $&
    laquo not shy reg macr deg plusmn sup2 sup3 acute micro para middot cedil sup1 $&
    ordm raquo frac14 frac12 frac34 iquest Agrave Aacute Acirc Atilde Auml Aring AElig $&
    Ccedil Egrave Eacute Ecirc Euml Igrave Iacute Icirc Iuml ETH Ntilde Ograve Oacute $&
    Ocirc Otilde Ouml times Oslash Ugrave Uacute Ucirc Uuml Yacute THORN szlig agrave $&
    aacute acirc atilde auml aring aelig ccedil egrave eacute ecirc euml igrave iacute $&
    icirc iuml eth ntilde ograve oacute ocirc otilde ouml divide oslash ugrave uacute $&
    ucirc uuml yacute thorn yuml
  var %B 34 38 60 62 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 $&
    177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 $&
    199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 $&
    221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 $&
    243 244 245 246 247 248 249 250 251 252 253 254 255
  return $chr($gettok(%B, $findtokcs(%A, $1, 32), 32))
}

alias html2ascii { return $regsubex($1-,/&(.{2,6});/Ug, $ht2chr(\t)) }

alias pastebin {
  if ($regex($strip($2-), /^(?:.*?\s)?(?:https?:\/\/)?(?:www\.)?pastebin.com(?:\/(u))?\/(\w+)\/?(?:\s.*)?$/i)) {
    if (!%pastebinTimeout. [ $+ [ $nick ] ]) {
      sockopen pastebin. [ $+ [ $nick ] ] pastebin.com 80
      if ($regml(0) == 2) {
        sockmark pastebin. [ $+ [ $nick ] ] $+($1,$chr(07),$regml(2),$chr(07),$regml(1))
      }
      else {
        sockmark pastebin. [ $+ [ $nick ] ] $+($1,$chr(07),$regml(1))
      }
      set -u10 %pastebinTimeout. $+ $nick 1
    }
  }
}

on *:TEXT:*:*: { pastebin $iif($left($target,1) == $chr(35), #, $nick) $1- }
on *:INPUT:*: { pastebin $target $1- }

on *:SOCKOPEN:pastebin.*: {
  var %id = $gettok($sock($sockname).mark,2,07)
  sockwrite -nt $sockname GET / $+ $iif($numtok($sock($sockname).mark,07) == 3,u/ $+ %id,%id) HTTP/1.0
  sockwrite -nt $sockname Host: pastebin.com
  sockwrite -nt $sockname Connection: close
  sockwrite $sockname $crlf
}

on *:SOCKREAD:pastebin.*: {
  if ($sockerr) return

  var %sockreader
  sockread %sockreader

  while ($sockbr) {
    sockread %sockreader

    ;// private or deleted
    if ($regex(%sockreader, /<div class="content_title">(Private)?(?:.*(removed))?/i)) {
      if ($regml(1) == private) {
        msg $gettok($sock($sockname).mark,1,07) 12The entered paste is private!
      }
      if ($regml(1) == removed) {
        msg $gettok($sock($sockname).mark,1,07) 12The entered paste does not exist!        
      }
      sockclose $sockname
    }

    if ($gettok($sock($sockname).mark,3,07) != u) {
      ;// title
      if ($regex(%sockreader, /paste_box_line1" title="(.*?)">(?:<.*? title="(.*?) )?/i)) {
        sockmark $sockname $+($sock($sockname).mark,$chr(07),12Title: 04,$html2ascii($regml(1)) ,$chr(124))    
      }

      ;// Pro User
      if ($regex(%sockreader, /pro_btn2" title="(.*?)"/i)) {
        sockmark $sockname $+($sock($sockname).mark,$chr(07),10[,$regml(1),])    
      }

      ;// Username/poster
      if ($regex(%sockreader, /\/u\/\w+">(\w+)<\/a>/i)) {
        var %proUser = $iif($gettok($sock($sockname).mark,4,07), $v1)
        sockmark $sockname $deltok($sock($sockname).mark,4,07)
        sockmark $sockname $+($sock($sockname).mark,12 By: 04,$regml(1),)
        if (%proUser) sockmark $sockname $+($sock($sockname).mark,%proUser,)
        sockmark $sockname $+($sock($sockname).mark,$chr(07),$regml(1))
      }

      ;// Date
      if ($regex(%sockreader, /CDT">(.*?)<\/span>/ig)) {
        if (!$gettok($sock($sockname).mark,4,07)) {
          sockmark $sockname $+($sock($sockname).mark,12 By: 04,A GUEST,)

        }
        else { 
          sockmark $sockname $deltok($sock($sockname).mark,4,07) 
        }
        var %edited = 10(edited)
        sockmark $sockname $+($sock($sockname).mark,$chr(32) $chr(124),12 On: 04,$regml(1) $iif($regml(2), %edited) ,$chr(124))
      }

      ;// Views
      if ($regex(%sockreader, /.*te"> (.*)/i)) {
        sockmark $sockname $+($sock($sockname).mark,12 Views: 04,$regml(1) ,$chr(124))
      }

      ;// Expires
      if ($regex(%sockreader, /.*ed"> (.*)/i)) {
        sockmark $sockname $+($sock($sockname).mark,$chr(07), 12 Expires: 04,$regml(1))
      }

      ;// Syntax and Size
      if ($regex(%sockreader, /:0">(.*)<\/a><\/span> (.*)/i)) {
        var %expires = $iif($gettok($sock($sockname).mark,4,07), $v1)
        sockmark $sockname $deltok($sock($sockname).mark,4,07)
        sockmark $sockname $+($sock($sockname).mark,12 Syntax: 04,$regml(1) ,$chr(124))
        sockmark $sockname $+($sock($sockname).mark,12 Size: 04,$regml(2) ,$chr(124))
        sockmark $sockname $+($sock($sockname).mark, %expires)

        msg $gettok($sock($sockname).mark,1,07) $gettok($sock($sockname).mark,3,07)
      }
    }
    else {
      ;// User's Pastebin
      if ($regex(%sockreader, /line_u1"><h1>(.*?)<\/h1>/i)) {
        sockmark $sockname $+($sock($sockname).mark,$chr(07), 04,$regml(1))
      }

      ;// PRO User!
      if ($regex(%sockreader, /title="(PRO User!)"/i)) {
        sockmark $sockname $+($sock($sockname).mark,$chr(07),10[,$regml(1),])
        sockmark $sockname $+($sock($sockname).mark,$chr(07), 1)
      }

      ;// Location
      if ($regex(%sockreader, /location" \/>(.*?)&/i)) {
        sockmark $sockname $+($sock($sockname).mark,$chr(07),12Location: 04,$regml(1))
      }

      ;// pastbin hits, pastes hit, joined
      if ($regex(%sockreader, /viewed"> (.*?) .*? pastes"> (.*?) .* dotted;">(.*?)</i)) {
        if ($numtok($sock($sockname).mark, 07) >= 6) {
          var %proUser = $gettok($sock($sockname).mark,5,07)
          sockmark $sockname $deltok($sock($sockname).mark,5,07)
          sockmark $sockname $deltok($sock($sockname).mark,5,07)
          if ($v1 == 7) {
            var %location = $gettok($sock($sockname).mark,5,07)
            sockmark $sockname $deltok($sock($sockname).mark,5,07)
          }
        }
        else if ($numtok($sock($sockname).mark, 07) == 5) {
          var %location = $gettok($sock($sockname).mark,5,07)
          sockmark $sockname $deltok($sock($sockname).mark,5,07)
        }

        if (%proUser) sockmark $sockname $+($sock($sockname).mark,%proUser)
        sockmark $sockname $+($sock($sockname).mark,$chr(32) ,$chr(124),12 Pastebin Hits:04 $regml(1) ,$chr(124))
        sockmark $sockname $+($sock($sockname).mark,12 Pastes Hits: 04,$regml(2) ,$chr(124))
        sockmark $sockname $+($sock($sockname).mark,12 Joined: 04,$regml(3) ago )
        if (%location) sockmark $sockname $+($sock($sockname).mark,$chr(124) %location)
        msg $gettok($sock($sockname).mark,1,07) $gettok($sock($sockname).mark,4,07)
      }
    }
  }
}

Comments

Sign in to comment.
ZarkBit   -  Sep 15, 2015

Thanks, working great :)

 Respond  
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.