xecho -banner -nolog -- Loading. # NOTES: # * No timer refs begining with A. # Reload command sequences: # eval dump all;load ~/.ircrc;allvwins reinitstat # eval dump alias on;load ~/.ircrc;allvwins reinitstat # Initialisation. cd ~/wrk/ xdebug dword # Config maintenance. unload creddyscript package creddyscript fe ($getsets(load_path status*)) foo { stack push set $foo } on ^unload creddyscript** { fe ($getsets(load_path status*)) foo { stack pop set $foo } } if (J!~[bitchx*]){ load debug.irc load cetk.functions load cetk.commands load cetk.userlist load cetk.connmgmt load cetk.chanmgmt load cetk.clonecheck load cetk.opme load cetk.fserve load cetk.proxycheck load cetk.httpd load cetk.topicmgmt load cetk.entertainment load autoget load commandqueues load data_struct load data_array load files load functions load guh load history load mudirc load pipe load tabkey.ce load dcc_spacefix load help bind ^N quote_character bind ^X switch_channels bind ^W NOTHING bind ^Wb parse_command window balance bind ^Wh parse_command window hide bind ^Wk parse_command window kill bind ^Wl parse_command window list bind ^Wm parse_command window move } # Ident server. alias.t serve.ident (args) if (2>#args){xecho -banner -- Requires: [port] [user]}{@:port=shift(args);on ^dcc_raw "% % N $port" \{on ^dcc_raw "\$0 % *" \{switch ($2)\{(c)\{on ^dcc_raw -"\$0 % *"\}(d)\{msg =\$0 \$strip("$chr(13 10)" $3-) : USERID : UNIX : $args\}\}\}\};@listen($port)} # Aliases. Macros. alias.t recursew if (functioncall()){@:args=[$*];@:fn=shift(args);@:var=shift(args);return return \$${fn}\(\$splice\($var 0 \$\{#${var}/2\}\)\) \$${fn}\($var\)} # Aliases. Functions. @ :oxd = xdebug(dword)) xdebug dword fe (perl ruby tcl) foo {alias.t ${foo}f @:quote=attr.bold(\")\;unless (functioncall())\{xecho -banner -nolog -- \$quote\$*\$quote RETURNED \$quote\$${foo}($*)\$quote\}} fe (sin cos tan) foo {alias.t ${foo}d @:of=setset(floating_point_math on)\;@function_return=${foo}(${(atan(1)*[$*])/45})\;set \$of;alias.t a${foo}d @:of=setset(floating_point_math on)\;@function_return=\{45*a${foo}($*)/atan(1)\}\;set \$of} fe (bold 2 inv 22 ul 31) foo bar {alias.t attr.$foo return \$\{@?chr\($bar\)##[\$*]##chr\($bar\):[]\}} fe (lc 97 122 uc 65 90) foo bar baz {alias.t count.$foo @:count=0\;fe ($ascii($*)) foo \{if \($bar<=foo&&foo<=$baz\){@count++}\}\;return \$count} fe (writeb write) foo {fe (.0 "") bar {alias.t ${foo}to${bar} ${[]==bar?[]:[@unlink($0)\;]}@:foo=open($0 W)\;\@${foo}($foo $1-)\;@close($foo)}} fe (beforr before after beforrw beforew afterw) foo bar baz {alias.t $foo @:ret=${bar}($*)\;return \$\{strlen\(\$ret\$${baz}($*)\)?ret:isnumber($0)?[\$2-]:[\$1-]\}} fe (convert iptoname nametoip hostnorm) foo {alias.t ${foo}nuh (ret) fe ret foo \{@foo=[\$before(-1 @ $foo)@\$${foo}($after(-1 @ @$foo))]\}\;return \$ret} fe (convert iptoname nametoip hostnorm) foo {alias.t ${foo}spec (ret) fe ret foo \{@foo=[\$${foo}($before(: $foo)):\$after(: $foo)]\}\;return \$ret} fe (x ^ a + s -) func op {alias.t mod$func (ret) @:baz=ascii($shift(ret))\;@:ret=ascii($ret)\;fe ret foo \{unless (#bar){@:bar=baz}\;@foo${op}=shift(bar)\}\;if (functioncall()){return $chr($ret)}{xecho -banner -nolog -- $chr($ret)}} fe (r "") foo {alias.t u$foo users$foo} stack push alias alias.tt alias.t alias.tt (args) { alias.t $args @ sar(gr/encrypt/decrypt/args) @ sar(gr/KEY2/KEY1/args) alias.t $args } alias.tt encrypt.fd (args) { @ :bar = [], :fd = shift(args), :key1 = :key2 = jotc($shift(args)), :len = @KEY2 fec args foo { @ bar = asciiq($read($fd 1)) % len @ KEY2 = rest($bar $KEY2)##left($bar $KEY1) @ foo = tr($chr(1)$key1$chr(1)$key2$chr(1)$foo) } return $args } stack pop alias alias.tt #fe (decrypt.fd key1 encrypt.fd key2) cmd foo {alias.t $cmd (args) @:bar=[]\;@:fd=shift(args),:key1=:key2=jotc($shift(args)),:len=@$foo\;fec args foo \{@bar=asciiq($read($fd 1))%len\;@$foo=rest\(\$bar \$$foo\)##left\(\$bar \$$foo\)\;@foo=tr\($chr(1)\$key1$chr(1)\$key2$chr(1)\$foo\)\}\;return \$args} eval alias ui $sar(g/userhost/userip/$aliasctl(alias get uh)) alias.t argorchan return ${0>index(#&+ $*)?C:[$*]} alias.t bdepth @:cnt=:ret=0;@:lf=[$0];@:rt=[$1];fec ($2-) foo {switch ($foo){($rt){@--cnt}($lf){@++cnt;if (cnt>ret){@ret=cnt}}}};return $ret alias.t canonise.fn (args) { } alias.t chananuhs @:ret=myservers(.);fe ret serv {xeval -s $serv {@serv=pattern("\\[$*\\]" $nickuserhost($chanusersa()))}};return $sort($uniq($ret)) alias.t colorhash return ${chr(3)##(31+modhash(6 $tolower($foo)))} alias.t colorise fe ($*) foo {@:bar#=chr(3)##(hash_32bit("$tolower($foo)")%6+31)##foo};return $:bar$chr(15) alias.t cooler (args) { fec args foo { if (isalpha($foo) && !rand(2)) { @ foo = chr(${32 ^ ascii($foo)}) } } if (functioncall()) { return $args } else { echo $args } } alias.t coolest (args) { fe args foo { @ :foo = ascii($foo) @ splice(foo 1 0 $shuffles($splice(foo 1 ${#foo-2}))) @ :foo = chr($foo) } if (functioncall()) { return $args } else { echo $args } } alias.t count.en @:count=0;fe ($ascii($*)) foo {if (2==foo||3==foo||22==foo||31==foo||15==foo){@count++}};return $count alias.t expand.brace { @ :reg = regcomp([\{]\([^\{\}]*\)[\}]) @ :matches = regmatches($reg 2 $*) @ regfree($reg) unless (#matches) { return $* } @ :left = left($word(0 $matches) $*) @ :right = rest(${shift(matches) + shift(matches)} $*) @ :mid = mid($matches $*) @ :cnt = count(, $mid) + 1 @ :cnt = repeat($cnt . ) fe cnt cnt { @ cnt = ${t}($left$beforr(, $mid)$right)) @ mid = after(, $mid) } if (functioncall()) { return $cnt } else { echo $uniq($cnt) } } alias.t fcount @:ret=[];fe ($*) foo {@:fd=open($foo r);@push(ret $fskip($fd 999999999));@close($fd)};if (functioncall()){return $ret}{xecho -banner -nolog -- $ret} alias.t hash @:bit=0;@:ret=0;fe ($ascii($*)) foo {@ret^=foo<<(bit++&15)};return ${ret&65535^(ret>>16)} alias.t hostnorm (args) fe args arg {@arg=isip4($arg)?arg:unsplit(. $revw($split(. $arg)))};return $args alias.t interesting.show { if (4 & checkshit(. $2)) {return} @ :bl = chr(2), :lt = bl##[\(]##bl, :rt = bl##[\)]##bl @ :wd = uniq($perl("@foo")) @ :sg = serversgroup($servernum()) @ :fm = colorise($before(! $0)) @ :to = colorise($2) @ :msg = stripcrap(all $3-) setuniqitem interesting $1-2 -$servernum()/$0 $3- 1cmd 3600 xecho -banner -nolog -window crap -level user1 -- Found $lt$wd$rt on $lt$sg$rt in $fm $1 $to $msg if (msg == [$3-]) {1cmd 3600,3600 beep $servernum() $after(@ $0) $to} } alias.t keysto @:ret=[];foreach list.chan foo {if (rmatch($decode($foo) $*)){@push(ret $list[chan][$foo][keys])}};return $decodew($uniq($encodew($ret))) alias.t lastlog.lines { @ :matches = lastlog($winnum() "\\[$*\\]" all) fe matches foo { @ foo = line($foo) } return $matches } alias.t mode.split @:on=:off=[];@:mode=[];fe ($*) bar {fec (+$bar) foo {switch ($foo){(+){@mode=[on]}(-){@mode=[off]}(*){@$mode#=foo}}}};return $on $off alias.t modhash return ${hash_32bit($1-)%[$0]} alias.t mychflags if (#){return $strip(. $mid(0 2 $pattern(??$servernick() $channel($0))))$0 $${t}($1-)} alias.t mynicks (args) @:args=#args?args:myservers(.);fe args arg {xeval -s $arg {@arg=servernick()}};return $args alias.t net @:ret=[];@:rand=[];@:fh=open(~/.ircservers R T);while (!eof($fh)){@:foo=read($fh);if (foo=~[*:*:*:*:$0]&&(!strlen($ret)||(match($before(: $foo) $myservers())&&!++rand($rand)))){@ret=foo}};@close($fh);return $ret fe (anuhs nickuserhost($*) canuhs "pattern('\\[$*\\]' $nickuserhost($chanusersa()))" anotify "pattern('\\[$*\\]' $nickuserhost($notify(on)))") foo bar {alias.t nickuserhost.$foo @:ret=myservers(.)\;fe ret serv \{xeval -s \$serv \{@serv=$tr(/'/"/$bar)\}\}\;return \$sort($uniq($ret))} eval alias.t nickuserip $sar(g/uh1=uh1/uh2=uh1?ui($uh1):[],uh1=!uh2/$aliasctl(alias get nickuserhost)) alias.t nuhnorm @:ret=hostnormnuh($*);fe ret foo {@foo=[$after(@ $foo)@$swap(! $before(@ $foo))]};return $ret alias.t numbers (args) fe args arg {@:arg=isnumber(b10 $arg)?arg:[]};return $args alias.t purge struct.purge alias.t randcnf (num,filt) { @ :ret = [] eval @ :foo = tr\(/./ /$repeat(${num-#ret} \$longtoip($rand(0)) )\) fe ($filt) bar { @ foo = filter($bar $foo) } @ ret #= foo return $ret } alias.t regexsubst return \\b\($unsplit(| $sar(g/%/\\S\*/$sar(g/*/.*/$sar(g/./\\./$*))))\)\\b alias.t regtmatches @:foo=regmatches($*);@:str=[$2-];fe foo bg en {@bg=mid($bg $en $str),en=[]};return $foo alias.t replace.split @:args=[$*];@:num=#;if (3==num){return $sar(g/$1/$2/$0)} elsif (3winvisible(all)){^window new number 999 double off name all};^window swap all noserv bind ^[[25~ parse_command fe ($revw($winrefs())) foo {if (match($foo 10 48)){^window swap $foo;break}} bind ^[[26~ parse_command ^window swap 2 fe ($jot(1 8)) win {bind $getcap(TERM key_f$win 0 1) parse_command ^window swap \$word\($win \$winrefs()\)} bind ^[[20~ parse_command winorder bind ^[[21~ parse_command ^set beep toggle;beep fe (set format_ fset) cmd bar { fe ($getfsets(${bar}action* ${bar}ctcp* ${bar}dcc_* ${bar}encrypted* ${bar}msg ${bar}msg_group ${bar}notice* ${bar}public* ${bar}send*)) foo {fe (\$1 \$2) baz {$cmd $foo $sar(/qwerasdfzxcv/$baz-/$sar(/$baz/\$colorise\($baz\)/$sar(/$baz-/qwerasdfzxcv/$($foo))))};$cmd $foo $sar(g/%b/\${checkuser($last[$serversrefe()][from] $2)?chr(2):}\$seta(${hash_32bit($1$2)%7+31})/$sar(g/%K:/%b\$seta(${hash_32bit($2$1)%7+31}):%n/$($foo)))} $cmd ${bar}action $(${bar}action_other) $cmd ${bar}action_ar $(${bar}action_other_ar) $cmd ${bar}away \$3- \$attr.bold([)last kb activity > \$tdiff2\(\$E\) ago\$attr.bold(] [)/ctcp \$servernick($servernum()) page\$attr.bold(]) $cmd ${bar}channel_signoff $sar(g/\$1 /\$1!\$2 /$(${bar}signoff))%n $cmd ${bar}dcc_chat $sar(g/ %n/%n /$(${bar}dcc_chat)) $cmd ${bar}links $sar(g/13/24/$(${bar}links)) $cmd ${bar}nick_comp \$0\${rmatch($C,$n $my.noattr)?[\:]:attr.bold(\:)}\$1- $cmd ${bar}public $(${bar}public_other) $cmd ${bar}public_ar $(${bar}public_other_ar) $cmd ${bar}send_action $(${bar}send_action_other) $cmd ${bar}send_public $(${bar}send_public_other) $cmd ${bar}signoff $(${bar}signoff)%n ($2) $cmd ${bar}whois_idle $sar(/signon/\$stime(${time()-3600*[$0]-60*[$1]-[$2]}) signon/$(${bar}whois_idle)) } eval set status_lag $sar(^%L^%L:\$status.lw()^$status_lag) eval set status_format1 $sar(^%F^%{1}F^$status_format1) eval set status_format1 $sar(^%S^%{2}S^$status_format1) eval set status_format2 $sar(^%2^%2:\$status.lw()^$status_format2) eval set status_format2 $getset(status_format2)$replace(%{1}xxx xxx $jot(0 9)) %{1}K %{1}D %P %. fe (1 2 "") foo {set status_format$foo %9$getset(status_format$foo)} fe (action \$1 \$0 \$2 -> < send_action \$0 \$servernick() \$1 -> < dcc_chat * \$0 \$1 = = send_dcc_chat \$0 * \$1 = = msg \$servernick() \$0 \$1 * * msg_group \$1 \$0 \$2 * * send_msg \$0 \$servernick() \$1 * * notice \$servernick() \$0 \$1 - - send_notice \$0 \$servernick() \$1 - - public \$1 \$0 \$2 < > public_msg \$1 \$0 \$2 < > public_notice \$1 \$0 \$2 - - public_other \$1 \$0 \$2 < > send_public \$0 \$servernick() \$1 < >) hook foo bar baz open close {on ?$hook * ${hook==[notice]?[if (!last[$last[eserv]][from]){return 0};]:[]}@:key=encode\($hook $foo${0>index(0123 $foo)||0>index(0123 $bar)?[ $bar]:[ ]##bar}\)\;@:echo=colorise[\$key]\;unless (echo)\{@:b=${hook=~[send_*]||[\$servernick()]==foo||[*]==bar?51:[checkuser\(. $bar\)?51:31]}\;@:c1=chr(3)##\(b+hash_32bit\($foo$bar\)%7\)\;@:c2=chr(3)##\(b+hash_32bit\($bar$foo\)%7\)\;@colorise[\$key]=echo=[\$c1$open\$colorise\(${hook=~[send_*]||[\$servernick()]!=foo?foo:[\$servernick()]}\)\$c2:\$colorise\(${hook=~[send_*]||[\$servernick()]!=bar?bar:[\$servernick()]}\)\$c1$close${hook=~[send_*]||[\$servernick()]==foo||[*]==bar?chr(15):[\$\{2&word\(0 \$checkshit\(. $bar\)\)?chr(3)##[1,1]:chr(15)\}]}]\}\;xecho -- \$echo $baz-\;if (0<=winvisible(all))\{xecho -nolog -window all -- $attr.bold([)\$[8]servergroup\(${[*]==foo||[*]==bar?[]:hook=~[send_*]?[\$servernum()]:[\$lastserver()]}\)$attr.bold(]) \$echo \$stripcrap\(all $baz-\)\}\;return 1} # Internal Variables. eval set logfile IrcLog.D${time()/86400} #eval set output_rewrite \$strip\("$chr(18 27)" \$1-\) set aop on set auto_away off set auto_reconnect off #set auto_rejoin 5 set auto_rejoin_delay 5 set auto_response 1 #set auto_unmark_away on set auto_whowas off ##set beep_on_msg ctcp,dcc set beep_when_away 0 #set bot_mode on set change_nick_on_kill on set chanmode +spnt set channel_name_width 0 set cloak 2 defer ^assign.ifnul cloak 2 set clock_24hour on set clock_format %d%a-%R #set connect_timeout 3 set continued_line set cpu_saver_after 300 set cpu_saver_every 10 #set dcc_auto_send_rejects off set dcc_long_pathnames off set dcc_sliding_window 32 set dcc_store_path ~/dl/irc-incomplete set detach_on_hup off #set do_notify_immediately off set exec_protection off set fake_split_patterns * set floating_point_math off #set floating_point_precision 16 set flood_maskuser 1 set flood_users 50 set flood_rate_per 3 set ftp_grab on set hack_ops on set help_prompt off set help_window off set history 1000 set history_circleq off set history_remove_dupes on set hold_slider 0 set http_grab on set ident_hack .fakeid set ignore_time 1 #set input_aliases on set insert_mode on set kick_if_banned off set lastlog 1000 set mail 0 #set mangle_logfiles all set mirc_broken_dcc_resume on set mircs on set mode_stripper on set msglog off set msglog_level msgs send_msg set new_server_lastlog_level none set next_server_on_local_kill on #set no_fail_disconnect on #set notify_handler noisy set notify_level all -crap -joins -parts -quits -nicks -modes set num_of_whowas 0 set quit_message Holy shit... I found the universes emergency exit. set quit_message How Now Brown Bureaucrat. defer set -quit_message set same_window_only on set scrollback_ratio 100 set send_away_msg off set show_away_once off set show_end_of_msgs on set show_server_crap on set show_status_all on set show_unauths on set show_who_hopcount on eval set ssl_root_cert_file foo #set status_does_expandos on eval set status_user0 $pid() $afterw(on $info(c)) eval set status_user9 $seta(44) set switch_channels_between_windows off set verbose_ctcp on bantype host if (21==getenv(WINDOW)||[on]==getset(LOG)){set log on}{set log off} # Graffiti Wall. addctcp wall "Graffiti Wall. A public access bulletin board." { if (4 > cloak && [] == checkshit(. $1)) { if ([wall.$3] == aliasctl(alias match wall.$3)) { wall.$3 $0-1 $4- @ :nolist++ } unless (nolist) { @ :list = aliasctl(alias match wall.) fe list list { @ :list = aliasctl(alias get $list) ? after(. $list) : [] } q1cmd 120 8 notice $0 $2 commands: $list wall.list $0-1 $3- } } } alias.t wall.add (nick,dest,msg) { @ :utu = utimeu() @ wall[$utu] = [$attr.bold(<)$nick$attr.bold(>) $msg] writeto ~/.BitchX/BitchX.wall @ wall[$utu] = decode\($encode($attr.bold(<)$nick$attr.bold(>) $msg)\) qcmd 8 ctcp.notice $userhost() $nick Message Added to the wall. } alias.t wall.list (nick,dest,mask) { @ :list = aliasctl(assign match wall.) @ :start = isnumber(b10 $mask) ? shift(mask) : 0 @ :count = isnumber(b10 $mask) ? shift(mask) : 5 @ :mask = mask ? mask : [*] fe list list { @ list = [$($list)] && [$($list)] =~ mask ? list : [] } @ :list = numsort($list) @ :rest = revw($list) @ :list = splice(rest 0 $start) @ :list = splice(rest 0 $count) fe list list { q1cmd 0 8 ctcp.notice $userhost() $nick $stime($cut(1 . $list)) $attr.bold(:) $($list) } if (rest) { q1cmd 0 8 ctcp.notice $userhost() $nick $#rest more messages match "$mask": /ctcp $dest wall list ${start+count} $count $mask } else { q1cmd 0 8 ctcp.notice $userhost() $nick No more messages match "$mask". q1cmd 0 8 ctcp.notice $userhost() $nick /ctcp $servernick() wall add [your message here] } } # CTCP SOUND # addctcp mp3,sound "plays a sound." { if (checkshit(. $1)) { } elsif (0 > fexist("" $dcc_store_path/$3-)) { @ :foo = encodel($userhost()) if (time() < sound[$foo][time]) { } elsif (rmatch($serversgroup($lastserver()),$C $my.sounds)) { @ sound[$foo][deny]++ @ sound[$foo][time] = time() + 3600 * 2**sound[$foo][deny] push sound[$foo][files] $urlencode($3-) echo Accept $2 $0-1 $3- qcmd 999 msg $0 !$0 $3- } } else { echo Play $2 $0-1 $3- exec play "$dcc_store_path/$3-" } } on #-dcc_request 1 "% SEND *" { @ :foo = encodel($userhost()) if (match($5 $sound[$foo][files])) { @ sound[$foo][time] = 0 @ sound[$foo][deny] = -3 @ sound[$foo][files] = rfilter($5 $sound[$foo][files]) } } # CTCP/2 #on #^raw_irc 0 '% PRIVMSG % :**$chr(6)**' pretend :$0-2 $sar(g/$chr(6)//$sar(g/$chr(6)N/$chr(15)/$sar(g/$chr(6)B/$chr(2)/$sar(g/$chr(6)V/$chr(22)/$sar(g/$chr(6)U/$chr(31)/$3-))))) # SSL on #?send_to_server 0 '% % \\[PRIVMSG NOTICE\\] % :**' { @:edst=encodel($3) if (my.sslsending||!SSL[$edst]) { @my.sslsending=0 } else { @my.sslsending=1 @:proto=SSL[$edest][proto]?SSL[$edest][proto]:[twofish] @:seed=rand(0) quote $2-3 :$chr(1)SSL $seed $perlcall(splitcall encryptcode 3 $proto ${SSL[$edst]##seed} $after(: $4-))$chr(1) return 1 } } on #^ctcp 0 "% % SSL **" SSL.read PRIVMSG $1- on #^ctcp_reply 0 "% SSL **" SSL.read NOTICE $servernick() $1- alias.t SSL { switch ($0) { (e) { foreach ssl dst { xecho -banner -- $decode($dst)$chr(9)$SSL[$dst] foreach ssl[$dst] src { if (!ssl[$dst][$src]||rmatch($decode($src) $*)) { @SSL[$dst][$src]=urlencode($"Key for $decode($src) to $decode($dst) \(was $SSL[$dst][$src]\): ") } else { xecho -banner -- $decode($src)$chr(9)$SSL[$dst][$src] } } } } (a) { @SSL[$encodel($1)]=urlencode($2-) } (*) { xecho -banner -nolog -- [e|a {dest} {key}] } } } alias.t SSL.read { @:src=last[$last[eserv]][from] @:esrc=last[$last[eserv]][efrom] @:edst=encodel($1) if (SSL[$edst][$esrc]) { pretend :$src $0-1 :$perlcall(splitcall decrypttext 3 . $SSL[$edst][$esrc]$3-) } else { @SSL[$edst][$esrc]=0 xecho -banner -nolog -- SSL message from $src to $1 } } # More crypto. fe (ctcp shift(args) msg shift(args) ping shift(args) say T) food baz {fe (e$food "\$shift(args) epic-crypt-gpg-aa" n$food) foo bar {alias.t $foo @:args=[\$*]\;@:dest=$baz\;@:foo=encryptparm($dest)\;encrypt \$dest $bar\;${food==[say]?[msg]:food} \$dest \$args\;encrypt \${foo?foo:dest}}} # Hooks. Combinations. fe (channel_sync connect disconnect server_lost) foo {on #-$foo + * ^timer -ref winser0 5 ^winservchans} fe (401 402 437) foo {on #-$foo 203 * if (3>cloak&&rmatch($1 $my.nicks)&&!rmatch($servernick() $my.nicks)){qcmd 99 if \([$1]==servernick()\)\{qcmd\}\{nick $rpattern($1 $my.nicks)\}}\;if \([\$1]\)\{wwq \$1\}} fe (nickname notify_signoff signoff) foo {on #-$foo 203 * if (3>cloak&&X!=userhost()&&rmatch($0 $my.nicks)&&!rmatch($servernick() $my.nicks)){nick $rpattern($0 $my.nicks)}} fe (367 * \$2 \$3 mode_stripped "% % +b *" \$3 \$0) hook hookmask mask hooker {on #-$hook 204 "$hookmask" if \([\$servernick()!\$X]=~[$mask]\)\{xecho -banner -window crap -level crap -- \$attr.bold\($hooker\) on \$attr.bold\(\$1\) \\\(\$attr.bold\(\$serversgroup\(\$servernum\(\)\)\)\\\) has banned you \\\(\$attr.bold\($mask\)\\\)\}\;@:nicks=pattern\(\$beforr\(! $mask\) \$chanusers($1)\)\;@:foo=userhost($nicks)\;@:nicks=copattern\(\$after\(-1 ! !$mask\) foo nicks\)\;@:foo=pattern\($mask \$nickuserhost($nicks)\)\;if (#foo) \{xecho -banner -- \$attr.bold\($hooker\) on \$attr.bold\(\$1\) has banned \$attr.bold\(\$#foo $mask\) \$foo\}} #fe (send_msg send_public send_action) foo {on #-$foo + * {@list[sentmsg][$encodel($0)]=time()}} # CTCPs. on #?ctcp_request 0 * { if (!cloak&&match($1 $servernick() $mychannels())) { return 0 } else { xecho -banner -window crap -level crap Ignoring CTCP $attr.bold(\($attr.bold($serversgroup($lastserver()))\)): $* return 1 } } fe (ctcp ctcp_request) foo {fe (action dcc sed utc) bar {on #-$foo 0 "% % $bar **"}} on #-ctcp_request 0 "% % DCC CHAT **" { unless (2 servernum()) { } elsif (encryptparm($1,$0!userhost())) { } else { xecho -banner -level crap -window crap -- CTCP $2 from $0 to $1 setnextitem SED,$1,$0 $asciiq($3-) } } on #?ctcp_request 0 "% % FINGER **" { if (cloak||strlen($checkshit(. $1))) { return 1 } else { exec -direct -window -line \{scmd $lastserver() qcmd 999 ctcp.reply $0 $2 \$*\} w -fh } } on #?ctcp_request 0 "% % PING **" { if ([$0]==[$1]) { xecho -banner -- CTCP $2 request from $0: $tdiffu($3-) } else if (2 my.paged+120) { @ my.paged = time() @ :foo = [Now] exec beeper beeper $* } else { @ :foo = [Already] } if (!cloak && [$1]==servernick()) { if (checkshit(. $1)) { q1cmd 300 999 ctcp.reply $0 ERRMSG $2 You wish to talk to me after all that? Heh. } else { qcmd 999 ctcp.reply $0 $2 ${foo} Paging $servernick(), who was last seen $tdiff($E) ago. } } } addctcp calc "returns mathematical result of args." { if (4>cloak) { qcmd 999 ctcp.reply $0 $2 $bcalc($3-) } } addctcp dict "returns the dictionary definition of args." { if (4>cloak) { exec -direct -window -name dict -line \{qcmd 999 ^ctcp.notice $userhost() $0 \$*\} xargs -r dict exec -in %dict $3- exec -closein %dict exec -name dict$rand(1000000) %dict } } addctcp fortune "Fortune Cookie. May have formatting problems." { if (4>cloak) { exec -direct -window -name fortune$rand(1000000) -line \{qcmd 999 ctcp.notice $userhost() $0 \$*\} fortune -a } } addctcp keysto "returns known keys to a channel." { if (3>cloak&&checkuser(. $1)) { if (2&checkuser(. $3 ${[$4]?[$4]:[.]})&&!checkshit(. $3)) { xecho -banner -level crap -window crap -- Replying to $* ctcp.reply $0 $2 $uniq($revw($keysto($3) $key($3))) } else { if (!cloak) { ctcp.reply $0 ERRMSG Please ask someone living. } } } } addctcp seen "Returns info on the last seen nick!user@host matching any of the arguments." { if (4>cloak && []==checkshit(. $1)) { @ :nuhs = 0 @ :list = [$3-] fe list foo { @ foo = 0>index(*!@ $foo) ? [$foo!*] : foo } foreach list.nuh nuh { if (rmatch($decode($nuh) $list) && ++nuhs <= 10) { qcmd 999 ctcp.notice $userhost() $0 $2 $stime($list[nuh][$nuh]) $decode($nuh) } } qcmd 999 ctcp.notice $userhost() $0 $2 $nuhs matches for $list (max 10). } } on #^ctcp_reply 0 '$servernick() $servernick() PING $last[$last[eserv]][cping]' @last[$last[eserv]][cpingreply]=[$3-] on #-ctcp_reply 1 "% % TIME *" { @ :diff = time() - perlcall(str2time $3-) xecho -banner -- You are $[-6]diff \($tdiff2($diff)\) ahead of $0 } # Hooks. on #-221 1 ** @:old=mode.split($1);@:new=mode.split($getenv(IRCUMODE) $last[$serversrefe()][umode]);@:newon=strip(+$shift(old) $shift(new));@:newoff=strip(-$newon$shift(old) $shift(new));if (strlen($newon$newoff)){qcmd 9 umode +$getenv(IRCUMODE)+$last[$serversrefe()][umode]} on #-317 1 * if (isnumber(b10 $3)){xecho -banner -- $1 has been idle since $stime(${time()-[$2]}) \($tdiff2(${(time()-[$3])-[$2]}) after login $tdiff2(${time()-[$3]}) ago\)} on #-324 1 * pretend :$0 MODE $1- #on #-353 + ** { # @ :chan = [\$decode\($encode($2)\)] # @ :users = [\$decode\($encode($strip(@%+ $3-))\)] # qcmd names.end eval wiq "" \$remws\(\$chanusers\($chan\) / $users\) #} on #?306 0 ** if (isaway()) {return 1} #on #-366 + ** timer -update -ref names.$servernum() 20 while (foo = qcmd(names.end)) {$foo} on #-364 2 ** if ([]!=servping){qcmd 99 sping $1} on #-365 2 ** purge servping.delay on #-364 3 ** if ([]!=servtr){qcmd 99 traceroute $1} on #-365 3 ** purge servtr.delay on #-366 - * { @ :mc = serverctl(get $servernum() maxcache) if (0 <= mc && mc < numonchannel($1)) { } elsif (numonchannel($1)) { widle $1 } } on #-391 1 ** if (isnumber($2)&&isnumber($3)){xecho -banner -- Server says that it/you are $3/${time()-[$2]-[$3]} seconds ahead of UTC.} on #^401 0 "% 0 *" on #-451 1 ** fake #on #-463 + "% *" ircuser.dict #on #-439 + "% #% *" qcmd 9 join $1 on #-465 + "% *" if (3>cloak){ircuser.dict} on #^470 0 * mode $N +Q on #-474 + "% *" if (3>cloak){ircuser.dict};if (!rmatch($1 $my.ignorebans)){q1cmd 3600,3600 9 beep $1} on #-478 + "% *" { ban $1-2 @ :ar = [modeq,$servernum(),$1] @ :mt = getmatches($ar +b %) @ :nm = numwords($mt) @ :cb = chanbans(b $1) @ :cb = pattern(*!*@* $cb) fe ($leftw($nm $cb)) foo { setuniqitem $ar -b $foo } } on #-action + "% % \[isat isin\] *" unless (2&checkshit($0!$userhost() $1)) geoloc $0 $userhost() $1 $servergroup() -l $3- on #-channel_nick 0 * xecho -banner -say -- $1 \($userhost()\) on $0 is now known as $2 on #^channel_nick 1 * fe ($1-2) foo {if (isuser($foo!$userhost() $0)){dnotify $foo}} on #-channel_signoff 0 * xecho -banner -say -- $1 \($userhost()\) has quit channel $0 ${[$2]?[\($2-\)]:[]} on #-channel_sync 0 * @:foo=userhost(, $chanusers($0));xecho -banner -- Synced to $0 on $servername($2) in $1 seconds with $#filter($foo):$#pattern($foo) (un)known users. on #-channel_sync + * { @ :echan = encodel($0) if (rmatch($0 $randjoin.visit $randjoin.mask) && !rmatch($0 $randjoin.filt)) { } elsif (1 > ischanop($servernick() $0)) { mode $0 +b opme login $0 } elsif (1 != numonchannel($0)) { mode $0 +b } else { switch ($0,$serversgroup($2)) { (#bbschat,austnet) (#knownspace,lnorg) { mode $0 spn } (*~*,*) { mode $0 kn-opst ${keysto($0)?rightw(1 $keysto($0)):(rand(0)**2)**0.5+0} $servernick() } (*,*) { mode $0 spnt } } if (topic[$echan]) { topic $0 $topic[$echan] } elsif (:topic = topic.last($0 -1)) { topic $0 $topic } } } on #-connect + * { @ :eserv = serversrefe($0) @ lag[$servernum()][connect] = time() @ lag[$servernum()][received] = 0 @ my[servers][$eserv] = [$0:$1] q1cmd 0 9 umode q1cmd 0 9 /away $serverctl(get $servernum() away) } #on #-dcc_chat 1 * q1cmd 600,600 9 cbeep $0 #on #-dcc_connect 1 * streamdcc;cdcc save #on #-dcc_lost 1 * streamdcc;cdcc save on #-dcc_request 2 "% SEND *" qcmd 9 $getnrolitems(dccq,$0 dccw,$0 -1) #on #-dcc_lost 2 "% GET % \[\"% remote peer closed connection\" \"connection was not successful *\" \"connection failed\"\]" { on #-dcc_lost 2 "% GET % \[%?remote?peer?closed?connection connection?was?not?successful?* connection?failed\]" { getanrmitems dccw,$0 dccq,$0 *$tr(/_/?/$urldecode($2))* scmd "$dccctl(get $dccctl(locked) server)" defer fqcmd 9 $getnrolitems(dccq,$0 dccq,$0 -1) } #on #-dcc_lost 2 "% GET % \[\"% transfer complete\" \"user aborted connection\"\]" { on #-dcc_lost 2 "% GET % \[%?transfer?complete user?aborted?connection\]" { getanrmitems dccw,$0 dccx,$0 *$tr(/_/?/$urldecode($2))* scmd "$dccctl(get $dccctl(locked) server)" defer fqcmd 9 $getnrolitems(dcct,$0 dccw,$0 -1) } on #-dcc_list 1 * { switch ($0) { (start) { @ dcc.timenow = utime() @ dcc.rec = 0 @ dcc.ofp = setset(floating_point_math on) } (end) { @ :lsec = tdiffu($dcc.time $dcc.timenow) //echo $attr.bold(Totals): $dcc.rec / $lsec = $attr.bold(${dcc.rec/lsec}) @ dcc.time = dcc.timenow ^set $dcc.ofp } (*) { @ :fd = encode($0,$2,$7-) @ :lk = dccctl(locked) @ :ad = [locaddr remaddr offeraddr] fe ad ad {@ :ad = dccctl(get "$lk" $ad), unshift(ad $attr.bold($shift(ad)))} @ :ad = uniq($ad) @ :uh = dccctl(get "$lk" userhost) @ :fchr = [$6] @ :fsec = time() - [$4] @ :tchr = fchr - dccctl(get $lk resumesize) @ :lchr = fchr - dcc[$fd] @ :lsec = tdiffu($dcc.time $dcc.timenow) @ :rest = [$5] - fchr @ :eta0 = attr.bold($tdiff2(${rest / (tchr / fsec)})) @ :eta1 = attr.bold($tdiff2(${rest / (lchr / lsec)})) @ :cps1 = attr.bold(${lchr / lsec}) @ :held = dccctl(get $lk held) ? attr.bold(HELD ) : [] //echo $held$ad$attr.bold( $uh) $lchr / $lsec = $cps1 ETA = $eta1 / $eta0 FLAGS = $dccctl(get $lk flags) @ dcc[rec]+= lchr @ dcc[$fd] = fchr } } } #on #-encrypted_notice 1 * q1cmd 600,600 9 beep #on #-encrypted_privmsg 1 * q1cmd 600,600 9 beep on #^exec 0 "perl eval *" xeval -- $2- on #^exec_exit 0 "perl *" on #-exec_exit 1 * @tmp[$0]=[] #on #-exit - * dcc closeall;dcc list on #-exit 0 "**:Referential integrity failure:**" quit Referential integrity failure. Nuff sed. on #-exit 0 '$J' allservs eval quote QUIT :$randomread(~/.BitchX/BitchX.quit) on #-exit 0 '$J' fe ($myservers(.)) foo {@ serverctl(set $foo quit_message $randomread(~/.BitchX/BitchX.quit))} on #?input + * { if (index($CMDCHARS $0)) { exec -in %ispell $* } else { @ :ret = 0 fe ($split(, $after($CMDCHARS $0))) foo { if (rmatch($foo $winrefs())) { @ ++ret window swap $foo $1- } } return $ret } } #on #^input 0 "/%\' *" xtype -l $before(-1 ;"': $0)${0>index(;"': $before(-1 ;"': $0))?[]:[ ]}quote $1- #on #^input 0 "/%\" *" xtype -l $before(-1 ;"': $0)${0>index(;"': $before(-1 ;"': $0))?[]:[ ]}echo $1- #on #^input 0 "/%\; *" xtype -l $before(-1 ;"': $0)${0>index(;"': $before(-1 ;"': $0))?[]:[ ]}eval $1- #on #^input 0 "/%\: *" xtype -l $before(-1 ;"': $0)${0>index(;"': $before(-1 ;"': $0))?[]:[ ]}exec $1- on #?input 0 "%: **" if (3>strlen($0)||!match($before(: $0)% $chanusers($T))) {return 0}{sendline $sar(g/ /,/$pattern($before(: $0)% $chanusers($T)))${rmatch($T,$serversgroup($S) $my.noattr)?[\:]:attr.bold(\:)} $1-;return 1} on #-join 1 * { if ([$0] == servernick()) { opme login $1 } elsif (2 > numwords($nochops($1)) || servernick() == chops($1)) { @ :bo = chr(2) @ :sg = servergroup() @ :sg = servergroup(,) == sg ? serversgroup($servernum()) : sg echo $bo$0$bo \($2\) joins otherwise empty channel $bo$1$bo on $bo$sg$bo 1cmd 900,900 beep $1 } elsif (8&checkshit(. $1)) { if (ischanop($servernick() $1)) { ban $1 *!*@$after(@ $2) } else { opme opme $1 } } elsif (8&checkuser(. $1)) { if (ischanop($servernick() $1)) { op $1 $0 } else { opme opme $1 } } } fe (leave kick signoff) foo {on #-$foo - * q1cmd 0 999 emptycycle} on #-kill 1 * xecho -banner -window crap -level crap -- $0: $2 \($attr.bold($3)\) killed $attr.bold($1): $4- on #^leave 0 * xecho -banner -- $0 \($2\) has left channel $1 \($3-\) on #-mode_stripped 1 "% % +k %" { @ :chan = encodel($1) @ list[chan][$chan][keys] = remw($3 $list[chan][$chan][keys]) @ push(list[chan][$chan][keys] $3) writeto ~/.BitchX/BitchX.keys assign.addn list[chan][$chan][keys] $3 } on #-mode_stripped 1 "% % +b %" { if (1 > ischanop($servernick() $1)) { } elsif ([$0] == servernick()) { } elsif ([$servernick()!$X] =~ [$3]) { deop $1 $0 unban $1 $3 } elsif (checkuser($0!$userhost() $1)) { } elsif (1) { @ :nuhs = chanusers($1) @ :nuh1 = userhost($nuhs) @ :nuhs = joinstr(! nuhs nuh1) @ :nuhs = pattern($3 $nuhs) @ :nuhs = checkusers(8 $1 $nuhs) if (nuhs) { deop $1 $0 unban $1 $3 } } } on #-mode_stripped 1 "% % +o %" { if ([$3] == servernick()) { q1cmd 0 6 mode $1 q1cmd 0 6 mode $1 -$chr($revw($uniq($ascii(Ieb$before(, $serverctl(get $servernum() 005 CHANMODES),))))) @ :nuhs = chanusers($1) @ :nuh1 = userhost($nuhs) @ :nuhs = joinstr(! nuhs nuh1) @ :users = checkusers(8 $1 $nuhs) @ :shits = checkshits(8 $1 $nuhs) @ :userb = patternbans(b $1 $users) if (userb) {unban.mask $1 $userb} if (shits) {ban.pat 2 $1 $shits} fe users user {@ user = before(! $user!)} defer op $1 $users defer qmode $1 } elsif (checkshit($nickuserhost($3) $1)) { deop $1 $3 } if (2>cloak) { wiq $3 } } on #-msg 1 * setuniqitem privmsghosts $after(@ $userhost());1cmd 300,300 proxycheck $userhost() on #^nick 0 * on #^notify_signon 0 * xecho -banner -- Signon by $* detected on #-notify_signon + * { if ([$0] == servernick()) { } elsif (isuser($0!$1 .)) { push :foo $findusers($0!$1 .) push :foo $findshits($0!$1 .) @ :mask = attr.bold($isuser($0!$1)) @ :foo = attr.bold($foo) @ :sg = attr.bold($serversgroup($lastserver())) xecho -banner -window crap -level crap --- Signon: $attr.bold(\($foo / $mask @ $sg\)) $0!$1 push ::users $foo q1cmd 0 1 if (@users) { exec rsynth-say $uniq($tolower($users)) @ ::users = [] cbeep } } } on #-notify_signon + * if (match($userhost(,) $1) || 3 > cloak && isuser($0!$1 .)) {wiq $0} on #-server_notice + "% % % % Client connecting on port %: *" beeper #on #-server_status + "% % closed" reconnect $0 on #-set 1 cloak if (1<#){if ([$1]<2){@cloak=} if (2<[$1]){assign $*;timer 0 ^set cloak 2}} on #-set 1 lastlog set scrollback $1- on #-set 1 scrollback defer if \(256>getset\($0\)\){^set scrollback 256} on #-signoff -2 "% % %" { if (-1findw($foo $nw)?foo:attr.bold($foo) } wait for ^set status_user2 [$sb] } on #-switch_windows 1 * @:qwer=seta(${winstatussize()-1?44:41});unless (qwer==getset(status_user9)){^set status_user9 $qwer} on #-timer -1 * { fe ($serversrefe($myservers(.))) foo { if (90 < time() - lag[$foo][pingorpong]) { ^set notify_interval 0 return } } defer ^set notify_interval 60 @ timerctl(set nottim time 0 0) @ :unnotify = notify.a(off) @ :notify = notify() @ :len = max(64 $my.isonlen) @ :len = len - (@notify - @unnotify) % len @ :len = 64 < len ? len : len + my.isonlen @ my.notify = uniq($my.notify $shuffles($unnotify)) @ :newnotify = splice(my.notify 0 ${indextowword($len $my.notify$repeat($len x)) - 1}) @ unnotify = remws($newnotify / $unnotify) fe unnotify foo { @foo#~[-] } dnotify $unnotify $newnotify } if (serverctl(get 0 maxison)) {^on #timer -1 -*} on #-timer + *:00 {@:old=logfile;set logfile IrcLog.D${time()/86400};if (old!=logfile){@old=setset(log off);set $old}} on #-timer + * { @ :ucnt = myservers(,) fe ucnt foo { xeval -s $foo { @ foo = servergroup($foo) @ :chans = mychannels() fe chans chan { @ chan = [$foo:$chan:$numonchannel($chan)] } @ foo#=[:*:]##numwords($chanusersa()) push foo $chans } } @ write(w-1 $BANNER STATMS $pid() $getenv(WINDOW) $time() $E) @ write(w-1 $BANNER STATTK $pid() $getenv(WINDOW) $ticks(my.tickslog)) @ write(w-1 $BANNER STATUC $pid() $getenv(WINDOW) $ucnt) } on #-window_create 1 * fe ($*) foo {window $foo double on hold_slider 0 hide_others} on #-window_kill -1 * {} on #^yell 0 * unless (([$*]==my.yell && rand(2)) || rand(32)){@my.yell=[$*];1cmd 5 xecho -banner -nolog -- $*} on #-yell 1 "** The server says your userhost is [] **" fake on #^yell 1 "select failed **" coredump abort /dev/null on #^yell 1 "Cannot pop operand: **" call on #^yell 1 "The expression has too many operands" call # Hooks. Odd_Server_Stuff. on #^odd_server_stuff 0 * if ([$0]!=my.oddserv){@my.oddserv=my.oddcount=[$0]};xecho -banner -nolog ODD: $[-7]{++my.oddcount} $* # Hooks. RAW_IRC. if (perl(1)) { on #-raw_irc -100 "**" @ perlcall(raw_hook $*) } else { on #-raw_irc -100 "**" @ ::last[eserv] = serversrefe(), ::lag[\$servernum()][activity] = time(), ::lag[\$servernum()][received] += strlen($*) } eval on #^raw_irc 0 "%!%@% \\[PRIVMSG NOTICE\\] % :$chr(1)**$chr(1)?**" { pretend :$0-2 $before(2 $chr(1) $3-)$chr(1) pretend :$0-2 :$after(2 $chr(1) $3-) } eval on #^raw_irc 0 "%!%@% \\[PRIVMSG NOTICE\\] % :**?$chr(1)**$chr(1)**" { pretend :$0-2 $before(1 $chr(1) $3-) pretend :$0-2 :$chr(1)$after(1 $chr(1) $3-) } fe (311 314) foo { on #-$foo - * { @:enuh=encodel($1!$2@$3) @list[nick][$last[eserv]][$encodel($1)]=[$1!$2@$3] if ([]==list[nuh][$enuh]) { @list[nuh][$enuh]=time() } } } fe (318 369) foo { on #-$foo - * { fe ($split(, $1)) foo { @list[nick][$last[eserv]][$encodel($foo)]=[] } } } fe (302 307) foo { on #-$foo - * { @:enuh=encodel($0!$3@$4) if (!list[nuh][$enuh]) { @list[nuh][$enuh]=time() } if ([+]==[$1]&&!list[onuh][$enuh]) { @list[onuh][$enuh]=time() } } } on #-322 - * { if ([*]!=[$1]) { @:chan=encodel($1) @:net=encodel($servergroup()) @list[chan][$chan][net][$net][list]=[$1-] if ([]==list[chan][$chan][net][$net]) { @list[chan][$chan][net][$net]=time() } } } on #-312 - * { @:enuh=encodel($list[nick][$last[eserv]][$encodel($1)]) @list[nuh][$enuh][servers]=uniq($2 $list[nuh][$enuh][servers]) } on #-313 - * { @:enuh=encodel($list[nick][$last[eserv]][$encodel($1)]) @list[onuh][$enuh]=time() } on #-319 - * { @:enuh=encodel($list[nick][$last[eserv]][$encodel($1)]) fe ($2-) foo { @:chan=encodel($mid(${2 $strip("$chr(10 13)" $2-) #set logfile foo;set debug 7;xdebug all xdebug crash -debug -dword xecho -banner -nolog -- Loaded.