Jump to content
chain

mIRC Automated Execution Script v1.1.0

Recommended Posts

  • Administrators
Posted
/*
** mIRC Automated Execution Script v1.1.0
** 
** Author: Sierra Brown [ SierraKomodo ]
** Website: https://gist.github.com/SierraKomodo/18c877055a49629758260d0690bc9ba6
** IRC: SierraKomodo @ irc.freenode.net
**
** Provides some better control over automated functions to occur when you start mirc, connect to a 
**  server, or join a channel. Everything is stored into separated .ini files stored in
**  scripts/config by default (Change the global variable %glo.ConfigPath to set a new location - 
**  Make sure the folder exists.)
**
** Refer to the example entries in the autoconnect, autocommand, and autojoin ini files.
**
** Implemented features:
**  * Auto connect on start, including delayed autoconnections, support for multiple servers, and 
**     full support for most features of the /server command
**  * Auto join on connection to server, including delayed auto joins and support for channel keys
**  * Auto command on connection to server, allowing executing any IRC commands - Essentially runs 
**      /raw command here
*/

; INI file paths
alias -l locGlobalConfig return $+(%glo.ConfigPath, autoexec.ini)
alias -l locGlobalConfig.AutoConnect return $+(%glo.ConfigPath, autoexec-autoconnect.ini)

alias -l locServerConfig return $+(%glo.ConfigPath, $network, /autoexec.ini)
alias -l locServerConfig.AutoJoin return $+(%glo.ConfigPath, $network, /autoexec-autojoin.ini)
alias -l locServerConfig.AutoCommand return $+(%glo.ConfigPath, $network, /autoexec-autocommand.ini)

alias -l locChannelConfig return $+(%glo.ConfigPath, $iif($2, $2, $network), /, $iif($1, $1, $chan), /autoexec.ini)

alias -l locError return $+(%glo.ConfigPath, error.log)

on *:START: {
    if (%glo.ConfigPath == $null) {
        mkdir scripts
        mkdir scripts/config
        var -g %glo.ConfigPath = scripts/config/
    }
    
    
    ; Write default config entries/generate files
    if ($readini($locGlobalConfig, n, Config, bAutoConnect) == $null) {
        writeini $locGlobalConfig Config bAutoConnect 0
    }
    if ($readini($locGlobalConfig, n, Config, iAutoConnectDelay) == $null) {
        writeini $locGlobalConfig Config iAutoConnectDelay 5
    }
    if ($readini($locGlobalConfig, n, Config, sAutoConnectList) == $null) {
        writeini $locGlobalConfig Config sAutoConnectList ExampleServer
        writeini $locGlobalConfig.AutoConnect ExampleServer sAddress irc.example.com
        writeini $locGlobalConfig.AutoConnect ExampleServer iPort 6667
        writeini $locGlobalConfig.AutoConnect ExampleServer sPassword Password
        writeini $locGlobalConfig.AutoConnect ExampleServer bSSL 0
        writeini $locGlobalConfig.AutoConnect ExampleServer sNick Nickname
        writeini $locGlobalConfig.AutoConnect ExampleServer sAltNick Alternate Nickname
        writeini $locGlobalConfig.AutoConnect ExampleServer sRealName Real Name
        writeini $locGlobalConfig.AutoConnect ExampleServer sIdent Ident
        writeini $locGlobalConfig.AutoConnect ExampleServer iDelay 5
    }
    
    ; Auto Connect
    if (($readini($locGlobalConfig, n, Config, bAutoConnect)) && ($readini($locGlobalConfig, n, Config, sAutoConnectList) != $null)) {
        ; If autoconnect global delay is set, delay auto connection by X seconds - This delay exists to allow mIRC to load up fully before executing connections.
        if ($readini($locGlobalConfig, n, Config, iAutoConnectDelay) > 0) {
            timerglo.AutoConnect -o 1 $v1 atimer.AutoConnect
        }
        else {
            atimer.AutoConnect
        }
    }
}


