Scripting changes as of 1.9.1

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.

identifiers added so far


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

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.