; dynamic variables inspired by http://forum.swiftirc.net/viewtopic.php?f=34&t=7969&view=next
;Inspired by BillGreen and http://stackoverflow.com/questions/4867035/how-do-i-change-the-color-of-links-in-mirc/6071100#6071100
;this is actually needed to bypass mIRC's parsing behavior of strtok(str, ":")
alias urlreg return /(\x03\d{1,2}(?:,\d{1,2})?|)(.*?)(((?:(?:https?://)|(?:www\.))(?!\.)\S+\.(?!\.)\S+)|(?:\S+\.(?:com|org|edu|gov|net|tv|uk|cc|xxx|mil|co|us|se|fm|me|de|kr|sv|fr|jp|tk|be|ly|info|biz|us|in|mobi)\S*))/ig
alias imgurReg return /(\x03\d{1,2}(?:,\d{1,2})?|)(.*?)(\S+i\.imgur\.com/[\w]{4,})(\s|$)/ig
alias idreg return /(.*?\S+i\.imgur\.com/)([\w]{4,})|(.*)/ig
alias urlcolor return $+($chr(3), 12, $chr(31), $1-, $chr(3), $chr(31))
alias selfurlcolor return $+($chr(3), 12, $chr(31), $1-, $chr(31), $chr(3), $color(own))
;trigger for the regex event only
on ^&$*:text:$($imgurReg):*:{
inc %imgurID
var %n = $calc( $regex($1-, $idreg) - 2 )
set %imgur. [ $+ [ %imgurID ] $+ [ .Count ] ] %n
;if we are in a channel, turn nick into @nick if applicable
set %imgur. [ $+ [ %imgurID ] $+ [ .Nick ] ] $iif($chan, $nick($chan, $nick).pnick, $nick)
;color all the linkes using the predefined alias above
set %imgur. [ $+ [ %imgurID ] $+ [ .Msg ] ] $regsubex($1-, $urlreg,\1\2$urlcolor(\3)\1)
set %imgur. [ $+ [ %imgurID ] $+ [ .Chan ] ] $chan
set %imgur. [ $+ [ %imgurID ] $+ [ .Color ] ] $cnick($nick).color
if ( $nick isop $chan ) {
set %imgur. [ $+ [ %imgurID ] $+ [ .Color ] ] %DharmaOptions.opcolor
if (destin isin %%imgurNick) {
set %imgur. [ $+ [ %imgurID ] $+ [ .Color ] ] 4
}
}
tokenize 3 $regsubex($1- , $idreg , \2 $chr(3))
while (%n != 0) {
set %imgur. [ $+ [ %imgurID ] $+ [ .Url. ] $+ [ %n ] ] [ $eval($($+($,%n)) , 2) ]
noop $imgur $eval($($+($,%n)) , 2)
;inc %imgur. [ $+ [ %imgurID ] $+ [ .SockID. ] $+ [ %n ] ]
sockopen $+( imgur. [ $+ [ %imgurID ] $+ [ .Url. ] $+ [ %n ] ] ) api.imgur.com 80
dec %n
}
;prevent mIRC's default echo
haltdef
}
on *:sockopen:imgur.*: {
sockwrite -nt $sockname GET /2/image/ $+ $eval( $+( %, $sockname) , 2 ) HTTP/1.1
sockwrite -nt $sockname Host: api.imgur.com
sockwrite -nt $sockname $crlf
}
on *:sockread:imgur.*: {
var %read
sockread %read
if (*<original>* iswm %read ) {
var %start = /((http|www)\S*)?imgur\.com/(
var %mid = %imgur. [ $+ [ $gettok($sockname,2,46) ] $+ [ .Url. ] $+ [ $gettok($sockname,4,46) ] ]
var %end = [^ \t\r\n\x31\x03]{0,5})/g
set %imgur. [ $+ [ $gettok($sockname,2,46) ] $+ [ .Msg ] ] $regsubex( %imgur. [ $+ [ $gettok($sockname,2,46) ] $+ [ .Msg ] ] , $+( %start , %mid , %end ) , $regsubex(%read , /.*<original>|</original>.*/sig , \1 ) )
inc %imgur. [ $+ [ $gettok($sockname,2,46) ] $+ [ .final ] ]
if ( %imgur. [ $+ [ $gettok($sockname,2,46) ] $+ [ .final ] ] == %imgur. [ $+ [ $gettok($sockname,2,46) ] $+ [ .Count ] ] ) {
;print the message, default timestamp, highlighting options, and nick coloring
echo -tcrl normal $iif( %imgur. [ $+ [ %imgurID ] $+ [ .Chan ] ] , $v1, %imgur. [ $+ [ %imgurID ] $+ [ .Nick ] ] ) $+(<, $chr(3), %imgur. [ $+ [ %imgurID ] $+ [ .Color ] ] , %imgur. [ $+ [ %imgurID ] $+ [ .Nick ] ] , $chr(3), >) %imgur. [ $+ [ $gettok($sockname,2,46) ] $+ [ .Msg ] ]
unset [ $+( %, imgur. , $gettok($sockname,2,46) , * ) ]
}
sockclose $sockname
}
elseif (*error* iswm %read ) {
inc %imgur. [ $+ [ $gettok($sockname,2,46) ] $+ [ .final ] ]
if ( %imgur. [ $+ [ $gettok($sockname,2,46) ] $+ [ .final ] ] == %imgur. [ $+ [ $gettok($sockname,2,46) ] $+ [ .Count ] ] ) {
;print the message, default timestamp, highlighting options, and nick coloring
echo -tcrl normal $iif( %imgur. [ $+ [ %imgurID ] $+ [ .Chan ] ] , $v1, %imgur. [ $+ [ %imgurID ] $+ [ .Nick ] ] ) $+(<, $chr(3), %imgur. [ $+ [ %imgurID ] $+ [ .Color ] ] , %imgur. [ $+ [ %imgurID ] $+ [ .Nick ] ] , $chr(3), >) %imgur. [ $+ [ $gettok($sockname,2,46) ] $+ [ .Msg ] ]
unset [ $+( %, imgur. , $gettok($sockname,2,46) , * ) ]
}
sockclose $sockname
}
;also need on a fail, like after 30 seconds, it prints the text regardless of sock success
}