on *:CONNECT: {
    if (!$exists(%glo.ConfigPath $+ $network)) {
        mkdir %glo.ConfigPath $+ $network
    }
    
    ; Write default config entries/generate files
    if ($readini($locServerConfig, n, Config, bAutoJoin) == $null) {
        writeini $locServerConfig Config bAutoJoin 0
    }
    if ($readini($locServerConfig, n, Config, iAutoJoinDelay) == $null) {
        writeini $locServerConfig Config iAutoJoinDelay 3
    }
    if ($readini($locServerConfig, n, Config, sAutoJoinList) == $null) {
        writeini $locServerConfig Config sAutoJoinList #Example
        writeini $locServerConfig.AutoJoin #Example sKey Password
        writeini $locServerConfig.AutoJoin #Example iDelay 5
    }
    
    if ($readini($locServerConfig, n, Config, bAutoCommand) == $null) {
        writeini $locServerConfig Config bAutoCommand 0
    }
    if ($readini($locServerConfig, n, Config, iAutoCommandDelay) == $null) {
        writeini $locServerConfig Config iAutoCommandDelay 1
    }
    if ($readini($locServerConfig, n, Config, sAutoCommandList) == $null) {
        writeini $locServerConfig Config sAutoCommandList ExampleCommand
        writeini $locServerConfig.AutoCommand ExampleCommand 1 privmsg NickServ identify password
        writeini $locServerConfig.AutoCommand ExampleCommand 2 other command to send to the server
    }
    
    ; Auto Join
    if (($readini($locServerConfig, n, Config, bAutoJoin)) && ($readini($locServerConfig, n, Config, sAutoJoinList) != $null)) {
        ; If autojoin global delay is set, delay auto join by X seconds - This delay exists to allow mIRC to finish processing any on CONNECT scripts before executing joins.
        if ($readini($locServerConfig, n, Config, iAutoJoinDelay) > 0) {
            timer [ $+ [ $cid ] $+ ] .AutoJoin 1 $v1 atimer.AutoJoin
        }
        else {
            atimer.AutoJoin
        }
    }
    
    ; Auto Command
    if (($readini($locServerConfig, n, config, bAutoCommand)) && ($readini($locServerConfig, n, Config, sAutoCommandList) != $null)) {
        ; If autocommand delay is set, delay commands by X seconds - This delay exists to allow mIRC to finish processing any on CONNECT scripts before executing any other commands
        if ($readini($locServerConfig, n, Config, iAutoCommandDelay) > 0) {
            timer [ $+ [ $cid ] $+ ] .AutoCommand 1 $v1 atimer.AutoCommand
        }
        else {
            atimer.AutoCommand
        }
    }
}


alias atimer.AutoConnect {
    ; Cycle through each server name entry in [Config] sAutoConnectList
    var %loc.AutoConnectList = $readini($locGlobalConfig, n, Config, sAutoConnectList)
    var %loc.NewWindow = 0
    var %loc.Count = 1
    
    while (%loc.Count <= $gettok(%loc.AutoConnectList, 0, 32)) {
        var %loc.Current = $gettok(%loc.AutoConnectList, %loc.Count, 32)
        
        ; Check if the server name provided exists in the autoconnect ini file
        if ($readini($locGlobalConfig.AutoConnect, n, %loc.Current, sAddress) != $null) {
            var %loc.Address = $v1
            var %loc.Port = $iif($readini($locGlobalConfig.AutoConnect, n, %loc.Current, iPort) != $null, $v1, 6667)
            var %loc.Password = $readini($locGlobalConfig.AutoConnect, n, %loc.Current, sPassword)
            var %loc.SSL = $iif($readini($locGlobalConfig.AutoConnect, n, %loc.Current, bSSL) != $null, $v1, 0)
            var %loc.Nick = $readini($locGlobalConfig.AutoConnect, n, %loc.Current, sNick)
            var %loc.AltNick = $iif($readini($locGlobalConfig.AutoConnect, n, %loc.Current, sAltNick), $v1, $+(%loc.Nick, _))
            var %loc.RealName = $iif($readini($locGlobalConfig.AutoConnect, n, %loc.Current, sRealName), $v1, mIRC $version)
            var %loc.Ident = $iif($readini($locGlobalConfig.AutoConnect, n, %loc.Current, sIdent), $v1, mirc)
            var %loc.Delay = $readini($locGlobalConfig.AutoConnect, n, %loc.Current, iDelay)
            
            ; Connect to the server
            if (%loc.Delay != $null) {
                if (%loc.Nick != $null) {
                    timerglo.AutoConnect. [ $+ [ %loc.Current ] ] -o 1 %loc.Delay server $iif(%loc.NewWindow, -m) %loc.Address $iif(%loc.SSL, $+(+, %loc.Port), %loc.Port) %loc.Password -i %loc.Nick %loc.AltNick $+(%loc.Ident, @fake-ident-email.com)) %loc.RealName
                }
                else {
                    timerglo.AutoConnect. [ $+ [ %loc.Current ] ] -o 1 %loc.Delay server $iif(%loc.NewWindow, -m) %loc.Address $iif(%loc.SSL, $+(+, %loc.Port), %loc.Port) %loc.Password
                }
            }
            else {
                if (%loc.Nick != $null) {
                    server $iif(%loc.NewWindow, -m) %loc.Address $iif(%loc.SSL, $+(+, %loc.Port), %loc.Port) %loc.Password -i %loc.Nick %loc.AltNick $+(%loc.Ident, @fake-ident-email.com)) %loc.RealName
                }
                else {
                    server $iif(%loc.NewWindow, -m) %loc.Address $iif(%loc.SSL, $+(+, %loc.Port), %loc.Port) %loc.Password
                }
            }
            
            ; Set the 'New Window' flag to open all future server connections in a new connection window.
            if (%loc.NewWindow == 0) %loc.NewWindow = 1
            
            
            unset %loc.Address %loc.Port %loc.Password %loc.SSL %loc.Nick %loc.AltNick %loc.RealName %loc.Ident
        }
        
        
        ; Go to next entry
        unset %loc.Current
        inc %loc.Count
        continue
        
        :error
        echo -a * AutoExec Error in atimer.AutoConnect %loc.Current : $error
        write $locError $logstamp - AutoExec Error in atimer.AutoConnect %loc.Current : $error
        unset %loc.Current
        ; reseterror
        inc %loc.Count
        continue
    }
    
    
    return
    
    :error
    echo -a * AutoExec Error in atimer.AutoConnect : $error
    write $locError $logstamp - AutoExec Error in atimer.AutoConnect : $error
    ; reseterror
}


