Scripting » History » Revision 170

Revision 169 (Per Amundsen, 08/02/2013 02:19 AM) → Revision 170/245 (Per Amundsen, 08/02/2013 02:21 AM)

h1. Scripting changes as of 1.9.1 

 h1. Implemented mIRC events so far: 

 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> 


 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 added so far 


 All operaters are added. 

 h1. Example scripts 

 Simple kickcounter script: 

 alias kick {  
	 if (!%kickcount) %kickcount = 0 

	 inc %kickcount 
	 if (!$3) {  
		 kick # $$2 Kick number %kickcount 

 Kickban example 
 alias kb { 
	 if (!$1) { 
		 echo /kb - Nick missing 

	 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 
	 ; 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-) 

 Colored version 
 alias calc { 
	 if (!$1) { 
		 echo /calc - Parameters missing 
	 # 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-) 

 CTCP flood detection example 

 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 [+/-<mode> <nick> <nick> <nick>] 

	 %len = 2 
	 ; equal to while (%len <= $count(%1-, $chr(32))) 
	 while (%len <= $0) { 
		 if ($(%len) ison #) mode # $1 $($ $+ %len) 
		 inc %len 

 Shows info about servers, channels and users 
 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 <number> <number> the normal way or $mycalc(<number, <number>) 
 Typing /testcalc will show the result. 
 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:{  
	 nmsg <network> <channel/Nick> $1- 

 Announce to several channels with: 
 On *:SONG:{  
	 nmsg <network> <channel1/Nick>,<channel2/Nick> $1- 
	 nmsg <network2> <channel3/Nick> $1-  

 Automatically find the summary of a imdb url 
 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 80 

 on *:sockopen:imdb: { 
     sockwrite -n imdb GET %imdb HTTP/1.1 
     sockwrite -n imdb Host: 
     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: 
     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 

 You can find many mIRC scripts at places such as and 

 Not everyone will work, if you find one that dosen't, please open a new issue with a link to the script.