Project

General

Profile

Actions

Scripting » History » Revision 166

« Previous | Revision 166/246 (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

$abs()
$acos()
$address()
$addtok()
$addtokcs()
$and()
$asc()
$asctime()
$asin()
$atan()
$audio()
$base()
$bfind()
$bindip()
$bitoff()
$biton()
$bvar()
$bytes()
$calc()
$cb()
$ceil()
$chan()
$char()
$chat()
$chr()
$color()
$colour()
$comchan()
$cos()
$count()
$countcs()
$crc()
$ctime()
$datediff()
$datematch()
$decode()
$decrypt()
$deltok()
$dialog()
$did()
$didreg()
$didtok()
$didwm()
$disk()
$diskmenu()
$dns()
$duration()
$editbox()
$encode()
$encodingmenu()
$encrypt()
$eval()
$exists()
$fdate()
$fgetc()
$file()
$fileexists()
$fileloop()
$filerandom()
$finddir()
$findfile()
$findtok()
$findtokcs()
$fline()
$floop()
$floor()
$fopen()
$formatdate()
$frand()
$fread()
$freadc()
$freadchar()
$getdir()
$getdot()
$gettok()
$gfx()
$gfxram()
$group()
$height()
$hfind()
$hget()
$host()
$ial()
$ialchan()
$ibl()
$ident()
$iel()
$ignore()
$iil()
$inellipse()
$ini()
$inpoly()
$input()
$inrect()
$insert()
$instok()
$int()
$invitemenu()
$isalias()
$isbit()
$isdir()
$isfile()
$isid()
$islower()
$istok()
$istokcs()
$istype()
$isupper()
$left()
$len()
$line()
$lines()
$log()
$longfn()
$longip()
$lower()
$mask()
$matchtok()
$matchtokcs()
$md5()
$mid()
$mkfn()
$mklogfn()
$mknickfn()
$mp3()
$msfile()
$nick()
$nofile()
$nopath()
$noqt()
$not()
$notify()
$numtok()
$or()
$ord()
$pic()
$portfree()
$pos()
$poscs()
$prop()
$puttok()
$qt()
$query()
$r()
$rand()
$read()
$readini()
$regex()
$regmatch()
$regml()
$regreplace()
$regsub()
$regsubex()
$remove()
$removecs()
$remtok()
$remtokcs()
$repeat()
$replace()
$replacecs()
$replacex()
$replacexcs()
$reptok()
$reptokcs()
$rgb()
$right()
$round()
$scid()
$scon()
$screen()
$screenb()
$screenh()
$screenw()
$script()
$sdir()
$server()
$sfile()
$sha1()
$shortfn()
$sin()
$slapsmenu()
$sline()
$snick()
$sock()
$sorttok()
$sorttokcs()
$sqrt()
$str()
$strip()
$style()
$substr()
$tan()
$time()
$timer()
$tip()
$toolbar()
$true()
$trust()
$upper()
$uptime()
$user()
$utfdecode()
$utfencode()
$var()
$vol()
$width()
$wildtok()
$wildtokcs()
$window()
$xor()

Variables added so far

$0
$active
$activeserver
$activewid
$adate
$address
$adiircdir
$adiircexe
$adiircini
$album
$anick
$appactive
$appstate
$artist
$audio
$away
$awaymsg
$awaytime
$bitrate
$bwdown
$bwdownb
$bwname
$bwspeed
$bwup
$bwupb
$cb
$chan
$chanmodes
$channel
$chantypes
$cid
$clevel
$cmdline
$comment
$cpucache
$cpucount
$cpuident
$cpuload
$cpumhz
$cpuname
$cr
$crlf
$ctime
$date
$day
$daylight
$disk
$diskfree
$disktotal
$dlevel
$duration
$error
$event
$false
$feof
$ferr
$frequency
$fulladdress
$fulldate
$fulltitle
$genre
$getdir
$gfx
$gfxram
$gmt
$highlight
$host
$ial
$ident
$idle
$ignore
$inmidi
$inpaste
$insong
$inwave
$ip
$isid
$layer
$left
$length
$logdir
$logstamp
$logstampfmt
$lr
$ltimer
$maddress
$matchkey
$me
$memfree
$memfreep
$memtotal
$mircdir
$mircexec
$mircini
$mnick
$mode
$modespl
$motherboard
$mversion
$myhost
$myident
$network
$newnick
$nick
$now
$null
$numeric
$online
$os
$osbuild
$osedition
$osmajor
$osminor
$osname
$osservicepack
$osversion
$percentl
$percentp
$playcount
$player
$port
$position
$prefix
$progress
$r
$r0
$raw0
$rawbytes
$rawmsg
$result
$screen
$screenb
$screenh
$screenw
$script
$scriptdir
$scriptline
$server
$serverip
$show
$site
$size
$sockbr
$song
$status
$target
$ticks
$time
$timestamp
$timestampfmt
$timezone
$title
$totaltracks
$track
$true
$ulevel
$updays
$uphours
$upmins
$usermode
$version
$volume
$volumeb
$volumep
$wid
$wildsite
$window
$year

Commands added so far

/aclear
/action
/advertise
/ajinvite
/alias
/aline
/alphaup
/amark
/ame
/amsg
/anick
/aquit
/away
/back
/background
/ban
/banlist
/bcopy
/beep
/betaup
/bin2txt
/bindip
/bread
/break
/breplace
/bset
/btrunc
/bunset
/bwrite
/channel
/channelbar
/charset
/clear
/clearall
/clipboard
/close
/closefile
/color
/config
/continue
/ctcp
/ctcpreply
/cycle
/dcc
/debug
/dec
/dehalfop
/deop
/describe
/desop
/devoice
/dialog
/did
/didtok
/disable
/disconnect
/dns
/dop
/drawcopy
/drawdot
/drawfill
/drawline
/drawpic
/drawrect
/drawreplace
/drawsave
/drawscroll
/drawtext
/echo
/editbox
/enable
/encoding
/exec
/exit
/fakeraw
/fclose
/filter
/flist
/fopen
/fseek
/fwrite
/gcmem
/google
/google
/goto
/hadd
/halfop
/halt
/haltdef
/hdec
/hdel
/help
/hfree
/hinc
/hload
/hmake
/hop
/hsave
/ignore
/inc
/join
/kick
/kickban
/kill
/lag
/linesep
/list
/load
/logs
/logview
/loopfile
/markall
/me
/menubar
/mkdir
/mode
/msg
/msgbox
/nick
/nickcolor
/nmsg
/nomsg
/noop
/noquery
/notice
/notify
/np
/onotice
/op
/openfile
/part
/paths
/pgoogle
/pgoogle
/priv
/query
/quit
/quote
/raw
/rawlog
/reconnect
/rejoin
/reload
/remini
/remove
/rename
/reseterror
/resolve
/restart
/return
/rmdir
/run
/runloop
/say
/scid
/sclose
/scon
/search
/seekfile
/server
/serverlist
/set
/setoption
/sidebar
/signal
/slap
/sleep
/smsg
/sockaccept
/sockclose
/socklist
/socklisten
/sockmark
/sockopen
/sockpause
/sockread
/sockrename
/sockwrite
/sop
/sopen
/splay
/split
/statusbar
/swrite
/tab
/tester
/time
/timer
/titlebar
/tokenize
/toolbar
/topic
/txt2bin
/unban
/unignore
/unload
/unnotify
/unset
/update
/var
/vars
/viewlog
/voice
/vol
/wdown
/window
/wjump
/wnext
/wpause
/wplay
/wprev
/write
/writefile
/writeini
/wsearch
/wseekf
/wseekr
/wselect
/wstop
/wup

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
        halt
    } 
}

Kickban example

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
}

Simple calculator script:

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

Colored version

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

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>]
        return
    }

    %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 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
}

Updated by Per Amundsen almost 11 years ago · 166 revisions

Also available in: PDF HTML TXT