#--------------------------------------------------------------------- # dalnetkeepop.tcl # TCL script for IRC bot eggdrop # # This scripts attempts to keep the bot opped on the dalnet channels # the bot monitors. # The bot must be able to get operator status on each channel # through chanserv. # # v0: 14-May-2002 #--------------------------------------------------------------------- #--------------------------------------------------------------------- # Bindings # bind time: check every minute op status of the bot # bind join: request op status upon joining a channel # bind mode: on a bot deop, request op # Unbind the join bind in case chanserv is set to autoop on join. #--------------------------------------------------------------------- bind time - * dalnetkeepop:time #bind join - * dalnetkeepop:join bind mode - * dalnetkeepop:mode #--------------------------------------------------------------------- # Every minute check if opped on all channels #--------------------------------------------------------------------- proc dalnetkeepop:time { args } { # check all channels for operator status foreach chan [channels] { if {![validchannel $chan]} { continue } if {[botisop $chan]} { continue } dalnetkeepop:reop $chan } } #--------------------------------------------------------------------- # Bot joined the channel? #--------------------------------------------------------------------- proc dalnetkeepop:join { nick uhost hand chan } { global botnick if {$nick != $botnick} { return 0 } dalnetkeepop:reop $chan } #--------------------------------------------------------------------- # Bot got deopped? #--------------------------------------------------------------------- proc dalnetkeepop:mode { nick uhost handle chan args } { global botnick #----------------------------------------------------------- # Check if it is a deop mode # If the bot got deopped, request op. #----------------------------------------------------------- # below 1.3.23 passes 1 arg, otherwise 2 args. Join them. set modechange [join $args] if {[scan $modechange "-o %s" nickgotdeop] != 1} { return 0 } if {$nickgotdeop != $botnick} { return 0 } dalnetkeepop:reop $chan } #--------------------------------------------------------------------- # Reop and time stamp #--------------------------------------------------------------------- proc dalnetkeepop:reop { chan } { global botnick global dalnetkeepopstamp # Use timestamp to avoid too many requests for +o in case of # "mode -ooo bot bot bot". if {![info exists dalnetkeepopstamp]} { set dalnetkeepopstamp 0 } set chantime "$chan [unixtime]" if { $chantime == $dalnetkeepopstamp } { return } set chanserv chanserv@services.dal.net putserv "PRIVMSG $chanserv :OP $chan $botnick" set dalnetkeepopstamp $chantime } putlog "Dalnet keepop version 0 loaded."