h1. Scripting changes as of 1.9.1 h1. Implemented mIRC events so far:
rawSupported 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 added so far: : ctcp : :<*|#|?>: 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 :LOGON:*: on :DNS: on :CTCPREPLY: : on :OPEN|CLOSE:|@|=|!|*>: : on :ACTIVE:<*#?=!@>: on :HOTLINK: :<*#?=!@>: on :INVITE:<#[,#]>: on :TABCOMP:<*#?=!@>: on :WALLOPS: : on :ERROR: : on :RAWMODE:#: on :DEHELP:<#[,#]>: on :HELP:<#[,#]>: on :DEVOICE:<#[,#]>: on :VOICE:<#[,#]>: on :DEOP:<#[,#]>: on :OP:<#[,#]>: on :INPUT:<*#?=!@>: on :UNBAN:<#[,#]>: on :BAN:<#[,#]>: on :CHAT: : on :KICK:<#[,#]>: on :NOTIFY: on :UNNOTIFY: on :NICK: on :QUIT: on :LOAD: on :UNLOAD: ' on :START: on :EXIT: on :DNS: on :CONNECTFAIL: on :CONNECT: on :DISCONNECT: on :TOPIC:<#[,#]>: on :USERMODE: on :MODE:<#[,#]>: on :PART:<#[,#]>: on :JOIN:<#[,#]>: on :SNOTICE: : on :NOTICE: :<*>><#[,#]>: on :ACTION: :<*>><#[,#]>: on :TEXT: :<*>><#[,#]>: This event is added as a replacement for OnSongChanged on :SONG:
$0 $abs $acos $active $activeserver $activewid $adate $address $addtok $addtokcs $adiircdir $adiircexe $adiircini $album $and $anick $appactive $appstate $artist $asc $asctime $asin $atan $audio $away $awaymsg $awaytime $base $bfind $bindip $bitoff $biton $bitrate $bvar $bwdown $bwdownb $bwname $bwspeed $bwup $bwupb $bytes $calc $cb $ceil $chan $chanmodes $channel $chantypes $chat $chr $cid $clevel $cmdline $color $colour $comchan $comment $cos $count $countcs $cpucache $cpucount $cpuident $cpuload $cpumhz $cpuname $cr $crc $crlf $ctime $date $datediff $datematch $day $daylight $decode $decrypt $deltok $dialog $did $didreg $didtok $didwm $disk $diskfree $diskmenu $disktotal $dlevel $dns $dotnet $duration $editbox $encode $encodingmenu $encrypt $error $event $exists $false $feof $ferr $fgetc $file $finddir $findfile $findtok $findtokcs $fline $floop $floor $fopen $frand $fread $frequency $fulladdress $fulldate $fulltitle $genre $getdir $getdot $gettok $gfx $gfxram $gmt $group $height $hfind $hget $highlight $host $ial $ialchan $ibl $ident $idle $iel $ignore $iil $inellipse $ini $inmidi $inpaste $inpoly $input $inrect $insert $insong $instok $int $invitemenu $inwave $ip $isalias $isbit $isdir $isfile $isid $islower $istok $istokcs $istype $isupper $layer $left $len $length $lf $line $lines $log $logdir $logstamp $logstampfmt $longfn $longip $lower $ltimer $maddress $mask $matchkey $matchtok $matchtokcs $md5 $me $memfree $memfreep $memtotal $menu $mid $mircdir $mircexec $mircini $mkfn $mklogfn $mknickfn $mnick $mode $modespl $motherboard $mouse $mp3 $msfile $mversion $myhost $myident $network $newnick $nick $nofile $nopath $noqt $not $notify $now $null $numeric $numtok $online $or $ord $os $osbuild $osedition $osinstalldate $osmajor $osminor $osname $osservicepack $osversion $percentl $percentp $pic $playcount $player $port $portfree $pos $poscs $position $prefix $progress $prop $puttok $qt $query $r $r0 $rand $raw0 $rawbytes $rawmsg $read $readini $realname $regex $regml $regsub $regsubex $remove $removecs $remtok $remtokcs $replace $replacecs $replacex $replacexcs $reptok $reptokcs $result $rgb $right $round $scid $scon $screen $screenb $screenh $screenw $script $scriptdir $scriptline $sdir $server $serverip $sfile $sha1 $shortfn $show $sin $site $size $slapsmenu $sline $snick $sock $sockbr $song $sorttok $sorttokcs $sqrt $status $str $strip $style $submenu $tan $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 $yearAll operaters are added. h1. Example scripts Simple kickcounter script:
alias kick { if (!%kickcount) %kickcount = 0 inc %kickcount if (!$3) { kick # $$2 Kick number %kickcount halt } }Kickban example
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 }Simple calculator script:
alias calc { if (!$1) { echo /calc - Parameters missing return } ; typing /calc -pColored versionsends output to channel if ($1 == -p) { msg # Calculating : $2- msg # Result is : $calc($2-) } else { echo Calculating : $1- echo Result is : $calc($1-) } }
alias calc { if (!$1) { echo /calc - Parameters missing return } # typing /calc -pCTCP flood detection examplesends 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-) } }
CTCP *:*:*:{ if (!%count) set -u10 %count 1 else inc -u10 %count 1 if (%count > 4) ignore -tu30 $wildsite }Mass mode example
alias mass { if (!$2) { echo /mass - Parameters missing [+/-Shows info about servers, channels and users] return } %len = 2 ; equal to while (%len <= $count(%1-, $chr(32))) while (%len <= $0) { if ($(%len) ison #) mode # $1 $($ $+ %len) inc %len } }
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 }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.
alias mycalc { return $calc($$1 + $$2); }Then you can call this function with eiter /mycalc
alias testcalc { echo -a $1 + $2 is $mycalc($1, $2); echo -a 5 + 4 is $mycalc(5, 4); }Simple convert temperature C to F or F to C /temp C 20 will print 68 F
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 }Announce song changes in a channel or to a user
On *:SONG:{ nmsgAnnounce to several channels with:$1- }
On *:SONG:{ nmsgAutomatically find the summary of a imdb url, $1- nmsg $1- }
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,h1. More information You can find many mIRC scripts at places such as http://www.hawkee.com/mirc/scripts/ and http://mircscripts.com/ Not everyone will work, if you find one that dosen't, please open a new issue with a link to the script. For more on mirc scripting and how it works, check out http://www.zigwap.com/mirc/docs/ and http://www.mirc.org/mishbox/index.htm([\s\S]*?))) { msg %imdbchan $regml(1) } unset %data }