Project

General

Profile

Scripting » History » Revision 189

Revision 188 (Per Amundsen, 02/08/2014 01:37 PM) → Revision 189/242 (Per Amundsen, 02/12/2014 11:01 PM)

h1. Scripting changes as of 1.9.3 

 [[Scripting Events|Scripting Events]] 

 [[Scripting Operators|Scripting Operators]] 

 [[Scripting Identifiers|Scripting Identifiers]] 

 [[Scripting Commands|Scripting Commands]] 

 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 $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> 

 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://www.zigwap.com/mirc/docs/ and http://www.mirc.org/mishbox/index.htm