############################################################################## @ vdate = [07/18/99 01:05am] @ ZVers = [4.8] ############################################################################## # _____ # / # -/- script (c) # /____ written by Zelix (Peter Handel) # # Special thanks to my 48 beta testers, and especially: # HDClown, Kingfisch, Krom, jsanford, TDO, Jalapeno_, and JD486 # # ...and all mah homies on #appleiigs and #LiCe # ############################################################################## # # Please report any bugs or comments to: # handel@ufl.edu # @ off_mir = [http://www.cise.ufl.edu/~phandel/] # ############################################################################## # # Usage of Zscript implies releasing the author of any and all responsibility # for its actions. So, if it causes your cat to eat your new shoes, it's not # my fault. :) # # Zscript is Copyright (c) 1995 Peter F. Handel. Please distribute widely. # # This program is shareware. If you find yourself using it after a reasonable # amount of time, please send 10 dollars to the following address: # # Peter Handel # 1500 St. Olaf Avenue # Northfield, MN 55057-1001 # # In return, you'll receive: # 1) the latest version of Zscript Registered (no shareware notices) # 2) a registration number # 3) dccstat.irc, a small script that only does Zscripts dcc functions # (great for use with another script) # 4) Technical support # ############################################################################## eval clear -unhold eval assign loadstart $time() if (NOVICE==[OFF]) { if (ex) {zecho Do not load both Zscript and PhoEniX- exiting.;//exit} if (ver.num) {zecho Do not load both Zscript and LiCe- exiting.;//exit} if (fix.ver) {zecho Do not load both Zscript and LiCe- exiting.;//exit} if (ppvers) {zecho Do not load both Zscript and PurePak- exiting.;//exit} if (tbvers) {zecho Do not load both Zscript and TextBox- exiting.;//exit} @ nov_warning = [on] } ^set novice off ### The main echos used throughout the script alias zecho {^xecho [Hey!] $0-} alias iecho {^xecho -level crap *I* $0-} alias recho {^xecho -level crap \^rem\^ $0-} alias xdecho {notice $0 $1-} alias secho {echo \[$tolower($Z)\] $0-} alias aecho {^xecho [ANTI] $0-} assign _V  @ space = [ ] alias spr {^set input_prompt $0-} eval set status_format %Z ### Directories @ recfile = [$HOME/.record] @ messages = [$HOME/.messages] @ personalf = [$HOME/.personal] @ xdcclog = [$HOME/.xdcclog] @ personalbak = [$HOME/.personal.bak] load .personal.bak007 # for some strange reason, the status bar won't work unless you load something alias loadbars { @ percentbar = [$0] @ rbar = percentbar / 2 @ lbar = 50 - rbar @ dabar = [\[$([$rbar]Space)\<$percentbar\>$([$lbar]Space)\]] eval ^set status_user3 Loading Zscript: $dabar } loadbars 3 ### This is so that we have some defaults DO NOT CHANGE (it's pointless) # (they'll be overwritten by .personal) @ agbomb = [off] @ ak = [on] @ autoget = [off] @ banprotect = [on] @ beeponmsg = [off] @ bkickmsg = [...and, stay out!] @ bringback = [on] @ cinfo = [Jesus is Lord!] @ compression = [off] @ dccst = [on] @ deopb = [on] @ dtimer = [2] @ favchan = [#appleiigs] @ fingermsg = [Find anything interesting?] @ flafter = [3] @ flrate = [3] @ forcedtimer = [2] @ gdcc = [on] @ idle = [5] @ iglp = [off] @ igtime = [100] @ kickmsg = [...and, Goodbye] @ ldcc = [on] @ mailcheck = [on] @ massdeopprotect = [on] @ max[ctcp] = [5] @ max[kick] = [4] @ max[kill] = [3] @ max[mode] = [6] @ max[msgs] = [5] @ max[nick] = [5] @ max[notice] = [5] @ max[public] = [6] @ max[topic] = [5] @ maxblk = [16384] @ minblk = [256] @ miw = [off] @ nhp = [off] @ nicestart = [on] @ nickcheckonjoin = [off] @ noignore = [Zelix] @ optdcc = [on] @ pingjoke = [off] @ pingmsg = [Got me 240Sec of laggy puddin'...aw yeah!] @ pnhp = [off] @ rejoin = [on] @ remcalc = [inst] @ pends = [on] @ reminders = [on] @ replies = [off] @ shortstart = [off] @ signoffmsg = [Apple IIGS Forever!] @ sma = [on] @ atmpt = [0] @ recnum = [0] @ msgnum = [0] @ friends = [0] @ enemies = [0] @ dccs = [0] @ sdccs = [0] @ Zups = [0] @ Splt = [0] @ Pinged = [0] @ pingall = [0] @ fingered = [0] @ fingerall = [0] @ versioned = [0] @ versall = [0] @ startupt = [$time()] # Custom notify (concept by Jalapeno_, code by Zelix) alias notify { if (![$0]) {//notify} {if (rmatch($0 $NOTIFYLIST)) {secho $0 is already on the notify list} {//notify $0 if (left(1 $0)==[-]) { @ oldlist = [$notifylist];^assign -notifylist @ foo_v = 0 while (word($foo_v $oldlist)) { if (word($foo_v $oldlist)!=strip(- $0)) {@ notifylist = [$notifylist] ## [$word($foo_v $oldlist) ]} @ foo_v = foo_v + 1 } @ n_st1 = [$strip($toupper($left(1 $strip(- $0))) $n_st1)] } {@ NOTIFYLIST = [$NOTIFYLIST] ## [$strip(+ $0) ]} } } if ([$1]) {notify $1-} update_totalt } alias less { ^alias zecho ^xecho *** ^assign -_V if (![$0]) {zecho Making Zscript less bright...} } alias more { ^alias zecho {^xecho [Hey!]} ^assign _V  if (![$0]) {zecho Making Zscript bright again...} } alias noscript { if (![$0]) {zecho Other ppl won't know that you're running a script\; /script to turn back on} # ^assign nickcheckonjoin off;^assign rejoin off;^assign autoget off;^assign gsservm off ^assign replies off ^EVAL ^set CLIENT_INFO $cinfo ^assign pingjoke off ^alias a {away Beep me} } alias script { ^assign replies on ^eval ^set client_info $cinfo [Zscript] # ^assign rejoin on;^assign massdeopprotect on;^assign autoget on^assign gsservm on ^alias a {away All messages will be logged- \[Away since $Z\]} if (![$0]) {zecho Replies have been set back to ON} } ### Personal Info # This is for the optimum DCC Send routine # make these your countries last 3 digits (including .'s!) assign local com edu mil net org # Compression patterns- file won't be compressed if last 3 letters match: #@ comp_pat = [arc cmp gif .gz iff jpg lha lzh mpg sea shk sit tgz *.Z zip zoo] assign zfilelenr 126845 assign zfilelen 126845 loadbars 5 #^on ^exec "zch *" { # ^assign -zfilelen # if ([$8]==[Zscript]) {@ zfilelen = [$4]} # if ([$9]==[Zscript]) {@ zfilelen = [$5]} # if (zfilelen) { # if ([$zfilelen]!=[$zfilelenr]) { # echo Possible hacked version of Zscript. Please get fresh copy from $off_mir # } # } #} #^exec -name zch ls -l Zscript @ versionmsg = [Zscript v$ZVers by Zelix] assign default_server.0 irc.winternet.com assign default_server.1 irc.ilstu.edu assign default_server.2 irc.ecn.uoknor.edu assign default_server.3 cs-pub.bu.edu assign default_server.4 irc.colorado.edu assign default_server.5 cs-pub.bu.edu 6666 assign default_server.6 irc.ecn.uoknor.edu 8888 assign default_server.7 irc.ecn.uoknor.edu assign servideal1 hopper.mtsu.edu 6667 assign servideal2 frank.mtsu.edu 6667 alias ss { echo \[oooo Default Servers (use /s to switch to it) oooo\] foreach default_server ii {if (ii==[0]) {echo \/s: $default_server.0}{echo \/s$ii\: $default_server[$ii]}} echo Current Server: $S echo \[oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo\] } spr Binding keys alias doswitch {parsekey switch_channels;qt} alias donext {parsekey next_window;qt} bind ^A parse_command ^doswitch bind ^B self_insert bind ^E parse_command ^doswitch bind ^F parse_command /flush bind ^I parse_command ^getmsg 1 $msglist bind ^N parse_command qkick $C $decode($lastnicker[$elow($C)]) QuickLastNickKick bind ^R parse_command ^donext bind ^X parse_command ^doswitch bind ^Z STOP_IRC bind meta1-[ meta2 bind meta1-O meta2 bind meta2-A parse_command ^go_forward bind meta2-B parse_command ^go_backward bind meta2-C forward_character bind meta2-D backward_charact bind ^[a parse_command dcs_onekey bind ^[b parse_command bk $: Quick Bankick bind ^[d parse_command dop $: bind ^[f parse_command ig $, bind ^[h parse_command fingerh $: bind ^[i parse_command join $I bind ^[k parse_command qkick $C $: QuicKick bind ^[m parse_command type ^U/msg $: bind ^[o parse_command op $: bind ^[v parse_command ver $: bind ^[w parse_command wii $: bind ^[z parse_command do_realstart bind ^[? parse_command zhelp ### When code (by Zelix) # Use: when = alias when {if ([$($0)]==[$2]) {$3-}{wait -CMD when $0-}} alias when1 {if ([$($0)]==[$2]) {$3-} {timer 1 when1 $0-}} ### Snazzy help in status bar (concept by Macro@sandland.nki.no, code by Zelix) alias go_forward { if ([$curr_pos]==[$ns_t]) {@ curr_pos = 1} {@ curr_pos = curr_pos + 1} do_u1 } alias go_backward { @ curr_pos = curr_pos - 1 if ([$curr_pos]==[0]) {@ curr_pos = ns_t} do_u1 } alias do_u1 {^eval ^set status_user1 \[$curr_pos\/$ns_t\] $u1[$curr_pos]\ } alias ahelp { ^set status_format %X ^bind meta2-A parse_command ^go_forward ^bind meta2-B parse_command ^go_backward ^assign st1_ok 0 ^assign u1.1 Welcome to Zscript. Use the arrow keys to scroll this, z to exit ^assign u1.2 Zscript is shareware. If you like it, please send me 10 dollars. ^assign u1.3 Type /sw for more info on where to send the 10 dollar shareware fee ^assign u1.4 To see the main help, type /zhelp. You can toggle the reminders with /rem ^assign u1.5 Use /fld to toggle ignoring flooders \(currently $chfl - use /zhelp flood\) ^assign u1.6 To get back to this help after exiting, use /ahelp ^assign u1.7 To disable this on startup, use /nicestart, then /save your settings ^assign u1.8 Use /save to save all your settings, including friends and xdcc files @ ns_t = [8] @ curr_pos = [1] do_u1 } alias do_realstart { ^set -status_user3 set_format ^bind meta2-A backward_history ^bind meta2-B forward_history @ st1_ok = [1] update_totalt update_uptime } ### Startup screen #alias strt {echo \[OOO:::. . ._Zscript v$Zvers $vdate loading_. . .:::OOO\]} alias start { #echo ______ _ _ #echo |___ / (_) | | #echo / / ___ ___ _ __ _ _ __ | |_ #echo / / / __|/ __| '__| | '_ \\| __| #echo / /__\\__ \\ (__| | | | |_) | |_ v$Zvers $vdate #echo /_____|___/\\___|_| |_| .__/ \\__| written by Zelix #echo |_| #echo \ ^assign fz echo $fz _____________________ echo $fz < > echo $fz .----------\\ _____________ /-----------------, echo $fz \\ \\/ / / / echo $fz \\ ______ ____ _____ / _ /_____ _________ / echo $fz \\ < ___// ___|| __ \\ | || __ \\\\__ __/ / echo $fz \\ \\ \\ / / | |__> >| || |__> > | | / echo $fz > \\ \\< < | _ / | || ___/ | | < echo $fz / __\\ \\\\ \\___ | |/\\ \\/| || | | | \\ echo $fz / /_____>\\____||_| \\_\\|_||_| |_| \\ echo $fz / / / \\ echo $fz / / /____________/\\ \\ echo $fz '----------------/ \\-----------` echo $fz <_____________________> written by Zelix echo v$Zvers $vdate # echo $fz echo $fz if ([$rand(99)]>[50]) { echo 'If you confess with your mouth, "Jesus is Lord," and believe in your heart that God raised him from the dead, you will be saved'-- Romans 10:9 } { echo Jesus said to him, 'I am the way, and the truth, and the life\; no one comes to the Father, but through Me'-- John 14:6 } echo $fz echo -> Special thanks to SrfRog and #LiCe for numerous invaluable ideas <- echo $fz } on ^window "% --- Recursive call to irc_io() - careful" {echo $1- \(This means that you should recompile your client with debug set off\)} alias done {zecho Done! Toggle reminders with /rem or type /Zhelp for help.} ## Zscript update/upgrade code alias Zupgrade { zecho attempting Zscript upgrade. if (reminders!=[off]) { recho If this doesn't work, try /ctcp Zelix xdcc list } if (autoget!=[on]) { @ autoget = [on] ^msg Zelix Zscript $zvers upgrade request $vdate ^timer 5 @ autoget = [off] } { ^msg Zelix Zscript $zvers upgrade request $vdate } } alias Zupdate Zupgrade loadbars 10 ### Set values spr Doing set's ^set NOVICE OFF ^set AUTO_WHOWAS OFF ^set BEEP ON ^set BEEP_MAX 3 ^set BOLD_VIDEO ON ^set CLOCK ON ^set CLOCK_24HOUR OFF ^set CLOCK_ALARM NULL ^set -CONTINUED_LINE ^set DCC_BLOCK_SIZE 2048 ^set DEBUG 0 ^set DISPLAY ON ^set exec_protection off ^set FLOOD_USERS 1 ^set FLOOD_WARNING ON ^set FULL_STATUS_LINE ON ^set hide_private_channels off ^set HIGHLIGHT_CHAR BOLD ^set HISTORY 100 ^set HOLD_MODE OFF ^set INDENT ON ^set -INPUT_PROMPT ^set INPUT_PROTECTION ON ^set INSERT_MODE ON ^set INVERSE_VIDEO ON ^set LOG OFF ^set MAIL 2 ^set MAX_RECURSIONS 250 ^set NO_CTCP_FLOOD ON ^set NOTIFY_HANDLER NOISY ^set notify_on_termination off ^set SCROLL ON ^set SHOW_CHANNEL_NAMES ON ^set SHOW_END_OF_MSGS OFF ^set SHOW_NUMERICS OFF ^set SHOW_WHO_HOPCOUNT ON ^set STATUS_AWAY (A) ^set STATUS_CHANNEL %C ^set STATUS_CHANOP @ ^set STATUS_CLOCK %T ^set STATUS_HOLD [Hit RETURN] ^set STATUS_MODE (+%+) ^set STATUS_MAIL M:%M ^set STATUS_NOTIFY A:%F ^set STATUS_OPER * ^set STATUS_OVERWRITE (ow) ^set STATUS_QUERY Q:%Q ^set STATUS_UMODE (+%#) ^set STATUS_WINDOW ^ ^set SUPPRESS_SERVER_MOTD ON ^set TAB ON ^set TAB_MAX 3 ^set UNDERLINE_VIDEO ON ^set USE_OLD_MSG OFF ^set VERBOSE_CTCP OFF ^set WARN_OF_IGNORES ON alias set_format { ^set status_format %X%*%@%N%#%S%H%B%Q%A%+%I%O%M%F %W%>%Z%Y %U } spr Making toggles # Make Toggle v1.0 written by jsanford for Zscript # use: /maketoggle foo bar FOOFUNCTION @tg.nextslot = 0 alias worktoggle { if (match($1 on off)) {@ $tg.real[$0] = [$1]} {if ([$($tg.real[$0])]!=[on]) {@ $tg.real[$0] = [ON]} {@ $tg.real[$0] = [OFF]} } zecho $tg.pretty[$0] has been set $($tg.real[$0]) } alias maketoggle { eval ^alias $0 worktoggle $tg.nextslot \$\$0 @ tg.real[$tg.nextslot] = [$1] @ tg.pretty[$tg.nextslot] = [$2-] @ tg.nextslot = tg.nextslot + 1 } maketoggle shortstart shortstart Short startup screen maketoggle nicestart nicestart Ahelp startup help bar maketoggle rem reminders Reminders maketoggle gsserv gsservm GSServ mode maketoggle replies replies Ping, Version, and Finger replies maketoggle pj pingjoke Ping Joke mode maketoggle bbak bringback Bring back when away maketoggle iglp iglp Ignoring of bogus ping messages maketoggle ign ig Ignoring of floods maketoggle nc nickcheckonjoin Nick Check on Join maketoggle ak ak AntiKILL protection maketoggle mc mailcheck Mail Checking maketoggle re rejoin Rejoin maketoggle brj brj Ban on rejoin maketoggle bp banprotect Ban Protection maketoggle deopb deopb Kick on ban maketoggle dp massdeopprotect Mass deop protection maketoggle sma sma Save messages when away maketoggle pnhp pnhp Personal Netsplit Hack Protection maketoggle nhp nhp Channel Netsplit Hack Protection maketoggle ag autoget Autoget maketoggle agbomb agbomb Autoget automatic bomb protection maketoggle dccst dccst DCC Status indicator maketoggle optdcc optdcc Optimized Turbo DCC SEND maketoggle comp compression Compression of sent files maketoggle gdcc gdcc Graphical DCC Status indicator maketoggle pends pends Reminding sender of pending DCC alias ldcc { if (ldcc==[on]) { @ ldcc = [off] zecho Long DCC has been set OFF ^set_format } { @ ldcc = [on] zecho Long DCC has been set ON } if ((sdccs>=[1])||(dccs>=[1])) { if (ldcc==[ON]) { ^set status_format %Z \ $status_format5 } { set_format } dccstat } } alias pingmsg { if ([$0]) {@ pingmsg = [$0-]} if ([$pingmsg]==[]) { zecho No ping message defined } { qnotice $N $pingmsg -Zscript v$Zvers\- } } alias fingmsg { if ([$0]) {@ fingermsg = [$0-]} if ([$fingermsg]==[]) { zecho No finger message defined } { qnotice $N $fingermsg \[Zscript v$Zvers\] } } alias sc { if (![$0]) { //names $C } { if ([$left(1 $0)]!=[#]) { /sc #$0- } { //names $0 if ([$1]) { /sc $1- } } } } alias ww {/whowas $0;if ([$1]) {/ww $1-}} ### DCC Command lines spr DCC stuff alias dl //dcc list alias dg { if ([$0]) { //dcc get $0- } { if (lastoffer) { //dcc get $lastoffer ^assign -lastoffer } { zecho No last DCC offer found } } } ^on ^exec_error "gzipp *" {zecho $0-;@ gz_error = 1} ^on ^exec_error "gunzipp *" {zecho $0-;@ guz_error = 1} alias gzip {^exec -name gzipp gzip $0} alias gunzip {^exec -name gunzipp gunzip $0} alias ds { if ([$0]) { if ([$1]) { @ sender[$elow($0)] = [$time()] if (forcedtimer!=[0]) {@ dtimer = [$forcedtimer]} if (compression!=[off]) { do_comp $0- } if (dccst!=[off]) { if (!cfl[$felow($1)]) {zecho Please wait, setting things up \[this could take a moment\]} getfilelen $elow($0) $1 if (!cfl[$felow($1)]) {wait %dodir} } if (optdcc!=[off]) {dsopt $0 $1} {//dcc send $0 $1} if (pends!=[off]) {^timer 30 do_pend $0 $mid(${rindex(/ $1) + 1} 99 $1) 1} if (sfl[$elow($0)$felow($1)]) {zecho Sent $0 DCC SEND request for $1 \($convertk($sfl[$elow($0)$felow($1)])\k\)} {zecho Sent $0 DCC SEND request for $1} } { zecho You must supply a filename to send to $0 } } { echo You must supply a nickname and a filename to send } } alias do_pend { ^assign -dccp[$elow($0)][$felow($1)] ^on ^window * { if ([$1]==[SEND]&&[$3]==[Waiting]) { @ dccp[$elow($2)][$felow($6)] = [waiting] } } //dcc list ^on window -* if (dccp[$elow($0)][$felow($1)]==[waiting]) { if ([$2]!=[2]) { /qnotice $0 To get $1\, type /dcc get $N $1 ^timer 90 do_pend $0 $1 2 } { /qnotice $0 Closing offer of $1 \(waited 120sec\) //^dcc close send $0 $1 zecho Closed offer of $1 to $0 \(waited 120sec\) } } } loadbars 15 alias do_comp { zecho Compression has been disabled temporarily due to timing bugs @ compression = [off] } alias dcs_onekey { purge dcs_do;purge dcg_do;@ line_do = [0] ^on ^window "*" { @ line_do = line_do + 1 if ([$1]==[send]) {@ dcs_do[$line_do] = [$encode($2)]} if ([$1]==[get]) {@ dcg_do[$line_do] = [$encode($2)]} } //dcc list ^on window -* foreach dcs_do zs { zecho Closed DCC SEND to $decode($dcs_do[$zs]) //^dcc close send $decode($dcs_do[$zs]) } foreach dcg_do zg { zecho Closed DCC GET from $decode($dcg_do[$zg]) //^dcc close get $decode($dcg_do[$zg]) } @ sdccs = [0];@ dccs = [0] ^timer 2 dccstat_off zecho Cleared all DCCs } alias dcg {//dcc close get $0-} alias dcs {//dcc close send $0-} alias dcx {//dcc close chat $0-} alias dc {//dcc chat $0-;@ chatter[$elow($0)] = [$time()]} alias dr {//dcc rename $0-} alias qmode quote MODE $0 $1 $2- alias qnotice quote NOTICE $0 :$1- alias qkick quote KICK $0 $1 :$2- alias i {//invite $0 $C;if ([$1]!=[]) {/i $1-}} on ^invite * {echo *** $0 invites you to $1 (press I to join)} alias i_sil {quote invite $0 $C;if ([$1]!=[]) {i_sil $1-}} alias mi { if (![$0]) { zecho Usage: /mi \[Mass-invite to $C\] } { if (match($left(1 $0) \#)) {@ tchnl = [$0]}{@ tchnl = [#$0]} zecho Mass inviting everyone non-invisible in $tchnl to $C\: ^on ^names "*" {/eval i_sil $strip(\+\@ $1-);^on ^names -"*"} //names $tchnl ^assign -tchnl } } alias join {if (left(1 $0)==[#]||left(1 $0)==[&]||left(1 $0)==[-]) {//join $0-}{//join #$0}} alias j join alias jf {eval j $favchan} alias jw { if ([$0]) { ^window new name NewChan ^window scroll on if (left(1 $0)==[#]) {^window channel $0}{^window channel #$0} type ^R } } alias leave { if (![$0]) {if ([$1]) {//part $C :$1-}{//part $C}}{ if (left(1 $0)==[*]||left(1 $0)==[&]||left(1 $0)==[#]) {if ([$1]) {//part $0 :$1-}{//part $0}} {if ([$1]) {//part #$0 :$1-}{//part #$0}} } wait -cmd if (C) {qt} {^set -status_user} } alias l leave alias m msg alias w {if ([$0]) {whois $0-}{who *}} alias wi {whois $0 $0} alias wii wi # on -315 * {zecho --- End of WhoWas -----------------------------------} alias md {/qmode $C $0-} alias n {@ noignore = [$0]} alias ws /window grow 1 alias wg /window shrink 1 alias strlen {@ t_str = [$0-];@ function_return = [$@t_str]} alias wordcnt {@ t_wc = [$0-];@ function_return = [$#t_wc]} alias convertk {@ function_return = [$0]/1024} alias convertke {@ function_return = [$convertk($0)${[.]}${(([$0]*100)/1024)-(convertk($0)*100)}\k]} alias flfix {@ FUNCTION_RETURN = ([$0]/1024) * 1024} alias fx {if ([$0]<<[1]) {@ function_return = [0]}{@ function_return = [$0]}} alias ish {if (strip(\!\@\* $0-)!=[$0-]) {@ function_return = [1]}} alias fc {if ([$[1]0]==[#]){@function_return = [$0]}{@function_return = [#$0]}} # Following routines have been thought of by other ppl, but I didn't know that # when I wrote them. So, from my point of view, these are original by me alias elow {@ FUNCTION_RETURN = [$encode($tolower($0-))]} alias felow {@ FUNCTION_RETURN = [$encode($tolower($mid(${rindex(/ $0) + 1} 99 $0)))]} alias nickonly {@ FUNCTION_RETURN = [$left($index(! $0) $0)]} alias addonly {@ FUNCTION_RETURN = [$mid(${1+index(@ $0)} 99 $0)]} alias fonly {@ FUNCTION_RETURN = [$left($index(@ $0) $0)]} alias nameonly {@ FUNCTION_RETURN = [$mid(${1+index(! $0)} 99 $fonly($0))]} alias uhonly {@ FUNCTION_RETURN = [$mid(${1+index(\! $0)} 99 $0)]} alias test {echo 0:$0 1:$1 2:$2 3:$3 4:$4 5:$5 6:$6 7:$7 8:$8 9:$9 10:$10 11:$11} alias myadd {Userhost $N -CMD if ([$3]==[]) {^timer 30 myadd}{@ uh_cache[$elow($N)] = [$strip(~ $3)@$4]}} myadd alias docache { Userhost $0 -CMD if ([$4]!=[]) { @ uh_cache[$elow($0)] = [$strip(~ $3)@$4] } } alias zuh {@ function_return = [$uh_cache[$elow($0)]]} alias showcache {foreach uh_cache ii {echo $decode($ii) $uh_cache[$ii]}} alias purgecache {foreach uh_cache ii {^assign -uh_cache[$ii]};zecho Cache purged} alias purge {foreach $0 ii {^assign -$0[$ii]};^assign -ii;^assign -$0} alias d exec ls -lg alias dir exec ls -lag alias ls exec ls $0- alias up exec uptime alias pubcat {/exec -name pubcat cat $0} alias tom {/exec -o echo "$0-" | tom} alias tom2 {/exec -o echo "$0-" | tom | tom} # you must have tom compiled in your dir spr Main code ### Hourly Chime / Timer code on -timer "*" { if (rmatch($0 %:00%)) { zecho The time is now $0\. purge chatter purge sender } if (A==[]) { if ((sdccs==[0])&&(dccs==[0])) { if (rmatch($0 %:%%%)) { @ up_inprog = [0] update_uptime if (st1_ok!=[0]) { update_totalt } } } } } alias update_totalt { if ((st1_ok!=[1])||(sdccs!=[0])||(dccs!=[0])) { ^timer -delete 21 ^timer -refnum 21 5 update_totalt }{ if (n_st1) { ^set status_user1 $n_st1 $fix.time2($tdiff(${time()-startupt})) $status_user5 }{ ^set status_user1 $fix.time2($tdiff(${time()-startupt})) $status_user5 } } } # Fix.time @ twords = [second seconds minute minutes hour hours day days] alias fix.time { ^assign -f_rtn @ foo = 0 while (word($foo $0-)) { if (match($word($foo $0-) $twords)) { @ f_rtn = [$f_rtn] ## [$left(1 $word($foo $0-))] } { @ f_rtn = [$f_rtn] ## [$word($foo $0-)] } @ foo = foo + 1 } @ function_return = [$f_rtn] ^assign -f_rtn } alias fix.time2 {@ function_return = [$left(${index(m $fix.time($0-))+1} $fix.time($0-))]} loadbars 20 ### Log subroutine (by Zelix) alias log { exec touch $0 exec echo "$left(10 $stime($time())) $Z $safer($1-)" >> $0 } ### Away stuff eval on ^idle $idle {if (A==[]) {a}} alias a {away All messages will be logged- \[Away since $Z\]} alias away { if ([$0]) { rec_on //away $0- @ awaytime = [$Z] @ mailcheck = [off] reseta if (hijackl) {^assign -inf;@ gtim = [1800]} ^timer 2 rec_on } { //away if ([$recnum]==[]) {@ recnum = [0]} if ([$msgnum]==[]) {@ msgnum = [0]} @ mailcheck = [on] reseta rec_off if (hijackl) {@ inf = [1];@ gtim = [60]} ^timer 2 rec_off } } ON ^305 * { if ([$msgnum]>=[1]&&[$recnum]>=[1]) { echo *** Welcome back! \[$msgnum messages and $recnum records\] if ([$reminders]!=[off]) {recho Use /dmsgs and /drec to read,/kmsgs and /krec to kill}}{ if ([$msgnum]>=[1]&&[$recnum]==[0]) {echo *** Welcome back! \[You have $msgnum messages waiting\] if ([$reminders]!=[off]) {recho Use \/dmsgs to read, \/kmsgs to delete}} { if ([$recnum]>=[1]) {echo *** Welcome back! \[You have $recnum records waiting\] if ([$reminders]!=[off]) {recho Use \/drec to read, /krec to kill}}} if (([$recnum]<=[0])&&([$msgnum]<=[0])) { echo *** Welcome back!}} } # I just thought of this while I was holding a /msg conversation with # someone who was /away: This replaces the awaymessage with a lil' -away- # to unclutter your screen. alias do_301 { ^ON ^301 "*" { ^timer -delete 301 wait -CMD ^timer -refnum 301 180 ^assign -lastaway if ([$0]!=decode($lastaway)) { if (nice_w) {echo *** Is Away | $1-} {echo *** $0 is away: $safer($1-)} @ lastaway = [$encode($0)]} } } do_301 ### Put 401 in here to further reduce cache (no such user/nickname) alias do_401 { ^on ^401 "*" { if (decode($last401)!=[$1]) { @ last401 = [$encode($1)] timer 15 ^assign -last401 ^assign -uh_cache[$elow($1)] foreach chatter ch { if (decode($ch)==[$1]) { //^dcc close chat $1 zecho Chat failed: $1 does not exist \($tdiff(${ time() - chatter[$ch]})\) ^assign -chatter[$ch] } } foreach sender se { if (decode($se)==[$1]) { //^dcc close send $1 zecho Send failed: $1 does not exist \($tdiff(${ time() - sender[$se]})\) ^assign -sender[$se] } } if (sp[$elow($1)]) { ^timer 1 zecho $1 is split \(delay: $tdiff(${time() - left(9 $sp[$elow($1)])})\) } { if (show_numerics==[on]) {echo 401 $1: No such nick/channel} {echo *** $1: No such nick/channel} } } } } do_401 on #-who 14 * {@ uh_cache[$elow($1)] = [$strip(~ $3)\@$4]} #alias who { # echo .Hop..Nick....Status....u@h...............Info.....\(Channel $C\) ... # //who $0-} alias who { echo .Hop..Nick.......u@h...............Info.....\(Channel $C\) ... //who $0- } #on ^who * {echo * $[2]5 $[1]strip(\*HG $2)$[10]1$[1]strip(\@HG $2) $w_r($[1]2) \($3@$4 - $6 $7-\)} on ^who * {echo * $[2]5 $[1]strip(\*HG $2)$[9]1$[1]strip(\@HG $2) $3@$4 \($6 $7-\)} alias w_r {if ([$0]==[G]) {@function_return=[Away]}{@function_return=[Here]}} # more fun cache stuff alias updatecache { @ losecache = 0 @ keepcache = 0 ^on ^301 "*" #;^on ^317 "*" #;^on ^312 "*" #;^on ^313 "*" #;^on ^319 "*" # ^on ^311 "*" { @ keepcache = keepcache + 1 if (!match($zuh($1) $strip(~ $2)\@$3)) { zecho Updating $1\: $zuh($1) vs $strip(~ $2)\@$3 @ uh_cache[$elow($1)] = [$strip(~ $2)\@$3]} if ([${keepcache + losecache}]==foo_cc) {end_upd} ^set status_user3 K: ${keepcache + losecache}\/$foo_cc} ^on ^401 "*" { ^assign -uh_cache[$elow($1)];@losecache = losecache +1 if ([${keepcache + losecache}]==foo_cc) {end_upd} ^set status_user3 L: ${keepcache + losecache}\/$foo_cc} @ foo_cc = 0 foreach uh_cache ii { @ foo_cc = foo_cc + 1 /whois $decode($ii) } } alias end_upd { zecho Finished cleaning up. Purged $losecache and kept $keepcache entries ^timer 3 ^set -status_user3 ^timer 3 if (nice_w) {^assign -nice_w;/nice_w shaddup;do_301;do_401} {do_301;do_401;^on ^317 -"*";^on ^312 -"*";^on ^313 -"*";^on ^319 -"*"} } ### To supress server info alias no_serverinfo { ^ON ^1 * #;^ON ^2 * #;^ON ^3 * #;^ON ^4 * #;^on ^250 * #;^ON ^251 * # ^ON ^252 * #;^ON ^253 * #;^ON ^254 * #;^ON ^255 * #} alias reset_serverinfo { ^ON ^1 -*;^ON ^2 -*;^ON ^3 -*;^ON ^4 -*;^ON ^251 -*;^ON ^252 -*;^ON ^253 -* ^ON ^254 -*;^ON ^255 -*;^on ^250 -*} no_serverinfo ### Signoff stuff alias signoff { if ([$0]) { echo *** Signoff: $N \($0-\) //signoff $0- } { echo *** Signoff: $N \($signoffmsg\) //signoff $signoffmsg } } ON ^channel_SIGNOFF "*" { echo $_V\Signoff$_V: $Z $1 from $0 \($2-\) ^assign -uh_cache[$elow($1)] ^assign -iop[$elow($0)][$elow($1)] } ON ^CHANNEL_SIGNOFF "% % %.% %.%" { # if ((st1_ok!=[1])||(sdccs!=[0])||(dccs!=[0])) { zecho $_V$3$_V $TSSplit\<-Split-> $2 [$0\: $1] # } else { # special new split-in-status bar # ^set status_user1 $3 $TSSplit\<-Split-> $2 [$0\: $1] $status_user5 # zecho hey that shoulda worked # ^timer -delete 21 # ^timer -refnum 21 7 update_totalt # } ^assign -uh_cache[$elow($1)] ^assign -iop[$elow($0)][$elow($1)] @ sp[$elow($1)] = [$time() $3] if (ssp[$elow($3)]==[]) { @ ssp[$elow($3)] = [$time()] @ splt = splt +1 } @ lspltsrv = [$3-] @ lsplt = [$Z] } alias fix_split { @ srvr = [$mid(10 99 $sp[$elow($0)])] echo *S* $0 splits back to $1 \($mid(10 99 $sp[$elow($0)]) delay: $fix.time($tdiff(${time() - left(9 $sp[$elow($0)])}))\) if (ssp[$elow($srvr)]) {^assign -ssp[$elow($srvr)];@ splt = splt -1} ^assign -sp[$elow($0)] } alias split { @ jzf = 0 echo .Server Time Split. echo . . foreach ssp ii { @ jzf = jzf + 1;@ spt_tm = tdiff(${time() - ssp[$ii]}) @ spctuse = 68 - strlen($decode($ii));@ spctuse2 = spctuse - strlen($spt_tm) echo .$jzf\: $decode($ii)$strip(\\ $([$spctuse2]Space))$spt_tm\.} echo ........................................................................ ^assign -jzf } alias wsplit { @ jzf = 0 echo .Person Time Split. echo . . foreach sp ii { @ jzf = jzf + 1;@ spt_tm = tdiff(${time() - sp[$ii]}) @ spctuse = 68 - strlen($decode($ii));@ spctuse2 = spctuse - strlen($spt_tm) echo .$jzf\: $decode($ii)$strip(\\ $([$spctuse2]Space))$spt_tm\.} echo ........................................................................ ^assign -jzf } alias do_serverstuff { if ([$conserv]==[0]) { zecho Disconnected from server, reconnecting to $default_server.0 in 10 seconds @ conserv = conserv + 1 ^timer 10 s} {zecho Disconnected from server, reconnecting to $default_server.1 in 10 seconds @ conserv = conserv + 1 if ([$conserv]==[2]) {s2}{s3} } } alias winoff {^on ^window -"% ??? Use /server to %onnect to a server"} alias winon { ^on ^window "% ??? Use /server to %onnect to a server" { if (([$1]==[***]&&[$10]!=[do]&&[$2]==[Use]) { echo Use /s to reconnect to server } { echo $1- \[FAKE\] } }} #on ^DISCONNECT * {zecho Disconnected: $0- \(use /s to reconnect\)} ON ^CONNECT * { zecho Connected to server $0, port $1. @ conserv = [0] # ^timer 60 reset_serverinfo } ### Simple mass-kill/collide protection (concept by Vassago, code by Zelix) #Rands gets random letters (by Zelix) @ randletters = [abcdefghij{}[]klmnopq\rstuvwxyz] alias rands { ^assign -fun_rt @ numl = [$0] while (numl!=0) { @ fun_rt = [${fun_rt}$mid($rand(31) 1 $randletters)] @ numl = numl - 1} @ function_return = [$fun_rt] } on ^channel_signoff "% % Killed %.%*%.%*" { eval ^assign -iop[$elow($0)][$elow($1)]} on -raw_irc "%.% QUIT :*Killed* %.%*%.%*" { if (uhonly($0)!=lkill) { @ lkill = [$uhonly($0)] ^timer 60 ^assign -lkill @ killcount = killcount + 1 if ([$ak]==[on]) { aecho Kill \#$killcount\: $nickonly($0) \($lkill\): $3- if (killcount==[5]) {nick $rands(9)} if ((killcount>=max[kill])&&(stop.changing!=[Y])) { if (stop.changing!=[Y]) {@ old_nck = [$encode($N)]} @ stop.changing = [Y] NICK $left(8 $N)$rand(9) timer 60 nick $decode($old_nck) timer 10 ^assign -stop.changing } } ^timer 20 if (killcount>0) {@ killcount = killcount - 1} }{echo *** Killed- $nickonly($0) \($uhonly($0)\): $3-} } EVAL $srand($time()) loadbars 25 ### Flood Detector (by Zelix) # CTCP, kick, nick, mode, msgs, topic, public, notice @ ftypes = [ctcp kick kill nick mode msgs topic public notice] @ flood = [CKNDMTPO] @ cfld = [$flood] alias flud max alias max { if ([$0]) { if (match($0 $ftypes)) { if ([$0]!=[public]) { @ max[$toupper($0)] = [$1] zecho People may send $1 $0\s per 10 seconds }{ # We have $0 and it's public if ([$2]) { eval ^set flood_after $1 eval ^set flood_rate $2 zecho People may send $1 Public messages per $2 seconds }{ zecho Usage: /max public [# of messages] [# of seconds] \(now $flood_after $flood_rate\) } } }{ zecho Valid floods are: $ftypes } }{ echo -> Current: $cfld $ftypes (Usage: /max [type] [seconds]) foreach max yy { if ([$yy]!=[PUBLIC]) { zecho $[8]yy\: more than $max[$yy] per 10 seconds }{ zecho $[8]yy\: more than $flood_after per $flood_rate seconds } } } } alias fld { if ([$0]) { if ([$[1]0]==[-]) { @ cfld = [$strip($toupper($0) $cfld)] zecho Removed $strip(- $0) from flood protection \[currently $cfld\] }{ # lets add some! @ cfld = [$cfld] ## [$toupper($strip(- $0))] zecho Adding $strip(- $0) to flood protection \[currently $cfld\] } }{ if ([$cfld]==[]) { @ cfld = [$toupper($flood)] zecho Toggle all flood switches on: $cfld }{ ^assign -cfld zecho Toggle all flood switches off } } rawf } @ ftypes = [ctcp kick kill nick mode msgs topic public notice] @ flood = [CKNDMTPO] # $0 = type, $1 = elow nick, $2 = elow uh, $3 = elow chan # Note - this is an idea SrFrog had, but all code is original alias check_flood { @ fld[$0][$2] = fld[$0][$2] + 1 if (fld[$0][$2] > max[$0]) { @ isign[$0] = [$time()$2] if (match($0 CTCP MSGS NOTICE)) { zecho Ignoring $0 flood by $decode($1) \[$decode($2)\] ignore $decode($2) ALL @ fld[$0][$2] = [0] eval timer $igtime noignore $2 }{ zecho $0 flood by $decode($1) \[$decode($2)\] on $decode($3) at $tolower($Z) if (isop($N $decode($3))) { qkick $decode($3) $decode($1) $0 flood isig $2 1 }{ ignore $decode($2) ALL @ fld[$0][$2] = [0] eval timer $igtime noignore $2 } } } eval ^timer 10 dec_f $0- } alias dec_f {if (fld[$0][$2]>[0]) {@ fld[$0][$2] = fld[$0][$2] - 1}} alias noignore { if (isig($0)) { ^ignore $decode($0) -ALL zecho No longer ignoring $tolower($decode($0)) after $tdiff($igtime) isig $0 1 } } alias igtime { if ([$0]) { zecho Setting ignore timer to $tdiff($0) @ igtime = [$0] }{zecho Usage: /igtime [number of seconds] - currently $tdiff($igtime)} } alias isig { foreach isign ii { if ([$mid(9 99 $isign[$ii])]==[$0]) { @ function_return = [$left(9 $isign[$ii])] if ([$1]) {^assign -isign[$ii]} } } } ### Various anti-flood ON's on ^raw_irc "*!*@* % % :*DCC***" # on ^raw_irc "*!*@* % % :*V?e?v?e?S*" # on ^raw_irc "*!*@* % % :****" # on ^raw_irc "*!*@* % % :****" # on ^raw_irc "*!*@* % % :****" # on ^raw_irc "*!*@* % % :**" # on ^raw_irc "*!*@* % % :*[*" # on ^raw_irc "*!*@* % % :**" # on ^raw_irc "*!*@* % % :**" # # CKNDMTPO are the floods. alias rawf { ### Personal floods # CTCP if (isfld(C)) { ^on #-raw_irc -9 "*!*@* PRIVMSG % :*" { if ((!isig($elow($uhonly($0))))&&(nickonly($0)!=N)) { check_flood CTCP $elow($nickonly($0)) $elow($uhonly($0)) } } }{^on #-raw_irc -9 -"*!*@* PRIVMSG % :*"} # Notice if (isfld(O)) { ^on #-raw_irc -9 "*!*@* NOTICE % :*" { if ((!isig($elow($uhonly($0))))&&(nickonly($0)!=N)) { check_flood NOTICE $elow($nickonly($0)) $elow($uhonly($0)) } } }{^on #-raw_irc -9 -"*!*@* NOTICE % :*"} # Message if (isfld(M)) { eval ^on #-raw_irc -9 "*!*@* PRIVMSG $N :*" { if ((!isig($elow($uhonly($0))))&&(nickonly($0)!=N)) { check_flood MSGS $elow($nickonly($0)) $elow($uhonly($0)) } } }{eval ^on #-raw_irc -9 -"*!*@* PRIVMSG $N :*"} ### Channel floods # Kick if (isfld(K)) { ^on #-raw_irc -9 "*!*@* KICK % :*" { if ((!isig($elow($uhonly($0))))&&(nickonly($0)!=N)) { check_flood KICK $elow($nickonly($0)) $elow($uhonly($0)) $elow($2) } } }{^on #-raw_irc -9 -"*!*@* KICK % :*"} # Nick if (isfld(N)) { ^on #-raw_irc -9 "*!*@* NICK % :*" { if ((!isig($elow($uhonly($0))))&&(nickonly($0)!=N)) { check_flood NICK $elow($nickonly($0)) $elow($uhonly($0)) $elow($C) } } }{^on #-raw_irc -9 -"*!*@* NICK % :*"} # Mode if (isfld(D)) { ^on #-raw_irc -9 "*!*@* MODE % :*" { if ((!isig($elow($uhonly($0))))&&(nickonly($0)!=N)) { check_flood MODE $elow($nickonly($0)) $elow($uhonly($0)) $elow($2) } } }{^on #-raw_irc -9 -"*!*@* MODE % :*"} # Topic if (isfld(T)) { ^on #-raw_irc -9 "*!*@* TOPIC % :*" { if ((!isig($elow($uhonly($0))))&&(nickonly($0)!=N)) { check_flood TOPIC $elow($nickonly($0)) $elow($uhonly($0)) $elow($2) } } }{^on #-raw_irc -9 -"*!*@* TOPIC % :*"} # Public if (isfld(P)) { ^on ^flood "% PUBLIC *" { # if (([$0]!=[$N])&&(isop($N $C))&&(!isfriend($0))) if ([$0]!=[$N]) { achk $0 Public flood } } }{^on -flood -"% PUBLIC *"} } ## We need to turn off other flood messages: on ^window "% ??? % flooding detected *" {if ([$1]!=[***]) {echo $1-}} # Ignore code alias ignore { //ignore $0- if ([$1]) { if ([$[1]1]!=[-]) { @ igp[$elow($0)] = [$time()$1] }{ ^assign -igp[$elow($0)] } } } alias noig unig alias unig { @ kl = 1 if ([$0]) { if (index(0123456789 $[1]strip(# $0))!=[-1]) { foreach igp kk { if (strip(# $0)==kl) { ignore $decode($kk) \-$mid(9 99 $igp[$kk]) } @ kl = kl + 1 } }{ if ([$1]) { ignore $0 \-$strip(- $1) }{ ignore $0 -ALL } } }{ echo -> Ignored Users: (use /unig to stop ignoring) foreach igp kk { zecho \#$kl\: Ignoring $mid(9 99 $igp[$kk]) from $decode($kk) for $tdiff(${time() - left(9 $igp[$kk])}) @ kl = kl + 1 } } } alias ig { if ([$0]) { if (!ish($0)&&([$[1]0]!=[+])) { if (uh_cache[$elow($0)]) { if ([$1]) {if ([$1]==[-]) {ignore $fix.ig($zuh($0)) -ALL} {ignore $fix.ig($zuh($0)) $1-}} {ignore $fix.ig($zuh($0)) ALL} }{ @ ig_do = [$1-] Userhost $0 -CMD if ([$4]!=[]) { if (ig_do) { if (ig_do==[-]) { ignore $fix.ig($3@$4) -ALL} {ignore $fix.ig($3@$4) $ig_do} ^assign -ig_do} {ignore $fix.ig($3@$4) ALL} }{ if (ig_do) {ignore $0 $ig_do} {ignore $0 ALL} } } }{ if ([$1]) {ignore $0-}{ignore $0 ALL} } } {ignore} } ### Record messages on -nickname "*" { if ([$1]==[$N]) { if (isfld(M)) { eval ^on #-raw_irc -9 -"*!*@* PRIVMSG $0 :*" rawf } if ([$recmode]==[on]) { rec_off wait -CMD @ nick_r = [$safe($1)] ^on -public -"% % *$safe($0)*" ^on -action -"% % *$safe($0)*" wait -CMD rec_on } } { if ([$0]==decode($lastmdk)) {@ lastmdk = [$encode($1)]} if ([$0]==decode($lastmd)) {@ lastmd = [$encode($1)]} } if (zuh($0)) { @ uh_cache[$elow($1)] = [$uh_cache[$elow($0)]] ^assign -uh_cache[$elow($0)]} if ((match($0 $msglist))&&(!match($1 $msglist))) { ^assign -nmsglist;@ foo = 0 while (word($foo $msglist)) { if (word($foo $msglist)==[$0]) {@ nmsglist = [${nmsglist} $1]} {@ nmsglist = [${nmsglist} $word($foo $msglist)]} @ foo = foo + 1 } @ msglist = [$nmsglist] } } alias do_rec { @ recnum = recnum + 1 echo ;^update_uptime log $recfile \[$0:$userhost($0)\] $2- } alias rec_on { @ recmode = [on] ^on -public "% % *$realname2*" {do_rec $0-} ^on -public "% % *$Nick_r*" {do_rec $0-} ^on -action "% % *$realname2*" {do_rec $0-} ^on -action "% % *$Nick_r*" {do_rec $0-} } loadbars 30 alias rec_off { @ recmode = [off] ^on -public -"% % *$realname2*" ^on -action -"% % *$realname2*" ^on -public -"% % *$Nick_r*" ^on -action -"% % *$Nick_r*" } alias drec { ^set hold_mode on echo ------------------Public occurances as of $awaytime------------------ wait -CMD pubcat $recfile wait -CMD ^set hold_mode off } alias krec {^assign recnum 0;exec rm $recfile;wait -CMD exec touch $recfile;fix;update_uptime} alias fix {exec touch $recfile;exec touch .messages;if (N==[Zelix]) {exec touch $HOME/.dusers}} ### Notify on's on ^notify_signon "*" { @ n_st1 = [$toupper($left(1 $0))$n_st1] update_totalt userhost $0 -CMD if ([$4]!=[]) { secho Signon for $0 \[$3@$4\] if (log_n) {log .notify Signon for $0 \[$3@$4\]} @ uh_cache[$elow($0)] = [$strip(~ $3)@$4] }{ secho Signon for $0 detected if (log_n) {log .notify Signon for $0} } } on ^notify_signoff "*" { @ n_st1 = [$strip($toupper($left(1 $0)) $n_st1)] update_totalt secho Signoff for $0 \[$zuh($0)\] if (log_n) {log .notify Signoff for $0 \[$zuh($0)\]} ^assign -uh_cache[$elow($0)] } ### By popular request, Friends! (by Zelix) alias af addfnick alias ae addenick alias sf showfriends alias se showenemies alias rf rmfriends alias ren rmenemies alias aek {addenick $0;wait -CMD /k $0 Quick EnemyKick} alias ppl { if ([$0]) { if (index(s $[2]0)>[-1]) { if (index(f $0)>[-1]) { showfriends } { if (index(e $0)>[-1]) { showenemies } { zecho Show usage: /ppl -se or /ppl -sf } } } if (index(a $[2]0)>[-1]) { if (index(f $0)>[-1]) { if (ish($1)) { zecho Adding friend as u@h: $1- addfriend $1- } { zecho Adding friend with nick: $1- addfnick $1- } } { if (index(e $0)>[-1]) { if (ish($1)) { zecho Adding enemy as u@h: $1- addenemy $1- } { zecho Adding enemy with nick: $1- addenick $1- } } { zecho Usage: /ppl -af or -ae user@host or nick } } } if (index(r $[2]0)>[-1]) { if (index(f $0)>[-1]) { zecho Removing friend $1- rmfriend $1- } { if (index(e $0)>[-1]) { zecho Removing enemy $1- rmenemy $1- } { zecho Usage: /ppl -rf or /ppl -re nick } } } } { zecho Usage: /ppl -a to add r to remove s to show [f friend e enemy] } } alias addfnick {nickadd f $0-} alias addenick {nickadd e $0-} alias nfix.host { if (left(1 $0)==[.]) { @ function_return = [$0] } { if ((right(1 $strip(. $0))>=[0])&&(right(1 $strip(. $0))<=[9])) { @ function_return = [$0] } { @ function_return = [.$0] } } } alias nickadd { if (!zuh($1)||zuh($1)==[foobar]) { if (zuh($1)==[foobar]) { zecho Could not resolve user@host for $1 \(try later\) } { zecho Adding $1 to cache first @ uh_cache[$elow($1)] = [foobar] docache $1 ^timer 2 nickadd $0- } } { @ add_name = [$strip(\~ $nameonly($zuh($1)))] @ add_host = [$nfix.host($strip(\* $addonly($fix.ban($zuh($1)))))] if ([$0]==[f]) { zecho Adding Friend $1 as $add_name at $add_host $2- /addfriend $add_name $add_host $2- if ([$2]) { /qnotice $1 You're on my friends list as $add_name at $add_host in $2- } { /qnotice $1 You're on my friends list as $add_name at $add_host } } { zecho Adding Enemy $1 as $add_name at $add_host $2- /addenemy $add_name $add_host $2- } } } alias addfriend { ^assign -tempname;@ friends = friends + 1 if ([$0]==[]) { ^assign fname[$friends] $"Friends Username (eg.: zelix): " if (fname[$friends]==[]) { @ friends = friends - 1 zecho Aborted } { ^assign fhost[$friends] $"Friends Userhost (eg.: .winternet.com): " ^assign fchnl[$friends] $"Friends Channel to op (eg.: #appleiigs, ): " } } { @ fname[$friends] = [$0] @ fhost[$friends] = [$1] @ fchnl[$friends] = [$2] } @ tmpname = [*!*$fname[$friends]\@*$fhost[$friends]*] if (match(*$tmpname* $afriends)) { zecho $tmpname is already on the friends list ^assign -fname[$friends] ^assign -fhost[$friends] ^assign -fchnl[$friends] @ friends = friends -1 } { @ afriends = [$afriends] ## [$tmpname ] } } alias addfriend2 {^hook add_usr f $0-} alias addenemy2 {^hook add_usr e $0-} alias fix_f.or.e {if ([$0]==[f]) {@ function_return = [friend]}{@ function_return = [enemy]}} on ^hook "add_usr *" { if ([$2]) { if (strip(@ $2)==[$2]) { # add old style } { # add new style } } { ^assign uh $encode($"Enter user@host of $fix_f.or.e($1) (eg. zelix@*.winternet.com): ") if (decode($uh)==[]) {zecho Aborted adding $fix_f.or.e($1)} {} } } alias addenemy { ^assign -tmpname @ enemies = enemies + 1 if ([$0]==[]) { ^assign ename[$enemies] $"Enemy Username (eg.: zelix): " if (ename[$enemies]==[]) {@ enemies = enemies - 1;zecho Aborted} { ^assign ehost[$enemies] $"Enemy Userhost (eg.: .winternet.com): " ^assign echnl[$enemies] $"Enemy Channels to bankick (eg.: #appleiigs, ): "} } { ^assign ename[$enemies] $0 ^assign ehost[$enemies] $1 ^assign echnl[$enemies] $2 } @ tmpname = [*!*$ename[$enemies]\@*$ehost[$enemies]*] if (match(*$tmpname* $aenemies)) {zecho $tmpname is already on the enemies list ^assign -ename[$enemies];^assign -ehost[$enemies];^assign -echnl[$enemies] @ enemies = enemies - 1} {@ aenemies = [${aenemies} $tmpname]} } alias isfriend { if (zuh($0)) { if (rmatch(*!$zuh($0) $afriends)) {@ function_return = 1} {@ function_return = 0} } } alias isenemy { if (zuh($0)) {if (rmatch(*!$zuh($0) $aenemies)) {@ function_return = 1}{@ function_return = 0}}} alias showfriends { @ jz = 0 if ([$friends]==[0]||[$friends]==[]) {zecho No friends defined} {echo F: Friends (use /gsserv to toggle /op'ing them) while (jz < friends) { @ jz = jz + 1 if ([$fchnl[$jz]]) {echo \[$jz\/$friends\]: $fname[$jz]@$fhost[$jz] only on $fchnl[$jz]} {echo \[$jz\/$friends\]: $fname[$jz]@$fhost[$jz]} } echo A total of $friends friends } } alias showenemies { @ jz = 0 if ([$enemies]==[0]||[$enemies]==[]) {zecho No enemies defined} {echo E: Enemies (use /gsserv to toggle kicking them) while (jz < enemies) { @ jz = jz + 1 if ([$echnl[$jz]]) {echo \[$jz\/$enemies\]: $ename[$jz]@$ehost[$jz] only on \#$echnl[$jz]} {echo \[$jz\/$enemies\]: $ename[$jz]@$ehost[$jz]}} echo A total of $enemies enemies } } alias killenemies { purge ename;purge ehost;purge echnl ^assign -aenemies @ enemies = 0 zecho Removed all enemies } alias killfriends { purge fname;purge fhost;purge fchnl ^assign -afriends @ friends = 0 zecho Removed all friends } alias rmfriends { if (![$0]) { /killfriends } { if ([$0]>friends) { zecho Invalid friend number } { if ([$0]==friends) { @ afriends = [$stripw(*!*$fname[$0]@$fhost[$0]* $afriends)] rmf_ints $0 rmf_int $0 } { @ afriends = [$stripw(*!*$fname[$0]@$fhost[$0]* $afriends)] @ tempr = [$0];@ tempru = [$0] @ temphm = friends - 1 moveup_friends } } } } alias rmenemy {rmenemies $0-} alias rmenemies { if (![$0]) { killenemies } { if ([$0]>[$enemies]) { zecho Invalid enemy number } { if ([$0]==[$enemies]) { @ aenemies = [$stripw(*!*$ename[$0]@$ehost[$0]* $aenemies)] rme_ints $enemies;rme_int $enemies } { @ aenemies = [$stripw(*!*$ename[$0]@$ehost[$0]* $aenemies)] @ tempr = [$0] @ tempru = [$0] @ temphm = enemies - 1 moveup_enemies } } } } alias rmf_int {^assign -fname[$0];^assign -fhost[$0];^assign -fchnl[$0];@ friends = friends - 1} alias rmf_ints {zecho Removed $0\/$friends $fname[$0]\@$fhost[$0] $fchnl[$0]} alias rme_int {^assign -ename[$0];^assign -ehost[$0];^assign -echnl[$0];@ enemies = enemies - 1} alias rme_ints {zecho Removed $0\/$enemies $ename[$0]\@$ehost[$0] $echnl[$0]} alias moveup_friends { @ tempru = tempr + 1;^assign fname[$tempr] $fname[$tempru];^assign fhost[$tempr] $fhost[$tempru];if ([$fchan[$tempru]]!=[]) {^assign fchan[$tempr] $fchan[$tempru]};if ([$tempr]==[$temphm]) {rmf_int $friends;^assign -tempru;^assign -tempr} {@ tempr = tempr + 1;moveup_friends}} alias moveup_enemies { @ tempru = tempr + 1;@ ename[$tempr] = [$ename[$tempru]];@ ehost[$tempr] = [$ehost[$tempru]];if ([$echan[$tempru]]!=[]) {@ echan[$tempr] = [$echan[$tempru]]};if ([$tempr]==[$temphm]) {rme_int $enemies;^assign -tempru;^assign -tempr} {@ tempr = tempr + 1;moveup_enemies}} alias sayit { if ([$1]!=[]) { if ([$1]!=[$N]) { /quote privmsg $thechan :$themsg echo $N\- $themsg} {/me $2-} } } loadbars 35 ### Public Message Display Handler on ^public "% % **" { echo <$0>$fix_mirc($2-) } on ^PUBLIC_OTHER * { if (strip( $2-) == [$2-]) { echo <$0/$strip(aeiouAEIOU $1)> $2- } { echo <$0/$strip(aeiouAEIOU $1)>$fix_mirc($2-) } } on ^SEND_PUBLIC * { echo [$N] $1- if ((A!=[])&&([$bringback]!=[off])) {away} } on ^send_action "*" { if ([$[1]0]!=[#]) { echo * $0 >> $N $1- } { echo * $N $1- } } on ^action "*" { if (strip( $2-) == [$2-]) { if ([$1]==[$C]) { echo * $0 $2- } { echo $strip(aeiouAEIOU $1): * $0 $2- } } { if ([$1]==[$C]) { echo * $0$fix_mirc($2-) } { echo $strip(aeiouAEIOU $1): * $0$fix_mirc($2-) } } } alias fix_mirc { # n = new, c = counter @ newstr_n = [] @ newstr_c = 0 while (word($newstr_c $0-)) { if (strip( $word($newstr_c $0-)) != word($newstr_c $0-)) { @ newstr_n = [$newstr_n ] ## fix_mirc1($word($newstr_c $0-)) } { @ newstr_n = [$newstr_n ] ## word($newstr_c $0-) } @ newstr_c = newstr_c + 1 } @ function_return = [$newstr_n] } alias fix_mirc1 { @ badw_c = 0 @ badw_n = [] while ([$strlen($0)] > badw_c) { if (mid($badw_c 1 $0) == []) { @ badw_c = badw_c + 3 @ badw_n = badw_n ## [] } { @ badw_n = badw_n ## mid($badw_c 1 $0) @ badw_c = badw_c + 1 } } @ function_return = [$badw_n] } ### Synch Check (make sure we don't get 1000 synch messages) on ^404 "*" check_synch $0- on ^482 "*" check_synch $0- on ^442 "*" check_synch $0- alias check_synch { if ([$0]!=lastsynch) { if ([$0]!=S) { zecho $0 is desynched from the IRC Network. @ lastsynch = [$0] who -server $0 $C } {zecho $1-} } } ### Fast Cycle/mode for all you lice users :) alias c { if ([$0]) { zecho /c is actually cycle, not mode (use /md next time) /md $0- } { @ tempchan = [$encode($C)] zecho Cycling $C, Please wait: l $C wait -CMD join $decode($tempchan) ^assign -tempchan } } ### Server alias s { if ([$0]) {//server $0-} {//server $default_server.0} } alias s0 {//server $default_server.0} alias s1 {//server $default_server.1} alias s2 {//server $default_server.2} alias s3 {//server $default_server.3} alias s4 {//server $default_server.4} alias s5 {//server $default_server.5} alias s6 {//server $default_server.6} alias s7 {//server $default_server.7} ### Ping, Version, and Finger commands alias p { if ([$0]) { //PING $0 } { # if ([$iglp]==[on]) { # ^ignore *@* notices # ^timer -delete 98 # ^timer -refnum 98 20 ^ignore *@* -notices # } //ping $C } } # d'oh I forgot that pings were notices :P therefore, if you ignore # all notices if $iglp is on, you won't get the real pings either # (that's why it's commented out - I guess you could check the format # of the received notice to see if it's really a sensible ping) alias ver { if ([$0]) { if (strip(. $0)==[$0]) { /ctcp $0 version } { //version $0 } } { /ctcp $C version } if ([$1]) {ver $1-} } alias f {if ([$0]) {/ctcp $0 finger} {/ctcp $C Finger}} # Simple finger code alias fingerh { ^exec -kill %finger if (zuh($0)) { zecho Launching Quick Host finger on: $0 ^eval exec -name finger exec finger @$$addonly($zuh($0))} {Userhost $0 -cmd if ([$3]!=[]) { zecho Launching Host finger on: $0 -> @$4 ^eval exec -name finger exec finger @$$4} } } alias finger { if ([$reminders]!=[off]) {recho You can use /fingerh to finger the host} ^exec -kill %finger if (ish($0)) { ^exec -name finger exec finger $0} { if (zuh($0)) { zecho Launching Quick finger on $0 ^eval exec -name finger exec finger $zuh($0)} {Userhost $0 -cmd if ([$3]!=[]) { zecho Launching finger on $0!$strip(#~!> $3)@$4 ^eval exec -name finger exec finger $strip(#~!> $3)@$$4} } } } ### Ping, Version, and Finger handelers (by Zelix) spr CTCP stuff ON ^CTCP "% % PING *" { if ([$left(1 $1)]==[\$]) {zecho $0 did a server-wide ping of $1} if ([$left(1 $1)]==[#]) { ^assign lpingall $Z;^assign lpingaller $0;@ pingall = pingall + 1 zecho $0 \($userhost()\) pinged $1 at $tolower($Z) \[Reply:$replies\]} if (match($1 $N)) { ^assign lpinged $Z;^assign lpinger $0;@ pinged = pinged +1 zecho $0 \($userhost()\) pinged you at $tolower($Z) \[Reply:$replies\] if ((replies!=[off])&&(pingmsg!=[])) {qnotice $0 $Pingmsg -Zscript v$Zvers \(Server $S\)-} } if (([$pingjoke]==[on])&&(replies!=[off])) {notice $0 PING *** CTCP PING reply from $0: 1234 more beers} } # You could do on ^raw_irc "% PRIVMSG % :^AVER*^A*" {} if you wanted to subdue # the default version response ON ^CTCP "% % VERSION *" { if ([$left(1 $1)]==[\$]) { @ serversn = serversn + 1 zecho Server Wide VERSION by $0 on $strip(\$ $1) @ novers = [1] if ([$reminders]!=[off]) { recho Zscript won't send a version reply to server-wide CTCP recho VERSION requests, since most admins don't like scripts } }{ if ([$left(1 $1)]==[#]) { ^assign lversall $Z;^assign lversaller $0;@ versall = versall + 1 zecho $0 \($userhost()\) versioned $1\ at $tolower($Z) \[Reply:$replies\] }{ if (match($1 $N)) { ^assign lversioned $Z;^assign lversioner $0;@ versioned = versioned + 1 zecho $0 \($userhost()\) versioned you at $tolower($Z) \[Reply:$replies\] } } if (([$novers]!=[1])&&([$replies]!=[off])&&([$versionmsg]!=[])) { qnotice $nickonly($0) VERSION $Versionmsg $vdate\ }{@ novers = [0]} } } alias sver {eval say Zscript v$Zvers $vdate by Zelix (dccstat built-in)} loadbars 40 # You could on ^raw_irc "% PRIVMSG % :^AFINGER*" {} if you don't want the # default ircII response message ON ^CTCP "% % FINGER *" { if (left(1 $1)==[\$]) { zecho $0 fingered server $1 at $tolower($Z) \[Replies are $replies\] @ nofing = [1] } if (left(1 $1)==[#]) { @ lfingerall = [$Z];@ lfingeraller = [$0];@ fingerall=fingerall + 1 zecho $0 \($userhost()\) fingered $1 at $tolower($Z) \[Reply:$replies\] @ nofing = [1]} if (match($1 $N)) { @ lfingered = [$Z];@ lfingerer = [$0];@ fingered = fingered + 1 zecho $0 \($userhost()\) fingered you at $tolower($Z) \[Reply:$replies\]} if ((nofing!=[1])&&(replies!=[off])&&(fingermsg!=[])) { qnotice $nickonly($0) $Fingermsg \[Zscript v$Zvers\]} {^assign -nofing} } ON ^CTCP_REPLY "* VERSION" zecho $_V$0$_V is running $2- ON ^CTCP_REPLY "* FINGER" zecho $_V$0$_V is $2- ON ^CTCP_REPLY "* PING" { @ lagz = [${time()-[$2]}] if ((index(0123456789 $2)>[-1])&&(lagz>=[0])&&(lagz<[6000])) { if (rpng[$elow($0)]) { echo *** PING $[9]0: $tdiff($lagz) \(client ping\: $tdiff($rpng[$elow($0)])\) ^assign -rpng[$elow($0)] } { echo *** PING $[9]0: $tdiff($lagz) } if (pm==[on]) {notice $0 Lag from me to you: $tdiff($lagz)} ^assign -lagz } { if (iglp==[off]) {zecho Lame ping from $0\: $lagz} } } ON ^window "% ??? CTCP PING reply from %: % %" { if ([$7] >= [0] && [$7] <= [6000]) { @ rpng[$elow($6)] = [$7] } } spr Ban/retry stuff ### Ban/Invite handlers (by Zelix) #findban nick channel alias findban { ^assign -gban if (zuh($0)) { @ dbanz = [$0!$zuh($0)] } { Userhost $0 -CMD if ([$4]!=[]) { @ uh_cache[$elow($0)] = [$strip(~ $3)@$4] @ dbanz = [$0!$3@$4] } } ^on ^367 "*" {if (match($2 $dbanz)) {@ gban = [$2 ] ## [$gban]}} ^on ^368 "*" { zecho Banned from $1 with $gban ^assign -gban ^on 367 -"*" ^on 368 -"*" } //mode $1 +b } alias retry { if ((retry!=[on])&&([$0]!=[])) { @ rjchan = [$encode($0)] @ atmpt = [0] @ retry = [on] timer 2 zecho Retrying join on $0 eval join $0 } { zecho Stopping join attempt @ retry = [off] @ atmpt = [0] @ rejoin2 = [$rejoin] @ rejoin = [off] timer 16 @ rejoin = [$rejoin2] ^assign -rjchan ^set -status_user3 } } alias retry_do { @ atmpt = atmpt + 1 ^set status_user3 Atmp: $atmpt ^timer -delete $0 ^timer -refnum $0 $1 j $2 } ON ^474 * { if ([$retry]==[on]) {retry_do 474 8 $1} {@ checkbch = [$1];findban $N $1;if ([$rejoin]!=[off]) {/retry $1} {if ([$reminders]!=[off]) {recho Type /retry $1 to retry join every 8 seconds.}}}} ON ^473 * { if ([$retry]==[on]) {retry_do 473 15 $1} { if ([$rejoin]!=[off]) { zecho $1 is INVITE-ONLY- Retrying every 15sec;/retry $1} { zecho $1 is INVITE-ONLY- /retry $1 to retry joining every 15sec.}}} ON ^475 * { if ([$retry]==[on]) {retry_do 475 15 $1} { if ([$rejoin]!=[off]) { zecho $1 has a Channel Key- retrying join ever 15sec;/retry $1} { zecho $1 has a Channel Key- /retry $1 to retry joining every 15sec.}}} ON ^471 * { if ([$retry]==[on]) {retry_do 471 2 $1} { if ([$rejoin]!=[off]) { zecho $1 is FULL- retrying join every 2sec;/retry $1} { zecho $1 is FULL- Type /retry $1 to retry joining every 2sec.}}} ### Join stuff (orig. by Zelix) spr Join/leave stuff alias igchan { if ([$0]) { if (left(1 $0)!=[#]) { /igchan #$0 } { if (igchans) { @ igchans = [$igchans ] ## [$0] } { @ igchans = [$0] } zecho Ignoring join/leave/mode/nick/signoff in $igchans eval ^on ^join "* $0" : eval ^on ^leave "* $0" : eval ^on ^mode "* $0" : eval ^on ^channel_nick $0 : eval ^on ^channel_signoff $0 : } } { zecho Usage: /igchan (channel to ignore) \[currently $igchans\] } } alias noigchan { if ([$0]) { if (left(1 $0)!=[#]) { noigchan #$0 } { if (igchans==[$0]) { zecho NOT Ignoring join/leave/mode/nick/signoffs in $0 ^assign -igchans } { @ igchans = [$stripw($0 $igchans)] zecho NOT Ignoring join/leave/etc. in $0 \(still in $igchans\) } eval ^on ^join -"* $0" : eval ^on ^leave -"* $0" : eval ^on ^mode -"* $0" : eval ^on ^channel_nick -$0 : eval ^on ^channel_signoff -$0 : } } { zecho Usage: /noigchan (channel to unignore) } } alias checkfr { if (rmatch($0 $afriends)) { eval timer ${5 + rand(9)} do_frop $strip(: $2) $nickonly($0) } } alias do_frop { if (!iop[$elow($0)][$elow($1)]) { qmode $0 +o $1 } } alias checkfr2 { foreach fname xx { if (match(*$fname[$XX] $strip(~ $nameonly($0)))) { if (match(*$fhost[$XX]* $addonly($0))) { if ((fchnl[$XX]==[])||(strip(# $fchnl[$XX])==strip(\:\# $2))) { eval timer $rand(9) /qmode \#$strip(#: $2) +o $nickonly($0) } } } } } alias checken { foreach ename xx { if (match(*$ename[$XX] $strip(~ $nameonly($0)))) { if (match(*$ehost[$XX]* $addonly($0))) { if ((echnl[$XX]==[])||(echnl[$XX]==strip(: $2))) { /qmode $strip(: $2) -o+b $nickonly($0) $fix.ban($nameonly($0)\@$addonly($0)) /qkick $strip(: $2) $nickonly($0) You are on my enemies list } }} } } on -raw_irc "% JOIN *" { @ uh_cache[$elow($nickonly($0))] = [$strip(~ $nameonly($0))\@$addonly($0)] if (isop($N $strip(: $2))&&nickonly($0)!=N) { if ((elow($nickonly($0))==knick)&&(brj==[on])) {qbk $strip(: $2) $decode($knick)} if (gsservm==[ON]) { if (enemies>0) {checken $0-} if (friends>0) {checkfr $0-} } if (safe($nickonly($0))!=nickonly($0)&&nickcheckonjoin==[on]) { qmode $strip(: $2) -o+b $nickonly($0) $nickonly($0) qkick $strip(: $2) $nickonly($0) Bad nick ^timer 240 /qmode $strip(: $2) -b $nickonly($0) } # if (reminders!=[off]) {recho Automatically kick bad nicks with /nc} } } ON ^JOIN * { if ([$0]==N) { cstat $1 qt if ([$1]==decode($rjchan)) { ^assign -rjchan ^assign -retry @ atmpt = 0 ^set -status_user3 } } if (sp[$elow($0)]!=[]) { fix_split $0- } { if (!match($1 $igchans)) { echo *** $0 \[$zuh($0)\] joined $1 at $Z } } } loadbars 45 ### Leave stuff by Zelix (plus DALNet support) on ^leave * { if ([$0]==N) { echo *** You have left channel $1 at $Z if (match($1 $igchans)) {/noigchan $1} if (V >= [19960000]) {type } }{ if (!match($1 $igchans)) { if ([$2]) { echo *** $0 has left $1 \($mid(1 99 $2-)\) }{ echo *** $0 has left $1 at $Z <$zuh($0)> } } } ^assign -uh_cache[$elow($nickonly($0))] ^assign -iop[$elow($1)][$elow($0)] } on ^328 "*" {zecho URL for $1 is $2-} spr Chanop/ban/unban stuff ### Channel Operator commands (by Zelix) alias op {qmode $C +ooo $0 $1 $2;if ([$3]!=[]) {/op $3-}} alias deop dop alias dop {/qmode $C -ooo $0 $1 $2;if ([$3]) {/dop $3-}} alias qdop {/qmode $C -oooo $0 $1 $2 $3;if ([$4]) {/qdop $4-}} alias qop {/qmode $C +oooo $0 $1 $2 $3;if ([$4]) {/qop $4-}} ### Kick/Mass Kick (by Zelix) alias k { if ([$0]) { if (ish($0)||([$[1]0]==[-])) { ^assign -msg.k;^assign -kick.o;^assign -kick.addr ^assign -kick_me if (ish($0)) { @ msg.k = [$encode(Kicking $0)] @ kick.o = [3] @ kick.addr = [$0] } if ([$[1]0]==[-]) { if ([$1]) {@ kick.addr = [$1]} {@ kick.addr = [*!*@*]} if ([$2]) {@ msg.k = [$encode($2-)]} if ([$[2]0]==[-n]) { if (![$2]) {@ msg.k = [$encode(Kicking non-ops matching $1 off of $C)]} zecho Kicking non-ops $kick.addr off of $C @ kick.o = [1] } if ([$[2]0]==[-o]) { if (![$2]) {@ msg.k = [$encode(Kicking ops matching $1 off of $C)]} zecho Kicking ops $kick.addr off of $C @ kick.o = [2] } } eval ^on ^who "$C *" { if (match(${kick.addr} $1!$3@$4)) { if (((strip(@ $2)!=[$2])&&(kick.o==[2]))||((strip(@ $2)==[$2])&&(kick.o==[1]))||(kick.o==[3])) { if ([$1]!=N) { @ kick_me = [$1 $kick_me] } } } } eval ^on ^315 "% $C *" { eval ^on who -"$C *" eval ^on 315 -"% $C *" } //who $C @ foo_k = 0 wait -CMD while (word($foo_k $kick_me)) { qkick $C $word($foo_k $kick_me) $decode($msg.k) @ foo_k = foo_k + 1 } } { if ([$1]) {qkick $C $0 $1-} {qkick $C $0 $kickmsg} if ([$0]!=N) { @ knick = [$encode($tolower($0))] ^timer 3 ^assign -knick } } } { zecho Usage: /k[ick] [nick]|[u@h] [reason] or /k[ick] [-o]|[-n] [u@h] } } alias kick {if ([$[1]0]==[#]) {qkick $0-}{k $0-}} alias achk { @ lp = 0; while (word($lp $mychannels())) { if ((onchannel($0 $word($lp $mychannels())))&&(isop($N $word($lp $mychannels())))) { quote kick $word($lp $mychannels()) $0 :$1- } @ lp = lp + 1 } } alias mop {mass op $0-} alias mdop {mass dop $0-} alias mban {mass ban $0-} ### Mass modes: /mass [k/op/dop/ban] filter alias mass { @ do_this = [$0] ^assign -mkzo;^assign -mkz if ([$1]) {@ mmask = [$1]}{@ mmask = [*@*]} ^on ^who "*" { if ((match(*${mmask}* $1!$3@$4))&&([$1]!=N)) { if (strip(\@ $2)!=[$2]) {@ MKZO = [$1 ] ## [$MKZO]} {@ MKZ = [$1 ] ## [$MKZ]} } } //who $C wait -CMD if (do_this) { if (do_this==[op]) {/op $MKZ} if (do_this==[dop]) {/dop $MKZO} if (do_this==[ban]) {/ban $MKZO $MKZ} if (!match($do_this ban dop op)) {eval $do_this $mkzo $mkz} ^assign -MKZ;^assign -MKZO;^assign -mmask;^assign -mkickmsg;^on who -* } } ### "Lame" Bans and unbans...came quite in handy (by Zelix) alias banl { if ([$3]) {/qmode $C +bbbb $0 $1 $2 $3;if ([$4]) {banl $4-}} { if ([$2]) {/qmode $C +bbb $0-} { if ([$1]) {/qmode $C +bb $0-} { /qmode $C +b $0} } } } alias unbanl { if ([$3]) {/qmode $C -bbbb $0 $1 $2 $3;if ([$4]) {unbanl $4-}} { if ([$2]) {/qmode $C -bbb $0-} { if ([$1]) {/qmode $C -bb $0-} { /qmode $C -b $0} } } } alias ub {if ([$0]) {unban $0-}{unbanl $lastban}} alias rb {if ([$0]) {ban $0-}{banl $lastunban}} alias add_lastban { ^assign -lastban if (ish($0)) {^assign lastban ${lastban} $0} if (ish($1)) {^assign lastban ${lastban} $1} if (ish($2)) {^assign lastban ${lastban} $2} if (ish($3)) {^assign lastban ${lastban} $3} } alias add_lastunban { ^assign -lastunban if (ish($0)) {^assign lastunban ${lastunban} $0} if (ish($1)) {^assign lastunban ${lastunban} $1} if (ish($2)) {^assign lastunban ${lastunban} $2} if (ish($3)) {^assign lastunban ${lastunban} $3} } ### Clear all bans (orig. by Zelix) alias unbanall { ^assign -bansub ^on ^367 * {@ bansub = [$2 ${bansub}]} ^on ^368 * {unbanl $bansub;^assign -bansub;^on ^367 -"*";^on ^368 -"*"} //mode $C +b } ### Fast Ban (Orig. by Zelix) alias ban { if (ish($0)) { banl $0- }{ if (zuh($0)) { finish_ban $0 $fix.ban($zuh($0)) }{ Userhost $0 -CMD if ([$4]!=[]) { finish_ban $0 $fix.ban($3@$4) @ uh_cache[$elow($0)] = [$strip(~ $3)\@$4] } } if ([$1]) {/ban $1-} } } alias finish_ban { if (match($1 *!*$zuh($N))) { zecho $1 would ban me! }{ if (isop($0 $C)) { /qmode $C -o+b $0 $1 }{ /qmode $C +b $1 } } } @ numbers = [0 1 2 3 4 5 6 7 8 9] alias fix.ban { if (match($right(1 $addonly($0)) $numbers)) {@ function_return = [\*\!\*$mid(1 99 $nameonly($0))\@$left($rindex(. $addonly($0)) $addonly($0))\.\*]} {@ function_return = [\*\!\*$mid(1 99 $nameonly($0))\@\*$mid($index(. $addonly($0)) 99 $addonly($0))]} } alias fix.ig { if (match($right(1 $addonly($0)) $numbers)) {@ function_return = [\*$mid(1 99 $nameonly($0))\@$left($rindex(. $addonly($0)) $addonly($0))\.\*]} {@ function_return = [\*$mid(1 99 $nameonly($0))\@\*$mid($index(. $addonly($0)) 99 $addonly($0))]} } # Very Cool Unban (by Zelix) alias unban { if ([$0]) { if (index(0123456789 $[1]strip(# $0))!=[-1]) { ^assign -ublst_t;unban_num $strip(\# $0-) } { if (ish($0)) { if ([$0]==[*!*@*]||[$0]==[*@*]) { unbanall } { unbanl $0- } } { ^assign -bunband @ ub_rest = [$encode($1-)] if (zuh($0)) { @ fltr_u = [$0\!$zuh($0)] } { Userhost $0 -CMD if ([$4]!=[]) { @ fltr_u = [$0!$3@$4] @ uh_cache[$elow($0)] = [$strip(~ $3)@$4] } } eval ^on ^368 "% $C *" { if (bunband==[]) { zecho No bans found that would catch that user } { /unbanl $bunband } ^assign -fltr_u ^assign -bunband eval ^on ^367 -"% $1 *" eval ^on ^368 -"% $1 *" } eval ^on ^367 "% $C *" { if (match($2 $fltr_u)) { @ bunband = [$bunband] ## [$2 ] } } //mode $C +b if (decode($ub_rest)!=[]) {/unban $decode($ub_rest)} } } } { zecho Usage: /unban [number] | [nick] | [u@h] | [*@* to unbanall] } } alias bk { if ([$1]) { /ban $0;wait -CMD k $0- } { /ban $0;wait -CMD k $0 $bkickmsg } } alias kb {/ban $0;k $0-} alias qbk {chban $0 $1;/qkick $0 $1 Lame ReJoin;^timer 25 chunban $0 $1} #Thanks to Charlie for finding & fixing the chunban bug! alias chban {@ rj_ban = [$fix.ban($zuh($1))];/qmode $0 +b $rj_ban} alias chunban {/qmode $0 -b $rj_ban;^assign -rj_ban} loadbars 50 alias sb { @ bannum = 1 ^on ^367 "*" { if (bannum==[1]) { if (P==[@]) { echo -> Bans on Channel $1\: \[Use /unban # to unban\] } { echo -> Bans on Channel $1\: } } if ([$4]) { if ((strip(\! $3)!=[$3]) || (strip(. $3)==[$3])) { echo \#$bannum\: $2 \($nickonly($3) $mid(4 15 $stime($4))\) } { echo \#$bannum\: $2 \(Server $3 $mid(4 15 $stime($4))\) } } { echo \#$bannum\: $2 } @ dban[$elow($1)][$bannum] = [$2] @ bannum = bannum + 1 } ^on ^368 * { ^on 367 -*;^on 368 -* if (bannum==[1]) {zecho No bans on $1} } if ([$0]) { if (left(1 $0)==[#]) {/qmode $0 +b}{/qmode \#$0 +b} } { /qmode $C +b } } alias unban_num { @ ublst_t = [${ublst_t} $dban[$elow($C)][$0]] if (![$1]) {/unbanl $ublst_t;^assign -ublst_t} {unban_num $1-} } ### DCC Get handeler (by Zelix) spr DCC Get handler on ^ctcp "% % DCC SEND* * *" {do_dccg $0-} #ON ^CTCP_REPLY "*DCC*" {if ([$1]==[DCC]&&[$2]==[SEND]) {do_dccg $0 $N $1-} {echo $0-}} ON ^CTCP_REPLY "* DCC SEND *" {do_dccg $0 $N $1-} alias zsc_chk { @ zon = [$1-] userhost $0 -cmd if ([$4]!=[]) { if (right(7 $4)==[ufl.edu]) { zecho $0\!$3@$4 appears to really be Zelix. do_dccgR $0 $zon } { zecho CAREFUL: Someone is trying to send you Zscript. This may be a hacked copy. zecho Please be sure to get the latest version from $off_mir ^assign getneway $"Get anyway? \(N\/y\): \[N\] " if ((left(1 $getneway)==[y])&&(getneway!=[])) {do_dccgR $0 $zon}{/dcg $0} } } } alias do_dccg { if (([$4]==[zero])||([$4]==[null])||([$4]==[core])||([$7]<<[1])||(strip(!@\$%&\*|\\`' $4)!=[$4])) {dccbomb_check $0-} {if ([$4]==[Zscript]) {zsc_chk $0-} {do_dccgR $0-} } } alias do_dccgR { @ dccdone = [0] @ fl[$elow($0)$felow($4)] = [$7] if (dccst!=[off]) { if (forcedtimer==[0]) {@ dtimer = [2]} {@ dtimer = [$forcedtimer]} } if (autoget==[OFF]) { @ lastoffer = [$0] zecho $_V$0$_V offers you $_V$4$_V \($convertk($7)k\) at $Z if (reminders!=[off]) { recho Use /dg \($0 optional\) to get $4, /ag toggles autoget } } { ### Assert- autoget is on if (left(1 $4)==[.]) { zecho $_V$0$_V offers $_V$4$_V \($convertk($7)k\) at $Z \(dotfile\) } { zecho Autogetting $_V$4$_V \($convertk($7)k\) from $_V$0$_V at $Z timer 3 dg $0 $4 } } } alias dccbomb_check { if (agbomb!=[off]) { close_bomb $0- } { zecho WARNING: Possible BOMB \($4 $fx($7) bytes\) from $_V$0$_V at $Z ^assign getneway $"Get anyway? \(N\/y\): \[N\] " if (left(1 $getneway)==[y]) {do_dccgR $0-} {close_bomb $0-} } } alias close_bomb { docache $0 zecho Closing DCC GET BOMB \($4 $fx($7) bytes\) from $_V$0$_V at $Z dcg $0 $4 ig $0 CTCP ^timer 5 log .messages DCC GET BOMB from $0 \[$zuh($0)\] File: $4 Length: $fx($7) qnotice $0 Your DCC GET BOMB was closed and your are being ignored } ### DCC GET Window code - we only need to silence the default ircII message spr DCC Status indicator on ^window "% ??? DCC SEND (* request rec??ved*" { if ([$1]!=[***]) {echo $1-} } ### DCC SEND code on ^window "% ??? Sent DCC SEND request to %" {if ([$1]!=[***]) {echo $0-}} on -window "% ??? DCC SEND*connection*to*established*" { if ([$1]==[***]) { #Sender here is just for cosmetics - it has the name of the person #we're sending the file to, and is displayed in case something goes #wrong. So, we clean it up here ^assign -sender[$elow($6)] if (dccst!=[off]) { ^timer 1 dccstat_start # ^timer 3 dccstat_start } } } on ^window "% ??? DCC GET connection with*established" { if ([$1]==[***]) { echo $1- if (dccst!=[off]) {dccstat_start} } } ### DCC CHAT code on -window "% ??? DCC chat connection to % lost*" { if ([$1]==[***]) { @ chats = chats - 1 } } on ^raw_irc "*!*@* PRIVMSG % :DCC CHAT*" { ^timer -d 11 ^timer -r 11 10 ^assign -lastchatter if ([$addonly($0)]!=[$lastchatter]) { @ lastchatter = [$addonly($0)] zecho DCC CHAT request from $nickonly($0) \($uhonly($0)\) at $tolower($Z) if ([$2]==[$N]) { ^addmsg =$nickonly($0) $msglist if (reminders!=[off]) {recho Type /dc $0 to chat, /dcx $0 to ignore or when finished.} } } } on -window "% ??? DCC chat connection with % established" { if ([$1]==[***]) { ^assign -chatter[$elow($6)] } } ### DCC SEND doesn't supply a filelen, so we'll have to get it # $0 is the encoded nick, $1 is the filename # in the on, $9 is the filename $4 is the filelen alias getfilelen { @ sfl[$0$felow($1)] = [0] if (cfl[$felow($1)]) { @ sfl[$0$felow($1)] = [$cfl[$felow($1)]] } { @ tmpnik = [$0] @ tmpfile = [$elow($1)] @ tmpfilef = [$felow($1)] ^on ^exec_error "DODIR *" { zecho $2- ^assign -tmpfile;^assign -tmpfilef;^assign -tmpnik } ^on ^exec "DODIR *" { if (strip(\* $8)==decode($tmpfile)) { @ sfl[$tmpnik$tmpfilef] = [$4] @ cfl[$tmpfilef] = [$4] } if (strip(\* $9)==decode($tmpfile)) { @ sfl[$tmpnik$tmpfilef] = [$5] @ cfl[$tmpfilef] = [$5] } ^assign -tmpfile;^assign -tmpnik;^assign -tmpfilef } if (strip(\;\`\'\"\|\& $1)!=[$1]) { zecho DANGER: Bad filename }{ ^exec -name dodir ls -l $1 } } } alias faster { if (dtimer==[1]) { zecho Maximum update reached- 1 sec- no change } { @ dtimer = dtimer - 1 zecho Timer speed set to update every $dtimer seconds } } alias slower { @ dtimer = dtimer + 1 if ([$dtimer]==[10]) {zecho Minimum reccomended update reached. Increased to every $dtimer sec.} { zecho Timer speed set to update every $dtimer seconds} } alias dtimer {zecho Set update rate to update every $0 seconds;@ dtimer = [$0]} ### DCC Status (By Zelix) I wonder how many scripts will rip this :) alias remcalc { if (match($0 inst avg)) { @ remcalc = [$0];zecho Calculations will be made using $0 cps} { if ([$remcalc]!=[inst]) {@ remcalc = [inst]} {@ remcalc = [avg]} zecho Calculations will be using $remcalc cps} } alias maxblk { if (![$0]) {eval zecho Maximum block size is currently $maxblk} { # Assert: $0 isn't empty if ([$0]<=[512]) { zecho Minimum reccomended Max Block Size is 512 \(using 512\) \[Previous: $maxblk\] ^assign maxblk 512} { if ([$0]>=[65536]) { zecho Maximum block size is 65536 \(using 65536\) \[Previous: $maxblk\] ^assign maxblk 65536} {zecho Maximum block size set to $0 \[Previous: $maxblk\] ^assign maxblk $0} } } } alias minblk { if (![$0]) {eval zecho Minimum block size is currently $minblk} { # Assert: $0 isn't empty if ([$0]<=[64]) { zecho Minimum block size is 64 \(using 64\) \[Previous: $minblk\] @ minblk = [64]} { if ([$0]>=[1024]) { zecho Maximum Min block is 1024 \(using 1024\) \[Previous: $minblk\] @ minblk = [1024]} {zecho Minimum block size set to $0 \[Previous: $minblk\] @ minblk = [$0]} } } } alias off {@dccs = [0];@sdccs = [0];dccstat_off;zecho DCC Status Indicator OFF} alias dccstat_start { if (ldcc==[off]) {set_format} {^set status_format %Z \ $status_format5} dccstat } loadbars 55 @ kluge = [0] alias dccstat { #^timer -delete 305 @ dccs = [0] @ sdccs = [0] ^on ^window "*" { if ([$1]==[send]&&[$3]==[Active]) { @ sdccs = sdccs + 1 dccstat_send $8 $felow($10) $elow($2) } if ([$1]==[get]&&[$3]==[Active]) { @ dccs = dccs + 1 dccstat_get $9 $felow($10) $elow($2) } if (((dccs>1)||(sdccs>1))||((dccs==[1]&&sdccs==[1]))&&ldcc!=[off]) {@ ldcc = [off];set_format} } //dcc list ^on window -* wait -CMD if (dccs>=[1]||sdccs>=[1]) { if (ldcc==[off]) {do_ldcc} eval ^timer -refnum 305 $dtimer dccstat }{ if (kluge>=[1]) { dccstat_off @ kluge = [0] }{ if (ldcc==[off]) {do_ldcc} eval ^timer -refnum 305 $dtimer dccstat @ kluge = [1] } } } alias SHOWD { foreach lper ii {echo $0 lper $decode($ii)\: $lper[$ii]} foreach lsper ii {echo $0 lsper $decode($ii)\: $lsper[$ii]} foreach sfl ii {echo $0 sfl $decode($ii) $sfl[$ii]} foreach fl ii {echo $0 fl $decode($ii) $fl[$ii]} } alias do_ldcc { ^assign -st3 foreach lsper ii {@ st3 = [$st3 ] ## [S$left(1 $decode($ii))\:$lsper[$ii]\%]} foreach lper ii {@ st3 = [$st3 ] ## [G$left(1 $decode($ii))\:$lper[$ii]\%]} eval ^set status_user3 $st3 purge lper;purge lsper } alias dccstat_send { if (!sttm[$2$1]) {@ sttm[$2$1] = [$time()]} if (ldcc==[off]) {@ lsper[$2$1] = [${([$0]*100)/sfl[$2$1]}]} { @ sdccdonel = [$sdccdone] @ sdccdone = [$0] @ slastcps = [$scps] @ slastcpsi = [$scpsi] @ sdiff = sdccdone-sdccdonel @ sttm_ = [${time() - sttm[$2$1]}] @ scpsi = [${sdiff/dtimer}] @ spercent = [${([$0]*100)/sfl[$2$1]}] @ scps = [${sdccdone/sttm_}] @ stime_left = [${(sfl[$2$1] - sdccdone)/scps}] if (remcalc==[inst]) {@ stime_left = [${(sfl[$2$1] - sdccdone)/scpsi}] @ scps_s = [$scpsi]}{@ scps_s = [$scps]} if (optdcc!=[off]) {adjblk} if (scps_s >= [1024]) {@ scps_s = [${scps_s/1024}\k]} @ ds_data = [...$convertk($0)\k\/$convertk($sfl[$2$1])\k $spercent\% at $scps_s\b/sec Remain:$fix.time($tdiff($stime_left)) Total:$fix.time($tdiff($sttm_)) Blk: $dccblksz\...] eval ^set status_user3 \[Send\]\[$graphic_fix($spercent $[70]ds_data)\\] $status_user5 } } alias dccstat_get { if (!ttm[$2$1]) {@ ttm[$2$1] = [$time()]} if (ldcc==[off]) { @ lper[$2$1] = [${([$0]*100)/fl[$2$1]}] } { @ dccdonel = [$dccdone] @ dccdone = [$0] @ lastcps = [$cps] @ lastcpsi = [$cpsi] @ ttm_ = [${time() - ttm[$2$1]}] @ diff = dccdone-dccdonel @ cpsi = [${diff/dtimer}];@ percent = [${([$0]*100)/fl[$2$1]}] @ cps = [${dccdone/ttm_}] @ time_left = [${(fl[$2$1] - dccdone)/cps}] if (remcalc==[inst]) { @ time_left = [${(fl[$2$1] - dccdone)/cpsi}] @ cps_s = [$cpsi]} {@ cps_s = [$cps]} if (cps_s >= [1024]) {@ cps_s = [${cps_s/1024}\k]} @ ds_data = [... $left(10 $safe($decode($1))): $convertk($0)\k\/$convertk($fl[$2$1])\k $percent\% at $cps_s\b/sec Rem:$fix.time($tdiff($time_left)) Tot:$fix.time($tdiff($ttm_))...] eval ^set status_user3 \[Get\]\[ $graphic_fix($percent $[70]ds_data)\\] $status_user5 } } alias dccstat_off { ^set -status_user3;set_format purge ttm;purge sttm ^on window -* ^assign -percent;^assign -spercent;purge lsper;purge lper purge fl;purge sfl ^assign dccdone 0;^assign dccdonel 0 ^assign sdccdone 0;^assign sdccdonel 0 ^assign -sdiff;^assign -diff ^assign -scps;^assign -cps ^assign -lastcps;^assign -slastcps ^assign -compdiff @ sdccs = [0];@ dccs = [0] } alias graphic_fix { if (gdcc==[off]) { @ FUNCTION_RETURN = [$1-] } { @ perc.l = [$0] @ perc.l = perc.l * strlen($1-) @ perc.l = perc.l / 100 @ perc.r = strlen($1-) - perc.l @ FUNCTION_RETURN = [$left($perc.l $1-)$right($perc.r $1-)] # @ FUNCTION_RETURN = [$([$perc.l]1-)] ## [$([-$perc.r]1-)] purge perc } } ### An optimized DCC SEND routine (by Zelix) alias dsopt { if (match($right(3 $zuh($0 C)) $local)) {@ dccblksz = [4096]} {@ dccblksz = [1024]} eval ^set DCC_BLOCK_SIZE $dccblksz wait -CMD //dcc send $0- } ### Automatically adjusting block size (by Zelix) alias adjblk { if ([$slastcps]>=[1]) { @ dccblksz = [$flfix($scps);@ scpsdiff = scps - slastcps] if (([$scps]>=[8192])&&([$dccblksz]<=[$maxblk])) {@ dccblksz = 16384} if (([$scps]<=[256])&&([$dccblksz]>=[1024])) {@ dccblksz = 1024} if ([$scpsdiff]>=[64]) {if ([$dccblksz]<=[$maxblk]) {@ dccblksz = dccblksz + 1024;eval ^set DCC_BLOCK_SIZE $dccblksz}} if ([$scpsdiff]<=[-150]) {if ([$dccblksz]>=[$minblk]) {@ dccblksz = dccblksz - 512;eval ^set DCC_BLOCK_SIZE $dccblksz}} if ([$dccblksz]<=[$minblk]) {@ dccblksz = minblk} } } loadbars 60 ### MIW message in window spr Other misc stuff alias miw { if (miws) { zecho Closing Awesome Message-In-Window ^assign miws 0 ^window refnum Messages ^window kill Messages } { zecho Opening Awesome Message-In-Window ^assign miws 1 ^window new name Messages ^window shrink 7 ^window scroll on ^window goto 3 } } ### Check for mail (by Vassago/SrFrog) on ^mail "*" {if ([$mailcheck]!=[off]) {zecho You have new email. \(Mail waiting: $1\) ^exec from | tail -$0} } alias frm {exec from} ### Modified, faster ischanop() function (by CKeeper) alias isop { if (([$1]==C)&&([$0]==N)) { if (P==[@]) {@ FUNCTION_RETURN = 1} {@ FUNCTION_RETURN = 0} } {/EVAL @ FUNCTION_RETURN = $ischanop($0 $1)} } ### Auto Rejoin (by Zelix) on -raw_irc "% KICK *" { if ([$3]==N) { if (A==[]&&rejoin!=[off]) {^timer 1 j $2} } { if (fprot) { if (!isfriend($nickonly($0))&&(isfriend($3))) { /qmode $strip(: $2) -o $nickonly($0) zecho Protecting friend $3 KICK //invite $3 $strip(: $2) } } } ^assign -uh_cache[$elow($3)] } alias bansave { if (([$1]!=N)&&(banprotect!=[off])) { if (isop($N $0)) { /qmode $0 -ob $1 $2 if (deopb!=[off]) {/qkick $0 $1 Don't ban me} } zecho You're being banned by $_V$1$_V with $_V$2$_V } {zecho Banned $_V$2$_V by $_V$1$_V} } ### Mode Change & Ban Detectors/Protection (by Zelix) on ^MODE * { if (([$2]==[-ooo])||([$2]==[-oooo])) { if (massdeopprotect==[ON]&&[$0]!=N) { /qmode $1 -o $0 } } if (!match($2 *+*b*)) { zecho $1\: $_V$2-$_V by $_V$0$_V at $tolower($Z) } } alias submode {if (mcount>0) {@ mcount = mcount - 1}} alias deopsave { if (isop($N $1)) {if (iop[$elow($C)][$elow($0)]) {/qmode $1 -o $0}} if (hivers) {if (iop[$elow($C)][$elow($0)]) {/gdo MODE $1 -o $0}} wait -CMD zecho Mass Deop on $_V$1$_V by $_V$0$_V detected at $Z ^assign -mcount } alias mdtest { if ([$0]==lastmd) { @ mcount = mcount + 1 ^timer 6 submode if (mcount>2) {/deopsave $0 $1} }{ if ([$0]==N) {^assign -lastmd} {@ lastmd = [$0];@ mcount = 1;^timer 6 submode} } } ### MODE Handlers (by YaZoO, lotsa mods by Zelix) on -raw_irc "% MODE *" { @ mdcnt = 0;@ modectr = 0;@ mde = [+] while (mid($mdcnt 1 $3)) { @ mdecc = [$mid($mdcnt 1 $3)] if (([$mdecc]==[-])||([$mdecc]==[+])) {@ mde = [$mdecc]} {if (match($mdecc b o)) {if ([$mde$mdecc]==[+b]) {if ((match($word($modectr $4-) *!*$zuh($N)))&&(rmatch($0 *!*))) {bansave $2 $nickonly($0) $word($modectr $4-)} {if (fprot) {if (isfriend($nickonly($0))&&match($word($modectr $4-) $afriends)) {/qmode $2 -ob $nickonly($0) $word($modectr $4-)} } } add_lastban $4- } if ([$mde$mdecc]==[-o]) { if ([$massdeopprotect]!=[OFF]) {/mdtest $nickonly($0) $2} if (fprot) { if (!isfriend($nickonly($0))&&isfriend($word($modectr $4-))&&(word($modectr $4-)!=N)) { /qmode $2 -o+o $nickonly($0) $word($modectr $4-) zecho Protecting Friend $word($modectr $4-) } } eval ^assign -iop[$elow($2)][$elow($word($modectr $4-))] } if ([$mde$mdecc]==[-b]) {add_lastunban $4-} if ([$mde$mdecc]==[+o]) { @ iop[$elow($2)][$elow($word($modectr $4-))] = [$time()$elow($0)] if (fprot&&isenemy($word($modectr $4-))) { zecho Deoping enemy $word($modectr $4-) /qmode $2 -o $word($modectr $4-)} } @ modectr = modectr + 1 } } @ mdcnt = mdcnt + 1 } } ### Topic handlers (Zelix) alias t {if ([$0]) {/quote topic $C :$0-}{//topic $C}} on ^329 "*" {zecho Channel $1 created on $mid(4 12 $stime($2)) - $3-} loadbars 65 ### Channel Topic in Status Bar (concept by jsanford, code by Zelix) # I've rewritten this segment at least 5 times -FINALLY it works consistantly- # decided to cache the topic, so I wouldn't have to get it whenever # someone changed the channel with x alias qt { if ([$topic[$elow($C)]]!=[]) {^set status_user $topic[$elow($C)]} {^set -status_user} } ^ON -topic "*" { @ topic[$elow($1)] = [$strip( $2-)] if ([$1]==C) {^set status_user $topic[$elow($1)]} } ^on ^333 "*" {echo *** Topic for $1 set by $2 on $mid(4 12 $stime($3))} ^ON -332 "*" { @ topic[$elow($1)] = [$strip( $2-)] if ([$1]==[$C]) { ^set status_user $topic[$elow($1)]} } ^ON -331 "*" { ^assign -topic[$elow($1)] if ([$1]==[$C]) {^set -status_user} } ### Uptime in Stat (concept by jsanford, code by Zelix) on ^exec "uptimestatus *" { @ users = [$word(${match(users, $1-) - 2} $1-)] if (!users) {@ users = [1]} if (([$sdccs]<=[1])&&([$dccs]<=[1])) { ^set status_user2 \($msgnum $recnum\) Ld:$mid(${rindex(: $1-)+2} 4 $1-) Usr:$users } @ up_inprog = [0] } alias update_uptime { if (up_inprog!=[1]) { @ up_inprog = [1] exec -name uptimestatus uptime } } on ^exec_error "uptimestatus *" {@ up_inprog = [1]} ### Find K-Line (Written by Zelix, concept by asmodean) alias findk { if ([$1]) {@ lookaddr = [$1]}{@ lookaddr = [*!*$zuh($N)]} ^on #-216 -1 * {zecho Receiving K-line list from $0;^on #216 -1 -*} ^on ^216 * { @ totalk = totalk + 1 if (rmatch($lookaddr $4@$2)) { @ yourk = yourk + 1 zecho Found k-line \#$yourk \(\#$totalk\): $4@$2 $5- } } ^on ^219 * { if (!yourk) { zecho No k-lines found on $0 \(scanned $totalk k-lines\) } { zecho Found $yourk k-lines on $0 \(scanned $totalk k-lines\) } ^assign -yourk;^assign -totalk ^on 219 -*;^on 216 -* } ^assign -yourk;^assign -totalk //stats k $0 } ### The beginning of an "on" to explain version responses on ^351 * { purge tfo @ tfo.all = [$1 $3-] @ tfo.cnt = 0 while (word($tfo.cnt $tfo.all)) { if (match(TS $word($tfo.cnt $tfo.all))) { @ tfo.rtn = [$tfo.rtn] ## [TS ] } @ tfo.cnt = tfo.cnt + 1 } zecho Server $2\: $1 $3- \($tfo.rtn\) } ### Stats spr Stats stuff alias stat { if (A!=[]) { zecho Away since $awaytime} zecho Pings: $pinged by $lpinger at $lpinged zecho Ping all: $pingall by $lpingaller at $lpingall zecho Fingers: $fingered by $lfingerer at $lfingered zecho Finger all: $fingerall by $lfingeraller at $lfingerall zecho Versions: $versioned by $lversioner at $lversioned with $serversn Server zecho Version all: $versall by $lversaller at $lversall zecho Splits: $Splt latest $lspltsrv at $lsplt zecho Zupgrades: $Zups by $lzuper at $lzups zecho Messages: $msgnum\, Records: $recnum @ timevar = time() - startupt zecho Total time spent in IRC: $tdiff($timevar) } alias dstat2 {eval ^set status_user1 s: $sdccs d $dccs;^timer 1 dstat2} alias dstat { zecho ::::::::::::::::::: DCC Info ::::::::::::::::::: zecho . zecho Optimized Turbo DCC SEND routine: $optdcc zecho Maximum DCC SEND block size: $maxblk zecho Minimum DCC SEND block size: $minblk zecho Compression: $compression zecho DCC Status indicator in status bar: $dccst zecho Full DCC Status indicator: $ldcc zecho Graphical DCC Status indicator: $gdcc zecho DCC Status indicator updates every $dtimer seconds zecho Calculations will be made using $remcalc cps zecho DCC Autoget protection is $agbomb zecho Reminding users of pending DCCs is $pends } alias xstat { zecho XDCC: Lists: $XDCCLISTS by $XDCCLISTER at $XDCCLISTT zecho ..... Sends: $XDCCSENDS by $XDCCSENDER at $XDCCSENDT zecho ..... Receives: $XDCCRECS by $XDCCRECER at $XDCCRECT zecho ..... Version: $XDCCVERSES by $XDCCVERSER at $XDCCVERST zecho ..... Help: $XDCCHELPS by $XDCCHELPER at $XDCCHELPT echo ------------------ XDCC Logs ------------------ wait -CMD pubcat $xdcclog } ### Channel Stats Generator (concept by YaZoO / code by Zelix) # We cache lotsa good stuff here # rewrote this thing to work well if 2 channels are joined in rapid succession # (ie. I added another dimension for channels) alias cstat { eval purge cst.$elow($C) eval ^on ^who "$C *" { if (strip(@ $2)!=[$2]) { @ cst[$encode($tolower($0))][op] = cst[$encode($tolower($0))][op] + 1 if (!iop[$encode($tolower($0))][$encode($tolower($1))]) { @ iop[$encode($tolower($0))][$encode($tolower($1))] = [$time()$encode(cstat)]} } if (strip(H $2)!=[$2]) {@ cst[$encode($tolower($0))][here] = cst[$encode($tolower($0))][here] + 1} if (strip(\* $2)!=[$2]) {@ cst[$elow($0)][ircop] = cst[$elow($0)][ircop] ## [$1 ] } @ cst[$encode($tolower($0))][total] = cst[$encode($tolower($0))][total] + 1 } eval ^on -315 "% $C *" { eval ^on 315 -"% $1 *" eval ^on who -"$1 *" zecho $1 -> Ops: $cst[$elow($1)][op]\/$cst[$elow($1)][total] \(${([$cst[$elow($1)][op]]*100)/cst[$elow($1)][total]}\%\) | Here: $cst[$elow($1)][here]\/$cst[$elow($1)][total] \(${([$cst[$elow($1)][here]]*100)/cst[$elow($1)][total]}\%\) | IrcOPs: $wordcnt($cst[$elow($1)][ircop])\/$cst[$elow($1)][total] \(${([$wordcnt($cst[$elow($1)][ircop])]*100)/cst[$elow($1)][total]}\%\) if (cst[$elow($1)][ircop]) {zecho IrcOPs \($wordcnt($cst[$elow($1)][ircop])\): $cst[$elow($1)][ircop]} } //who $C } on ^notice "% *wall* *" {echo \[$0 $strip([] $1)\] $2-} alias wall { @ wallcnt = 0 foreach iop.$elow($C) xx { @ wall = [$decode($xx)\,${wall}] @ wallcnt = wallcnt + 1 } qnotice $wall \[WallOP\:$C\\($wallcnt\)\] $0- ^assign -wall;^assign -wallcnt if (!P) {zecho You are not chanop in $C \(message sent anyway\)} } alias sops { ^assign -sops if (![$0]) { foreach iop.$elow($C) bb {@ sops = [$sops $decode($bb)]} zecho Ops in $C\: $sops;^assign -sops } { zecho $0 was opped by $nickonly($decode($mid(9 99 $iop[$elow($C)][$elow($0)]))) \($tdiff(${time() - left(9 $iop[$elow($C)][$elow($0)])}) ago\) } } on -channel_nick "*" { @ lastnicker[$elow($0)] = [$elow($1)] if (iop[$elow($0)][$elow($1)]) { @ iop[$elow($0)][$elow($2)] = [$iop[$elow($0)][$elow($1)]] eval ^assign -iop[$elow($0)][$elow($1)] } } loadbars 70 # Nice whois (art by krom, code by Zelix) alias nice_w { @ nice_w = [on] ^on ^311 * { if (isfriend($1)) { echo =====-====-===-==-=- \[Whois: $1 (Friend)\] -=-==-===-====-=====}{ if (isenemy($1)) { echo =====-====-===-==-=- \[Whois: $1 (Enemy)\] -=-==-===-====-=====}{ echo =====-====-===-==-=- \[Whois: $1\] -=-==-===-====-=====}} echo *** Host | $2\@$3 echo *** Info | $5-} ^on ^314 * { if (isfriend($1)) { echo =====-====-===-==-=- \[Whowas: $1 (Friend)\] -=-==-===-====-=====}{ if (isenemy($1)) { echo =====-====-===-==-=- \[Whowas: $1 (Enemy)\] -=-==-===-====-=====}{ echo =====-====-===-==-=- \[Whowas: $1\] -=-==-===-====-=====}} echo *** Host | $2\@$3 echo *** Info | $5-} ^on ^312 * { echo *** Server | $1 echo *** ServerID | $2-} ^on ^313 * { echo *** IRCop | $1-} ^on ^317 * { echo *** Idle | $tdiff($2)} ^on ^319 * { echo *** Channel(s) | $1-} } alias nice_off { @ nice_w = [off] ^on 311 -*;^on 312 -*;^on 313 -*;^on 317 -*;^on 319 -* } ### Finds idle times w/o fingering! (by Zelix) ### Useage: /fidle or /fidle ### Or /fidle or /fidle