alias atimer.AutoJoin {
    ; Cycle through each channel entry in [Config] sAutoJoinList
    var %loc.AutoJoinList = $readini($locServerConfig, n, Config, sAutoJoinList)
    var %loc.Count = 1
    
    while (%loc.Count <= $gettok(%loc.AutoJoinList, 0, 32)) {
        var %loc.Current = $gettok(%loc.AutoJoinList, %loc.Count, 32)
        
        ; Check if already in channel
        if ($me !ison %loc.Current) {
            var %loc.Key = $readini($locServerConfig.AutoJoin, n, %loc.Current, sKey)
            var %loc.Delay = $readini($locGlobalConfig.AutoJoin, n, %loc.Current, iDelay)
            
            ; Join the channel
            if (%loc.Delay != $null) {
                timer [ $+ [ $cid ] $+ ] .AutoJoin. [ $+ [ %loc.Current ] ] join %loc.Current %loc.Key
            }
            else {
                join %loc.Current %loc.Key
            }
        }
        
        ; Go to next entry
        inc %loc.Count
        continue
        
        :error
        echo -a * AutoExec Error in atimer.AutoJoin %loc.Current ( CID: $cid ) : $error
        write $locError $logstamp - AutoExec Error in atimer.AutoJoin %loc.Current ( CID: $cid ) : $error
        ; reseterror
        inc %loc.Count
        continue
    }
    
    
    return
    
    :error
    echo -a * AutoExec Error in atimer.AutoJoin ( CID: $cid ) : $error
    write $locError $logstamp - AutoExec Error in atimer.AutoJoin ( CID: $cid ) : $error
    ; reseterror
}


alias atimer.AutoCommand {
    ; Cycle through each command entry in [Config] sAutoCommandList
    var %loc.AutoCommandList = $readini($locServerConfig, n, Config, sAutoCommandList)
    var %loc.Count = 1
    
    while (%loc.Count <= $gettok(%loc.AutoCommandList, 0, 32)) {
        var %loc.Current = $gettok(%loc.AutoCommandList, %loc.Count, 32)
        
        ; Loop through each command line
        var %loc.Count2 = 1
        while ($readini($locServerConfig.AutoCommand, n, %loc.Current, %loc.Count2) != $null) {
            raw $readini($locServerConfig.AutoCommand, n, %loc.Current, %loc.Count2)
            
            inc %loc.Count2
            continue
            
            :error
            echo -a * AutoExec Error in atimer.AutoCommand %loc.Current entry %loc.Count2 ( CID: $cid ) : $error
            write $locError $logstamp - AutoExec Error in atimer.AutoCommand %loc.Current entry %loc.Count2 ( CID: $cid ) : $error
            ; reseterror
            inc %loc.Count2
            continue
        }
        
        inc %loc.Count
        continue
        
        :error
        echo -a * AutoExec Error in atimer.AutoCommand %loc.Current ( CID: $cid ) : $error
        write $locError $logstamp - AutoExec Error in atimer.AutoCommand %loc.Current ( CID: $cid ) : $error
        ; reseterror
        inc %loc.Count
        continue
    }
    
    
    return
    
    :error
    echo -a * AutoExec Error in atimer.AutoCommand ( CID: $cid ) : $error
    write $locError $logstamp - AutoExec Error in atimer.AutoCommand ( CID: $cid ) : $error
    ; reseterror
}

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...


×
×
  • Create New...