Scripting » History » Revision 198
Revision 197 (Per Amundsen, 08/13/2014 07:34 AM) → Revision 198/246 (Per Amundsen, 11/19/2014 05:28 PM)
h1. Scripting [[Scripting Events|Scripting Events]] [[Scripting Operators|Scripting Operators]] [[Scripting Identifiers|Scripting Identifiers]] [[Scripting Commands|Scripting Commands]] [[Scripting Menus|Scripting Menus]] [[Scripting DLL|DLL Support]] 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 = $scon(0), %c = 0, %u = 0, %t = 0, %c2 = 0; while (%t < %s) { inc %t scon $scon(%t); inc %c $chan(0) %c2 = 0 while (%c2 < $chan(0)) { inc %c2 inc %u $nick($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="plotSummary">([\s\S]*?)</p>)) class="plotpar">([\s\S]*?)<i>)) { msg %imdbchan $regml(1) } unset %data } </pre> h1. More information You can find many mIRC scripts at places such as http://www.mircscripts.com/ and http://www.mircscripts.org/ 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://en.wikichip.org/wiki/Introduction_-_mIRC and http://www.mirc.org/mishbox/index.htm