w########################################################################### ########################################################################## ## ## ## shtfck ## 2.07 ## ## ## ## + IRC: benny@IRCnet - Email: benny@ricecows.org + ## ## ########################################################################## ########################################################################## ## ## ## If you want to edit this, you should use nano, pico, vi, joe etc. ## for editing and customizing your EPIC/ircII. ## ## ## Sorry for those basic ircII users, your shitty client ## doesn't support colors or anything good. ## START USING EPIC! ## ## ## thanks and / Feenix / hrnt / Dethnite / jm / ## greetings : and all those nice ppl on #EPIC @ EFnet ## ## ## ######################################################################## ######################################################################### # # 2.07 / getnick. you can regain your nick automaticly ( if it's stolen # by italians. /nickmgr nick ; /assigni nickmgr 1 ; and that's all. # Also some whois features fixed. maybe statusbar, can't remember. # # ps. If you reload the script, you'll have do all regainin again. # ofcourse becouse we dump everything ;) # ## Editing tools ## #  #  #  #  ## Cleaning IRC ## dump all # NOW WE ARE CLEAN ;) # ## Logo ## ECHO ECHO ECHO 3Shit9fuck 3Inc. ECHO ECHO ## Aliasses ## ALIAS ADDNICK {if ([$1]) { addnick $1- };tk.addmsg $0 $tk.msglist} ALIAS BLIST {mode * +b} ALIAS CL {clear} ALIAS CLA {clear all} ALIAS CYCLE {@ :temp = C;leave *;wait;join $temp} ALIAS DEV {mode * -vvvvvv $0-} ALIAS DOP {mode * -oooooo $0-} ALIAS DEOP {mode * -oooooo $0-} ALIAS ELIST {mode * +e} ALIAS ILIST {mode * +I} ALIAS INVITE {if ([$1]) {//invite $0 $1} {//invite $0 $C}} ALIAS JOIN {switch ($*) {(*,*) {join $before(, $*);join $after(, $*)};(#*) (&*) (0) (-*) (!*) (+*) { //join $* };() { //join -i };(*) { //join #$* }}} ALIAS KB {kicknban} ALIAS L {list *} ALIAS MO {mode $C $*} ALIAS HMODE {^assign fakechan $1;^assign fakemode $3-;^assign fakedid $2;^assign fakewhattodo $0;hfake${fakewhattodo} 7ù0í7ù mode14/10${fakechan} 14[0${fakemode}14] by 0${fakedid};^assign -fakechan;^assign -fakedid;^assign -fakemode} ALIAS MMODE {quote mode $0-} ALIAS MODEREPLY {@ :modechangg = [$5];if (modechangg == [+i]) ;^assign unrestrlist $unrestrlist $4 $4} ALIAS N {names *} ALIAS NECHO {^xecho -level crap $ni $0-} ALIAS NICKLIST {echo 4+6|4+ Nickname List: $tk.msglist} ALIAS NOTWORD {if ([$0] > 0) {if (([$0] > 1) && ([$0] < rmatch($~ $1-))) { @ nw.sep = [ ] } { @ nw.sep = [] };@ function_return = [$(1-${[$0]-1})] ## [$nw.sep] ## [$(${[$0]+1}-)]} {@ function_return = [$1-]}} ALIAS OP {mode * +oooooo $0-} ALIAS Q {query $0} ALIAS P {part *} ALIAS PECHO {echo} ALIAS PCHAN {PING *} ALIAS SECRET{mo +s} ALIAS TK.ADDMSG {@ tk.matched = rmatch($0 $^\1-);if (tk.matched) {@ tk.msglist = [$(0-${tk.matched-1}) $(${tk.matched+1}-)]} { @ tk.msglist = [$(0-${tk.msgmax-1})] };@ tk.msgcnt = 0;^assign -tk.matched} ALIAS TK.DELNICK {if (tk.msgcnt == 0) {echo 4+6|4+ Nickname: $word(0 $tk.msglist) removed.;@ tk.msglist = [$notword(1 $tk.msglist)]} {echo 4+6|4+ Nickname: $word(${tk.msgcnt-1} $tk.msglist) removed.;@ tk.msglist = [$notword($tk.msgcnt $tk.msglist)]};type ^U} ALIAS TK.GETMSG {@ tk.msgcnt = tk.msgcnt + [$0];if ( #tk.msglist < tk.msgcnt ) {@ tk.msgcnt = 1};if (tk.msgcnt <= 0) {@ tk.msgcnt = #tk.msglist};@ tk.junk = K ## [msg];type ^U$tk.junk $^\^^{[$($tk.msgcnt)]} } ALIAS V {mode * +vvv $0-} ALIAS VERCHAN {ctcp * version} ALIAS VOICE {mode * +vvvvvv $0-} ALIAS W {who *} ALIAS WII {whois $0 $0} ALIAS RELOAD {load .ircrc} ALIAS WW {whowas $0} ALIAS UNTOPIC { topic -$0 } ## Assings ## ASSIGN TK.MSGMAX 5 ## Bindigs ## BIND ^B SELF_INSERT BIND ^I PARSE_COMMAND ^tk.getmsg 1 $tk.msglist BIND ^R PARSE_COMMAND ^tk.getmsg -1 $tk.msglist BIND ^V REVERSE BIND ^W NEXT_WINDOW BIND z SELF_INSERT BIND ^[1 PARSE_COMMAND window REFNUM_OR_SWAP 1 BIND ^[2 PARSE_COMMAND window REFNUM_OR_SWAP 2 BIND ^[3 PARSE_COMMAND window REFNUM_OR_SWAP 3 BIND ^[4 PARSE_COMMAND window REFNUM_OR_SWAP 4 BIND ^[5 PARSE_COMMAND window REFNUM_OR_SWAP 5 BIND ^[6 PARSE_COMMAND window REFNUM_OR_SWAP 6 BIND ^[7 PARSE_COMMAND window REFNUM_OR_SWAP 7 BIND ^[8 PARSE_COMMAND window REFNUM_OR_SWAP 8 BIND ^[9 PARSE_COMMAND window REFNUM_OR_SWAP 9 BIND ^[0 PARSE_COMMAND window REFNUM_OR_SWAP 10 BIND ^[q PARSE_COMMAND window REFNUM_OR_SWAP 11 BIND ^[w PARSE_COMMAND window REFNUM_OR_SWAP 12 BIND ^[e PARSE_COMMAND window REFNUM_OR_SWAP 13 BIND ^[r PARSE_COMMAND window REFNUM_OR_SWAP 14 BIND ^[t PARSE_COMMAND window REFNUM_OR_SWAP 15 BIND ^[y PARSE_COMMAND window REFNUM_OR_SWAP 16 BIND ^[u PARSE_COMMAND window REFNUM_OR_SWAP 17 BIND ^[i PARSE_COMMAND window REFNUM_OR_SWAP 18 BIND ^[o PARSE_COMMAND window REFNUM_OR_SWAP 19 BIND ^[a PARSE_COMMAND window REFNUM_OR_SWAP 20 ## Notifys ## NOTIFY benny # /notify # ## LOAD "$",8 ## LOAD autoop LOAD basical LOAD deban LOAD fe LOAD tabkey # /LOAD # # auto op # ASSIGN OP_LIST benny@irc.saitti.iqs.fi kmunkki@leviathan.hellfish.org reptile@bot.daug.net teukka@n0life.nestehukka.org ON #-JOIN 666 '% \\[$CHAN_LIST\\] \\[$OP_LIST\\] *' {timer ${10 + rand(10)} if \(!ischanop\($0 $1\)\) \{//mode $1 +o $0\}} ## Ignore ## IGNORE *!*@*.JP ALL IGNORE *!*@*.LV ALL IGNORE *!*MeetIRC@* ALL IGNORE *!*@*.IT CTCPS ## Ons (joins, parts, quits, actions, msgs, notices etc.) ## ON ^ACTION "* % *" {/echo 14\(03$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) * $0 $2-} ON ^CTCP "* *" {/echo 14\(03$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) $banner $0 requested $2 from 10$1} ON ^CTCP_REPLY "* *" {/echo 14\(03$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) $banner CTCP $2 reply from $0 : $3-} ON ^DCC_CHAT "* *" {/echo 14\(03$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) 14<4$00514> $1-} ON #-DCC_CHAT 55 "* *" {^tk.addmsg \=$0 $tk.msglist} ON ^JOIN "* * % *" {/echo 14\(03$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) $banner $0 14\[10$214\] has joined 11$1} ON ^KICK "* *" {/echo 14\(03$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) $banner $0 was kicked off channel 10$2 by 11$1 \($3-\) } ON ^LEAVE "* *" {/echo 14\(03$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) $banner $0 14\[10$214\] has left 11$1 \($3-\)} ON ^MODE "* % *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) $banner Modechange/10$1 \($2-\) by $0} ON ^MSG "*" xecho 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) 14[$014\(10$userhost()14\)] $1- ON ^MSG_GROUP "*" xecho [$0\($userhost()\)] $2- \($1\) ON #-MSG 55 "* *" {^tk.addmsg $0 $tk.msglist} ON ^NOTICE "*" xecho 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) 14-13$014\(6$userhost()14\)- $1- ON ^NOTICE_GROUP "*" xecho -$0\($userhost()\)- $2- \($1\) ON ^NOTIFY_SIGNOFF "*" xecho -b $0 signed off at $Z ON ^NOTIFY_SIGNON "*" xecho -b $0 [$1] signed on at $Z ON ^PUBLIC "* % *" { if \(match\(*${N}* $$2-\)\){ /echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) 14<${ischanop($0-1) ? [@] : ischanvoice($0-1) ? [+] : []}3$014> $2-} {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) 14<${ischanop($0-1) ? [@] : ischanvoice($0-1) ? [+] : []}$014> $2-} } ON ^SEND_ACTION "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) * $N $1-} ON #-SEND_DCC_CHAT 55 "* *" {^tk.addmsg \=$0 $tk.msglist} ON ^SEND_DCC_CHAT "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) 14\($014\) $1-} ON ^SEND_MSG "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) 14[10msg14\($014\)] $1-} ON #-SEND_MSG 55 "* *" {^tk.addmsg $0 $tk.msglist} ON ^CHANNEL_NICK "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) $banner 10$1 is now known as 11$2} ON ^SEND_NOTICE "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) 14[5notice14\(4$014\)] $1-} ON ^SEND_PUBLIC "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) ${ischanop($N $0)?[14\(@$N14\)${iscurchan($0)?[]:[/$rest(1 $0)]}]:[${ischanvoice($N $0)?[14\(+$N14\)${iscurchan($0)?[] :[/$rest(1 $0)]}]:[14\($N14\)${iscurchan($0)?[]:[/$rest(1 $0)]}] }]} $1-} ON ^CHANNEL_SIGNOFF "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) $banner $1 has quit \($2-\)} ON ^TOPIC "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) $banner $0 has changed the topic on channel 10$1 to: $2-} ON ^PUBLIC_NOTICE "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) 14-$0:10$114- $2-} ## Settings ## SET AUTO_RECONNECT ON SET AUTO_RECONNECT_DELAY 300 SET AUTO_REJOIN OFF SET AUTO_WHOWAS OFF SET BANNER 3:9:3: SET BEEP OFF SET CLIENT_INFORMATION / - Get the best, fuck the rest! SET CLOCK_24HOUR ON SET CMDCHARS - SET CONTINUED_LINE SET DCC_TIMEOUT 600 SET DCC_STORE_PATH ~ SET FLOOD_AFTER 6 SET FLOOD_RATE 2 SET FLOOD_USERS 5 SET FLOOD_WARNING OFF SET HIGH_BIT_ESCAPE 0 SET HELP_PATH /usr/share/epic4/help/ SET HELP_PROMPT ON SET HELP_WINDOW ON SET INPUT_PROMPT 14[$T14] SET LASTLOG 8192 SET MAIL 0 SET MIRC_BROKEN_DCC_RESUME ON SET REALNAME ++++++++++++++++ SET SCROLLBACK 8192 SET STATUS_AWAY [4,7zZzZ5,1] SET STATUS_FORMAT 5,15%T5,1 [%R] 5,15%*%=%@%N5,1%#%S%H%B%Q%A5,15%C5,1%+%I%O%M%F%L %D %U %W SET STATUS_NOTIFY [ Act: 5,15%F5,1 ] SET STATUS_QUERY [5,15%Q5,1] SET STATUS_USER SET STATUS_WINDOW + SET USER_INFORMATION EPIC4 - ++++++++++++++++ SET WORD_BREAK - ,.;: SET QUIT_MESSAGE ircII %s -/- !@#% # # ripped and customozied code (and my own =) # THANKS THANKS THANKS # ## Cannot join channel ## on ^471 "*" xecho -b [$1] cannot join channel (+l) there's no room for you! on ^473 "*" xecho -b [$1] cannot join channel (+i) THERE'S A PRIVATE PARTY!! on ^474 "*" xecho -b [$1] cannot join channel (+b) your ass is banned! on ^475 "*" xecho -b [$1] cannot join channel (+k) you must give the magic word! # /Cannot join channel # ## Away ## on ^306 "*" xecho -b You have been marked as being away [ $servername($lastserver()) / $Z ] on ^305 "*" xecho -b You are no longer marked as being away [ $servername($lastserver()) / $Z ] # /Away # ## Banlist ## on ^367 "*" xecho $1 ban $2 # /Banlist # ## Date ## on ^391 "*" xecho $banner [ $0 ] [ $2 $3 $4 $5 ] [ $7- ] # /Date # ## Names (Thanks for script itself jm and to Kimberly for editing) ## alias names scan alias sc scan alias scan { if (ischannel($0)) { @:chan = [$0] } { if (ischannel($C)) { @:chan = C } { return } } @:ops = chops($chan) @:non_ops = nochops($chan) @ :ch_t = ch_o = ch_v = ch_n = 0 FE ($channel($ch_name)) ch_1 { IF (left(1 $ch_1) == [@]) {@ ch_o++}{@ ch_d++} IF (mid(1 1 $ch_1) == [+]) {@ ch_v++} @ ch_t++ } xecho -w $winchan($chan) xecho -w $winchan($chan) 14[ 3Users 9$chan @$mid(10 6 $stime($time())) 14] fe ($strip(?. $channel($chan))) n1 n2 n3 n4 { xecho -w $winchan($chan) $[17]n1 $[17]n2 $[17]n3 $[17]n4 if (n4) { @:num += 4 } { if (n3) { @:num += 3 } { if (n2) { @:num += 2 } { @:num++ } } } } xecho -w $winchan($chan) 14[ 3stats Total $ch_t :: Op $ch_o :: Voice $ch_v 14] xecho -w $winchan($chan) } on ^353 "*" { xecho -w $winchan($2) xecho -w $winchan($2) 14[ 3Users 9$2 @$mid(10 6 $stime($time())) 14] fe ($3-) n1 n2 n3 n4 { xecho -w $winchan($2) $[17]n1 $[17]n2 $[17]n3 $[17]n4 if (n4) { @total_nicks += 4 } { if (n3) { @total_nicks += 3 } { if (n2) { @total_nicks += 2 } { @total_nicks++ } } } } } on ^366 "*" { @ :ch_t = ch_o = ch_v = ch_n = 0 FE ($channel($ch_name)) ch_1 { IF (left(1 $ch_1) == [@]) {@ ch_o++}{@ ch_d++} IF (mid(1 1 $ch_1) == [+]) {@ ch_v++} @ ch_t++ } xecho -w $winchan($1) 14[ 3stats Total $ch_t :: Op $ch_o :: Voice $ch_v 14] xecho -w $winchan($1) @total_nicks = 0 } # /Names # ### Whois ### ## Whois ## on ^311 "*" { xecho $1 14[$2@$314] xecho Realname : $5- } on ^378 "*" xecho Hostname : $5 $6 on ^307 "*" xecho Registered : Has a registered nick on ^319 "*" xecho Channel(s) : $2- #on ^301 "*" xecho Away : $0 - $1- on ^338 "*" xecho Server msg : $1 is a sick fuck on ^309 "*" xecho Security : $1- on ^320 "*" xecho Security : $1- on ^312 "*" xecho Server : $2 \($3-\) on ^317 "*" xecho Idle Time : $tdiff2($2) ${isnumber($3) ? [\($strftime($3 %D %T)\)] : [] } on ^313 "*" xecho Oper : $1 is a mIRC Operator on ^330 "*" xecho Auth : $2- $1 on ^318 "*" xecho End of WHOIS # /Whois # #WhoWas# on ^314 "*" { xecho $1 14[$2@$314] xecho Realname : $5- } on ^369 "*" xecho End of WHOWAS # /WhoWas # #No such# on ^401 "*" xecho -b there's no such user as $1 on ^402 "*" xecho -b there's no such user as $1 # /No such# ## On the ## on ^441 "*" xecho -b $1 isn't on the channel $2 # /On the # ## Join ## on ^332 "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) $banner Topic for $1: $2-} on ^324 "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) $banner Mode for channel $1 is $2-} on ^333 "* *" {/echo 14\(3$left(2 $stime($time()))$mid(11 5 $stime($time()))14\) Topic was set by $2 ${isnumber($3) ? [\($strftime($3 %D %T)\)] : []} } # /Join # ## KB ## /* Autokick and kicknban 1993, 1994 */ load guh @ auto.kicks = [] alias autokick { if (is_on($0) == [$0]) { push auto.kicks $uh($0) } { echo *** $0 is not on irc right now } } alias unkick { if (is_on($0) == [$0]) { @ auto.kicks = remw($uh($0) $auto.kicks) } { echo *** $0 is not on irc right now } } ^on #-join -30 '% % \\[$auto.kicks\\]' { kick $1 $0 autokicked echo *** AUTOKICK PROTECTION ACTIVATED AGAINST $0 mode $1 +b *!$2 } alias kicknban { kick * $0 $1- if (onchannel($0 $C)) { mode * +b $mask(3 $0*!$userhost($0)) } } #hop'94 # /KB # ## Away (msg things) ## alias _na.show { @ :nick = encode($tolower($0)) @ :away = encode($tolower($1-)) unless (_na.nick[$nick] == away) { @ _na.nick[$nick] = away return 1 } return 0 } on #^311 311 "*" ^assign _na.whois.$lastserver() 1 on #^318 311 "*" ^assign -_na.whois.$lastserver() on ^301 "*" { if (_na.whois[$lastserver()]) { xecho Away : $0 - $1- } elsif (_na.show($*)) { xecho Away : $0 - $1- } } # /away # ## -load nickmgr.irc ## -nickmgr yournick (alt alt2 alt 3...) ## assign 1 (2 3 4 5 ) # # nickmgr.irc - Nick management script for EPIC4-2.0 # Copyright (c) 2004 Brian Weiss # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. All redistributions, whether of source code or in binary form must # retain the above copyright notice, the above paragraph (the one # permitting redistribution), this list of conditions, and the following # disclaimer. # 2. The names of the author(s) may not be used to endorse or promote # products derived from this software without specific prior written # permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHORS `AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # Version: 0.2.2 # Last modified: 2004/07/02 # # This script uses serial number 422 for all /ON hooks. # # This script was borrowed from my EPIC4 script pack named DarkStar. # It can be found at one of the following locations: # # http://www.epicsol.org/darkstar/ # http://darkstar.nuthouse.org/ # http://www.got.net/~brian/epic4/scripts/darkstar/ # # Make sure this file gets loaded with the PF loader if (word(2 $loadinfo()) != [pf]) { load -pf $word(1 $loadinfo()); return; }; assign NICKMGR 0; assign NICKMGR_AUTO_ADD_NICKS 1; assign NICKMGR_IGNORE_NETSPLITS 0; assign NICKMGR_IGNORE_TIMEOUT 900; assign NICKMGR_NICKLIST; assign NICKMGR_SCAN_INTERVAL 30; assign NICKMGR_SCAN_TIMEOUT 900; assign NICKMGR.NICKCHANGE_TIMEOUT 60; alias nick (...) { if (NICKMGR && NICKMGR_AUTO_ADD_NICKS && findw($0 $NICKMGR_NICKLIST) == -1) { push NICKMGR_NICKLIST $0; }; //nick $*; }; # # nickmgr [[-a|-d] ...] ... # # Adds or removes nicks from NICKMGR_NICKLIST. The -a and -d options specify # which action to perform (add/delete). If neither option is provided then # -a will be assumed. # alias nickmgr (args) { ^local action add; ^local nicklist $NICKMGR_NICKLIST; if (!args) { assign NICKMGR_NICKLIST; return; }; while (:arg = shift(args)) { switch ($arg) { (-a) {@ action = [add]}; (-d) {@ action = [delete]}; (*) { if (action == [add]) { @ push(nicklist $arg); } else if (action == [delete]) { @ nicklist = remw($arg $nicklist); }; }; }; }; if (nicklist != NICKMGR_NICKLIST) { assign NICKMGR_NICKLIST $nicklist; } else { assign NICKMGR_NICKLIST; }; }; alias nickscan (...) { nickmgr.scan $*; }; alias nickmgr.add_timer (void) { timer -ref nickmgr -rep -1 -win -1 $NICKMGR_SCAN_INTERVAL nickmgr.scan; }; alias nickmgr.clean_ignore_list (void) { for array in ($getarrays(nickmgr.ignore.*)) { for ii from $numitems($array) to 1 { @ :ts = word(1 $getitem($array ${ii-1})); @ :diff = time() - ts; if (diff > NICKMGR_IGNORE_TIMEOUT) { @ delitem($array ${ii-1}); }; }; }; }; alias nickmgr.hook (nick, serv default "$servernum()", void) { if (!nick) return; if (NICKMGR && nickmgr.wantnick($nick)) { nickmgr.nickchange $nick; }; }; # # Adds a nick to the nick manager's ignore list. This allows # signoffs that appear to be netsplits to be ignored, even by # the nickmgr.scan alias. # alias nickmgr.ignore (nick, serv default "$servernum()", void) { if (!nick) return; nickmgr.clean_ignore_list; if ((:item = matchitem(nickmgr.ignore.$serv $nick *)) > -1) { @ setitem(nickmgr.ignore.$serv $item $nick $time()); } else { @ setitem(nickmgr.ignore.$serv $numitems(nickmgr.ignore.$serv) $nick $time()); }; }; # # Server-specific version of Jeremy Nelson's $is_on() function. # alias nickmgr.is_on (nick, serv default "$servernum()", void) { if (!nick) return; xeval -s $serv { stack push on 303; ^on ^303 * { stack pop on 303; return $0; }; wait for ison $nick; }; }; alias nickmgr.nickchange (nick, serv default "$servernum()", void) { if (!nick || serv < 0 || !isconnected($serv) || nick == servernick($serv)) return; # Make sure we don't send more than one request at a time to a server. if (NICKMGR.NICKCHANGE_PENDING[$encode($serv)]) return; xecho -b NICKMGR: Changing nick on $servername($serv) to $nick; @ NICKMGR.NICKCHANGE_PENDING.$encode($serv) = [$nick $time()]; ^on #-raw_irc 422 "$servernick($serv)!% NICK *" { @ NICKMGR.NICKCHANGE_PENDING.$encode($servernum()) = []; ^on #-raw_irc 422 -"$servernick()!% NICK *"; }; xeval -s $serv { nick $nick; }; }; ++ ## GETNICK ## ++ # # This will check each nick in $NICKMGR_NICKLIST, for each server # connection, until it either 1) finds one available, 2) reaches the end # of the list, or 3) reaches a nick less desirable than our current nick. # # In an attempt to ensure that servers don't get flooded with ISON requests # due to lag, a global variable in the NICKMGR.SCAN_PENDING structure will be # created containing a timestamp of when the scan began. While this variable # exists no scans will be allowed to take place for that server. # alias nickmgr.scan (void) { @ :nlist = NICKMGR_NICKLIST; if (!NICKMGR || !nlist) return; nickmgr.clean_ignore_list; for serv in ($myservers(0)) { if (serv > -1 && isconnected($serv)) { if (!NICKMGR.SCAN_PENDING[$encode(serv)]) { @ NICKMGR.SCAN_PENDING.$encode($serv) = time(); for ii from 1 to $numwords($nlist) { @ :nick = word(${ii-1} $nlist); if (!nickmgr.wantnick($nick $serv)) { break; } else if (matchitem(nickmgr.ignore.$serv $nick *) < 0) { if (!nickmgr.is_on($nick $serv)) { nickmgr.nickchange $nick $serv; break; }; }; }; ^assign -NICKMGR.SCAN_PENDING.$encode($serv); }; }; }; }; # # Returns the specified nick if it is more desirable than our current # nick according to the value of $NICKMGR_NICKLIST. # alias nickmgr.wantnick (nick, serv default "$servernum()", void) { if (!nick || nick == servernick($serv)) return; @ :list = NICKMGR_NICKLIST; @ :index = findw($nick $list); @ :c_index = findw($servernick($serv) $list); if (index > -1) { if (c_index == -1) { @ function_return = nick; } else if (index < c_index) { @ function_return = nick; }; }; }; # # Remove ignored nicks when they rejoin. # on #-join 422 "*" { @ :serv = servernum(); @ :item = matchitem(nickmgr.ignore.$serv $0); if (item > -1) { @ delitem(nickmgr.ignore.$serv $item); }; }; on #-raw_irc 422 "% NICK *" { @ :nick = before(1 ! $0); nickmgr.hook $nick; }; on #-raw_irc 422 "% QUIT *" { @ :nick = before(1 ! $0); @ :reason = after(1 : $2-); if (NICKMGR_IGNORE_NETSPLITS && match("%.%.% %.%.%" "$reason")) { nickmgr.clean_ignore_list; nickmgr.ignore $nick; }{ nickmgr.hook $nick; }; }; on #-timer 422 "*" { if (!timerctl(REFNUM nickmgr)) nickmgr.add_timer; foreach NICKMGR.SCAN_PENDING xx { @ :diff = time() - NICKMGR.SCAN_PENDING[$xx]; if (diff > NICKMGR_SCAN_TIMEOUT) { ^assign -NICKMGR.SCAN_PENDING.$xx; }; }; foreach NICKMGR.NICKCHANGE_PENDING xx { @ :diff = time() - NICKMGR.NICKCHANGE_PENDING[$xx]; @ :serv = decode($xx); if (diff > NICKMGR.NICKCHANGE_TIMEOUT) { ^on #-raw_irc 422 -"$servernick($serv)!% NICK *"; ^assign -NICKMGR.NICKCHANGE_PENDING.$xx; }; }; }; defer nickmgr.scan; defer nickmgr.add_timer; ## GETNICK ##