Scripting » History » Revision 169
Revision 168 (Per Amundsen, 08/02/2013 02:13 AM) → Revision 169/246 (Per Amundsen, 08/02/2013 02:19 AM)
h1. Scripting changes as of 1.9.1 h1. Implemented mIRC events so far: <pre> raw <numeric>:<matchtext>:<commands> ctcp <level>:<matchtext>:<*|#|?>:<commands> on 1:sockopen:name:commands on 1:sockread:name:commands on 1:socklisten:name:commands on 1:sockclose:name:commands on *:SIGNAL:name:command on <level>:LOGON:*:<commands> on <level>:DNS:<commands> on <level>:CTCPREPLY:<matchtext>:<commands> on <level>:OPEN|CLOSE:<?|@|=|!|*>:<matchtext>:<commands> on <level>:ACTIVE:<*#?=!@>:<commands> on <level>:HOTLINK:<matchtext>:<*#?=!@>:<commands> on <level>:INVITE:<#[,#]>:<commands> on <level>:TABCOMP:<*#?=!@>:<commands> on <level>:WALLOPS:<matchtext>:<commands> on <level>:ERROR:<matchtext>:<commands> on <level>:RAWMODE:#:<commands> on <level>:DEHELP:<#[,#]>:<commands> on <level>:HELP:<#[,#]>:<commands> on <level>:DEVOICE:<#[,#]>:<commands> on <level>:VOICE:<#[,#]>:<commands> on <level>:DEOP:<#[,#]>:<commands> on <level>:OP:<#[,#]>:<commands> on <level>:INPUT:<*#?=!@>:<commands> on <level>:UNBAN:<#[,#]>:<commands> on <level>:BAN:<#[,#]>:<commands> on <level>:CHAT:<matchtext>:<commands> on <level>:KICK:<#[,#]>:<commands> on <level>:NOTIFY:<commands> on <level>:UNNOTIFY:<commands> on <level>:NICK:<commands> on <level>:QUIT:<commands> on <level>:LOAD:<commands> on <level>:UNLOAD:<commands>' on <level>:START:<commands> on <level>:EXIT:<commands> on <level>:DNS:<commands> on <level>:CONNECTFAIL:<commands> on <level>:CONNECT:<commands> on <level>:DISCONNECT:<commands> on <level>:TOPIC:<#[,#]>:<commands> on <level>:USERMODE:<commands> on <level>:MODE:<#[,#]>:<commands> on <level>:PART:<#[,#]>:<commands> on <level>:JOIN:<#[,#]>:<commands> on <level>:SNOTICE:<matchtext>:<commands> on <level>:NOTICE:<matchtext>:<*><?><#[,#]>:<commands> on <level>:ACTION:<matchtext>:<*><?><#[,#]>:<commands> on <level>:TEXT:<matchtext>:<*><?><#[,#]>:<commands> This event is added as a replacement for OnSongChanged on <level>:SONG:<commands> </pre> Supported prefixes so far are ^ to enable halt events (hide default text output from the event), ! to ignore events made by you, @ to only trigger if you have channel op, $ to indicate the wildcard text is a regular expression. User access will come later. h1. identifiers Functions added so far <pre> $0 $abs() $abs $acos() $acos $address() $active $addtok() $activeserver $addtokcs() $activewid $and() $adate $asc() $address $asctime() $addtok $asin() $addtokcs $atan() $adiircdir $audio() $adiircexe $base() $adiircini $bfind() $album $bindip() $and $bitoff() $anick $biton() $appactive $bvar() $appstate $bytes() $artist $calc() $asc $cb() $asctime $ceil() $asin $chan() $atan $char() $audio $chat() $away $chr() $awaymsg $color() $awaytime $colour() $base $comchan() $bfind $cos() $bindip $count() $bitoff $countcs() $biton $crc() $bitrate $ctime() $bvar $datediff() $bwdown $datematch() $bwdownb $decode() $bwname $decrypt() $bwspeed $deltok() $bwup $dialog() $bwupb $did() $bytes $didreg() $calc $didtok() $cb $didwm() $ceil $disk() $chan $diskmenu() $chanmodes $dns() $channel $duration() $chantypes $editbox() $chat $encode() $chr $encodingmenu() $cid $encrypt() $clevel $eval() $cmdline $exists() $color $fdate() $colour $fgetc() $comchan $file() $comment $fileexists() $cos $fileloop() $count $filerandom() $countcs $finddir() $cpucache $findfile() $cpucount $findtok() $cpuident $findtokcs() $cpuload $fline() $cpumhz $floop() $cpuname $floor() $cr $fopen() $crc $formatdate() $crlf $frand() $ctime $fread() $date $freadc() $datediff $freadchar() $datematch $getdir() $day $getdot() $daylight $gettok() $decode $gfx() $decrypt $gfxram() $deltok $group() $dialog $height() $did $hfind() $didreg $hget() $didtok $host() $didwm $ial() $disk $ialchan() $diskfree $ibl() $diskmenu $ident() $disktotal $iel() $dlevel $ignore() $dns $iil() $dotnet $inellipse() $duration $ini() $editbox $inpoly() $encode $input() $encodingmenu $inrect() $encrypt $insert() $error $instok() $event $int() $exists $invitemenu() $false $isalias() $feof $isbit() $ferr $isdir() $fgetc $isfile() $file $isid() $finddir $islower() $findfile $istok() $findtok $istokcs() $findtokcs $istype() $fline $isupper() $floop $left() $floor $len() $fopen $line() $frand $lines() $fread $log() $frequency $longfn() $fulladdress $longip() $fulldate $lower() $fulltitle $mask() $genre $matchtok() $getdir $matchtokcs() $getdot $md5() $gettok $mid() $gfx $mkfn() $gfxram $mklogfn() $gmt $mknickfn() $group $mp3() $height $msfile() $hfind $nick() $hget $nofile() $highlight $nopath() $host $noqt() $ial $not() $ialchan $notify() $ibl $numtok() $ident $or() $idle $ord() $iel $pic() $ignore $portfree() $iil $pos() $inellipse $poscs() $ini $prop() $inmidi $puttok() $inpaste $qt() $inpoly $query() $input $r() $inrect $rand() $insert $read() $insong $readini() $instok $regex() $int $regmatch() $invitemenu $regml() $inwave $regreplace() $ip $regsub() $isalias $regsubex() $isbit $remove() $isdir $removecs() $isfile $remtok() $isid $remtokcs() $islower $repeat() $istok $replace() $istokcs $replacecs() $istype $replacex() $isupper $replacexcs() $layer $reptok() $left $reptokcs() $len $rgb() $length $right() $lf $round() $line $scid() $lines $scon() $log $screen() $logdir $screenb() $logstamp $screenh() $logstampfmt $screenw() $longfn $script() $longip $sdir() $lower $server() $ltimer $sfile() $maddress $sha1() $mask $shortfn() $matchkey $sin() $matchtok $slapsmenu() $matchtokcs $sline() $md5 $snick() $me $sock() $memfree $sorttok() $memfreep $sorttokcs() $memtotal $sqrt() $menu $str() $mid $strip() $mircdir $style() $mircexec $substr() $mircini $tan() $mkfn $time() $mklogfn $timer() $mknickfn $tip() $mnick $toolbar() $mode $true() $modespl $trust() $motherboard $upper() $mouse $uptime() $mp3 $user() $msfile $utfdecode() $mversion $utfencode() $myhost $var() $myident $vol() $network $width() $newnick $wildtok() $nick $wildtokcs() $nofile $window() $nopath $xor() $noqt </pre> h1. Variables added so far <pre> $not $0 $notify $active $now $activeserver $null $activewid $numeric $adate $numtok $address $online $adiircdir $or $adiircexe $ord $adiircini $os $album $osbuild $anick $osedition $appactive $osinstalldate $appstate $osmajor $artist $osminor $audio $osname $away $osservicepack $awaymsg $osversion $awaytime $percentl $bitrate $percentp $bwdown $pic $bwdownb $playcount $bwname $player $bwspeed $port $bwup $portfree $bwupb $pos $cb $poscs $chan $position $chanmodes $prefix $channel $progress $chantypes $prop $cid $puttok $clevel $qt $cmdline $query $comment $r $cpucache $r0 $cpucount $rand $cpuident $raw0 $cpuload $rawbytes $cpumhz $rawmsg $cpuname $read $cr $readini $crlf $realname $ctime $regex $date $regml $day $regsub $daylight $regsubex $disk $remove $diskfree $removecs $disktotal $remtok $dlevel $remtokcs $duration $replace $error $replacecs $event $replacex $false $replacexcs $feof $reptok $ferr $reptokcs $frequency $result $fulladdress $rgb $fulldate $right $fulltitle $round $genre $scid $getdir $scon $gfx $screen $gfxram $screenb $gmt $screenh $highlight $screenw $host $script $ial $scriptdir $ident $scriptline $idle $sdir $ignore $server $inmidi $serverip $inpaste $sfile $insong $sha1 $inwave $shortfn $ip $show $isid $sin $layer $site $left $size $length $slapsmenu $logdir $sline $logstamp $snick $logstampfmt $sock $lr $sockbr $ltimer $song $maddress $sorttok $matchkey $sorttokcs $me $sqrt $memfree $status $memfreep $str $memtotal $strip $mircdir $style $mircexec $submenu $mircini $tan $mnick $mode $modespl $motherboard $mversion $myhost $myident $network $newnick $nick $now $null $numeric $online $os $osbuild $osedition $osmajor $osminor $osname $osservicepack $osversion $percentl $percentp $playcount $player $port $position $prefix $progress $r $r0 $raw0 $rawbytes $rawmsg $result $screen $screenb $screenh $screenw $script $scriptdir $scriptline $server $serverip $show $site $size $sockbr $song $status $target $ticks $time $timer $timestamp $timestampfmt $timezone $tip $title $token $toolbar $totaltracks $track $true $trust $ulevel $updays $uphours $upmins $upper $uptime $user $usermode $utfdecode $utfencode $var $version $vol $volume $volumeb $volumep $wid $width $wildsite $wildtok $wildtokcs $window $xor $year </pre> All operaters are added. h1. Example scripts Simple kickcounter script: <pre> alias kick { if (!%kickcount) %kickcount = 0 inc %kickcount if (!$3) { kick # $$2 Kick number %kickcount halt } } </pre> Kickban example <pre> alias kb { if (!$1) { echo /kb - Nick missing return } var %msg = $iif(#, $2-, $3-) var %chan = $iif(#, #, $2) ; Set this for default ban reason, or remove for no default reason ; Can be shortened to %msg = $iif(%msg, %msg, GTFO) if (!%msg) %msg = GTFO if ($me isop %chan) { MODE %chan +b $wildsite KICK %chan $1 %msg } else echo You are not oper on %chan } </pre> Simple calculator script: <pre> alias calc { if (!$1) { echo /calc - Parameters missing return } ; typing /calc -p <expression> sends output to channel if ($1 == -p) { msg # Calculating : $2- msg # Result is : $calc($2-) } else { echo Calculating : $1- echo Result is : $calc($1-) } } </pre> Colored version <pre> alias calc { if (!$1) { echo /calc - Parameters missing return } # typing /calc -p <expression> sends output to channel if ($1 == -p) { msg # $chr(3)4Calculating : $2- msg # $chr(3)4Result is : $calc($2-) } else { echo $chr(3)4Calculating : 4$1- echo $chr(3)4Result is : $calc($1-) } } </pre> CTCP flood detection example <pre> CTCP *:*:*:{ if (!%count) set -u10 %count 1 else inc -u10 %count 1 if (%count > 4) ignore -tu30 $wildsite } </pre> Mass mode example <pre> alias mass { if (!$2) { echo /mass - Parameters missing [+/-<mode> <nick> <nick> <nick>] return } %len = 2 ; equal to while (%len <= $count(%1-, $chr(32))) while (%len <= $0) { if ($(%len) ison #) mode # $1 $($ $+ %len) inc %len } } </pre> Shows info about servers, channels and users <pre> on *:JOIN:#: { var %s = $server(0), %c = 0, %u = 0, %t = 0, %c2 = 0; while (%t < %s) { inc %t setserver $server(%t); %c += $chan(0) %c2 = 0 while (%c2 < $chan(0)) { in %c2 %u += $user($chan(%c2), 0) } } /echo You are on ( $+ %s $+ ) servers, ( $+ %c $+ ) channels with ( $+ %u $+ ) users } </pre> It is possible to use scripts as functions. These functions are fully nested like the client functions. Lets say you make a /mycalc like this. <pre> alias mycalc { return $calc($$1 + $$2); } </pre> Then you can call this function with eiter /mycalc <number> <number> the normal way or $mycalc(<number, <number>) Typing /testcalc will show the result. <pre> alias testcalc { echo -a $1 + $2 is $mycalc($1, $2); echo -a 5 + 4 is $mycalc(5, 4); } </pre> Simple convert temperature C to F or F to C /temp C 20 will print 68 F <pre> alias temp { if ($1 == C) echo $calc(($2 * 9/5) + 32) F else if ($1 == F) echo $round($calc(($2 - 32) * 5/9), 1) C else echo Temp missing } </pre> Announce song changes in a channel or to a user <pre> On *:SONG:{ nmsg <network> <channel/Nick> $1- } </pre> Announce to several channels with: <pre> On *:SONG:{ nmsg <network> <channel1/Nick>,<channel2/Nick> $1- nmsg <network2> <channel3/Nick> $1- } </pre> Automatically find the summary of a imdb url <pre> On *:TEXT:*:#k: { var %reg = $regex($1-, http://www\.imdb\.com(/title/[a-z0-9]+/)) if (!%reg) { return } sockclose imdb unset %data %imdb = $regml(1) $+ plotsummary %imdbchan = # sockopen imdb www.imdb.com 80 } on *:sockopen:imdb: { sockwrite -n imdb GET %imdb HTTP/1.1 sockwrite -n imdb Host: www.imdb.com sockwrite -n imdb User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.24 Safari/536.5 sockwrite -n imdb Referer: http://www.imdb.com sockwrite -n imdb Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1 sockwrite -n imdb Accept-Language: en-us, en;q=0.50 sockwrite -n imdb Connection: Close $+ $crlf $+ $crlf } on *:sockread:imdb:{ sockread %text %data = %data $+ %text } on *:sockclose:imdb: { if ($regex(%data, <p class="plotpar">([\s\S]*?)<i>)) { msg %imdbchan $regml(1) } unset %data } </pre>