Scripting » History » Revision 166

« Previous | Revision 166/242 (diff) | Next »
Per Amundsen, 05/19/2013 12:02 AM

Scripting changes as of 1.9.0

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>: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.

Functions added so far


Variables added so far


Commands added so far


Not all are from mIRC, ill seperate the list later.

All operaters are added.

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

Updated by Per Amundsen over 6 years ago · 166 revisions

Also available in: PDF HTML TXT