; ################################## ; #****** BCN CONNECTION ******# ; #****** by extremity ******# ;################################## on *:start:{ socklisten init | .server $iif($server,-m) localhost $sock(init).port | set %bcn.idx 1 | connect } alias connect { if (!%email) { set %email $$?="Enter email address:" } | if (!%pw) { set %pw $md5($$?="Enter password:") } if (%debug) { debug on } q.ini var %i %bcn.idx while (%i) { .sockopen buzzen. [ $+ [ %i ] ] $BuzzenIP | dec %i } } alias reconnect { sockclose buzzen.* | sockclose init | .timer 1 1 connect } ; ################################# ; #****** LOCAL SOCKET ******# ;################################# on *:socklisten:init:{ .sockaccept localhost | .sockclose $sockname } on *:sockread:localhost:{ if ($sockerr > 0) { return } var %ldata | sockread %ldata | tokenize 32 %ldata if ($1 == JOIN) { var %c $mr($2-) | hadd -m bcn %c %bcn.idx | hadd bcn last %c | if ($sock(buzzen. [ $+ [ %bcn.idx ] ])) { swrite JOIN %c } | else { .sockopen buzzen. [ $+ [ %bcn.idx ] ] $BuzzenIP } } elseif ($1 == KICK) { swrite $1-3 $iif($left($4-,1) == :,$right($4-,-1),$4-) } elseif ($1 == NICK) { if (!$sock(buzzen.*)) halt } elseif ($1 == USER) { noop } else { swrite $1- } } ; ################################# ; #****** BUZZEN SOCKET ******# ;################################# on *:sockclose:buzzen.*:{ if ($sock($sockname).to < 5) { echo -sat You were disconnected by the network immediately. (ie ZLINE, Too many connections, network issues) } else { .timer -o 1 2 .sockopen $sockname $BuzzenIP } } on *:sockopen:buzzen.*:{ if (%proxy) { echo -st Connecting to BCN via proxy:14 $BuzzenIP 0.. sockwrite -n $sockname CONNECT irc.buzzen.net:6667 HTTP/1.0 $+ $crlf $+ $crlf } else { echo -st Logging in to $+($sockname,:14) %email 0.. sockwrite -n $sockname $+(LOGINH %email %pw,$crlf,USER x x x $+(:,anon),$crlf,CLIENTMODE cd1) } checksock 0 $sockname } ;verifies bcn connection is in place alias checksock { if (!$sock($2).status) { echo -sat 5Login Failed (Buzzen socket $2 $+ ) after0 $1 5seconds. Disconnected. | halt } if ($1 >= 10) { .unset %BcnDc | return } .timer 1 1 checksock $calc($1 + 1) $2 } on *:sockread:buzzen.*:{ if ($sockerr > 0) { echo -st 4DISCONNECT $sockerr 4- Your local connection dropped, reconnecting in 2 seconds.. | sockclose $sockname | .timer 1 2 .sockopen $sockname $BuzzenIP | return } var %fd | sockread %fd | if (!%fd) { halt } if (%debug) { var %i $gettok(%fd,2,32) | echo -i15 @sockread $+(,<<,14) %fd } %fdata = $regsubex(%fd, /\[(?:style\x20.*?|/style)\]/gi,$null) tokenize 32 %fdata if ($1 == HTTP/1.0 && $2 == 200) { echo -st Logging in to $+($sockname,:14) %email 0.. sockwrite -n $sockname $+(LOGINH %email %pw,$crlf,USER x x x $+(:,anon),$crlf,CLIENTMODE cd1) } elseif ($1 == PING) { sockwrite -n $sockname PONG $2- } elseif ($1 == ERROR) { echo -sat 5You have flooded out, reconnecting in 2 seconds.. | .timer 1 2 .sockopen $sockname $BuzzenIP } elseif ($2 == 001) { echo -st Connected $+($sockname,:14) $mid($4-,2) if ($3 != $me) { sockwrite -n localhost $+(:,$me) NICK $3 } if ($hget(bcn,last)) { swrite JOIN $v1 } .timerhb off | .timer 1 1 heartbeat } elseif ($2 == PRIVMSG) { if ($4 == :ACTION) { sockwrite -n localhost $1- } elseif ($5 == :TIME) { var %t $asctime(ddd mmm dd HH:nn:ss) GMT $+ [ $asctime(zz yyyy) ] | .timer 1 1 swrite NOTICE $3 $mn($1) $+($chr(2),TIME,$chr(2),%t) | wecho $3 TIME $mn($1) checked your time. } elseif ($4 == :VERSION) { .timer 1 1 swrite NOTICE $3 $mn($1) $+($chr(2),VERSION,$chr(2),Ajax IRCwx Client 1.0 beta 1,$chr(44),$chr(32),buzz1 interface) | wecho $3 VERSION $mn($1) checked your version. } elseif ($left($4,2) == :) { wecho $3 $mid($4,3) $mn($1) sent out a request. [blocked] } elseif ($left($5,2) == :) { wecho $3 $mid($5,3) $mn($1) sent you a request. [blocked] } else { sockwrite -n localhost $1- } } elseif ($2 = JOIN) { if ($chr(37) isin $3) { sockwrite -n localhost $1- } | else { sockwrite -n localhost $1 $2 $4- } } elseif ($2 == NOTICE) { if ($3 == AUTH || $5 == :PINGME) { noop } elseif ($3 == FlashIrcServer.1) { if (%snotice) { halt } | set -u2 %snotice 1 | gecho $+(12,$mn($1),11:0) $4- } elseif ($3 == $4) { echo $3 Chat Room Broadcast from $mn($1) $+ : $5- } elseif ($left($4,1) == :) { sockwrite -n localhost $1- } elseif ($left($5-,2) == :) && ($right($5-,1) == ) sockwrite -n localhost $1-3 $5- else { var %f $gettok($5,1,32) if ($left(%f,7) == :TIME) sockwrite -n localhost $1-3 :TIME $+($right($5-,-7),) elseif ($left(%f,7) == :VERSION) sockwrite -n localhost $1-3 :VERSION $+($right($5-,-7),) else { sockwrite -n localhost $1-3 $5- } } } elseif ($2 == 353) { if ($chr(44) isin $6) { var %a 6, %b while (%a <= $0) { var %i $right($remove($gettok($gettok($1-,%a,32),1,44),:),1), %j $remove($gettok($gettok($1-,%a,32),2,44),:) if ($left(%j,1) isin .@%') { var %j $+($v1,$iif(%i == V,+),$mid(%j,2)) } elseif (%i == V) { var %j $+(+,%j) } var %b $addtok(%b, %j ,32) inc %a } sockwrite -n localhost :FlashIrcServer.1 353 $me = $5 : $+ %b } } elseif ($2 == 403) { if ($chr(37) isin $4) { CREATE $mr($4) } } elseif ($2 == 433) { if ($4 == $3) { halt } echo -st Your nickname is in use.. If you are in < 12 rooms, it will change your nick. Otherwise it will wait for name to drop. if (%bcn.idx == 1) { var %n $4 | sockwrite -n buzzen.* NICK %n | sockwrite -n localhost $+(:,$me) NICK %n } } elseif ($2 == 999) { if ($sock($sockname).to < 5) { echo -sat 4Cannot open socket. Reached maximum socket limit. | halt } echo -st Opening another buzzen socket.. var %c $hget(bcn,last) | if $hget(bcn,%c) { hdel bcn %c } inc %bcn.idx | hadd -m bcn %c %bcn.idx .sockopen buzzen. [ $+ [ %bcn.idx ] ] $BuzzenIP } elseif ($2 == INVITE) { gecho $mn($1) has invited you to join $mid($$4,2) } elseif ($2 == WHISPER) { sockwrite -n localhost $1 PRIVMSG $4 $+(:7,$comchan($mn($1),1),15) $mid($5-,2) } elseif ($2 == KILL) { var %nick $mn($1), %knick $3, %i 1 echo -st $+(4SERVERKILL) %knick was killed by %nick while (%i <= $comchan(%knick,0)) { wecho $comchan(%knick,%i) $+(4SERVERKILL) %knick was killed by %nick inc %i } } else { sockwrite -n localhost $1- } } alias CloseUnusedChannelSocket { if ($me ison $1) { halt } var %c $hget(bcn,$$1), %i $hget(bcn,0).item | hdel bcn $1 unset $1 $1 while (%i) { if ($hget(bcn,%i).data == %c) { return } | dec %i } echo -sat Closing socket %c for $1 sockclose buzzen. $+ %c } on me:*:JOIN:#:{ set # # | who # | hdel bcn last } on me:*:PART:#:{ .timer 1 2 CloseUnusedChannelSocket # } on *:KICK:#: { if ($knick == $me) { join # } } ; ################################# ; #****** QUEUE ******# ;################################# alias swrite { hinc q total var %n $hget(q,total) hadd q %n $1- if (%n == 1) { hadd q idx 1 | .timer -m 1 $iif($hget(q,run),800,1) q.run | hadd -u1 q run 1 } elseif ($hget(q, time)) { if ($calc($ticks - $hget(q, time)) > 2500) { hadd q total 0 | hadd q idx 1 | .timer -m 1 1 q.run } } } alias q.run { hadd q time $ticks :start var %i $hget(q, idx), %m $hget(q, %i), %s $hget(bcn,$matchtok(%m,$+($chr(37),$chr(35)),1,32)) sockwrite -tn buzzen. [ $+ [ $iif(%s,%s,1) ] ] %m if (%debug) { echo -i15 @sockread $+(,>>,) %m } hinc q idx if (%i >= $hget(q, total)) { hadd q total 0 | hadd q idx 0 | hdel q time | halt } if (11 // %i) { .timer -m 1 1200 q.run | return } | else { goto start } } alias q.ini { if ($hget(q)) { hfree q } | hmake q 15 } ; ################################# ; #****** RAWS ******# ;################################# raw *:*: { var %e $gettok($rawmsg, 2, 32) if (%e isin 000 001 002 003 004 005 251 265 422 353 329 324 315 366 433 443 803 804 805 819 914 924 927 || %e !isnum ) { halt } elseif ($numeric == 352) { if (%ScriptCheck == $6) { lecho $2 SCRIPT $6 has a $iif($9- == anon,WebChat tag.,Script tag: $9-) | unset %scrCheck } } elseif ($numeric == 442) { swrite join $2 } else { echo -i12sat $+(14,[,$asctime(H:nn),]) $+(0-5RAW $numeric,0-) $+(14,$2-) } } ; ################################# ; #****** ALIASES ******# ;################################# alias -l BuzzenIP { return $iif(%proxy && %proxyport, %proxy %proxyport, irc.buzzen.net 6667) } alias heartbeat { var %i $iif($1 > 0, $1, $chan(0)), %c $chan(%i), %d $iif(%i > 1, 2, 40) if (%i) { if ($sock(buzzen.1).status) { if ($rlevel($me,%c) > 1) { ACCESS %c add $iif($v1 == 3,owner,host) $address($me,1) 0 : $+ $scripname Auto Access } swrite NOTICE %c $me PINGME $ticks | dec %i } | else { inc %BcnDc | echo -st 4Disconnected form BCN. Attempting reconnect try0 %BcnDc $+ 4. .timer -om 1 1 reconnect var %d $iif(%BcnDc < 3, 2, 60) } } .timerhb -o 1 %d heartbeat %i } alias hop { var %c $iif($1,$mr($1),$active) | PART $+(%c,$crlf,JOIN) %c } alias pass { var %p $iif($1, $1, $$?="Enter host/owner password:") | OWNERKEY $active $+(%p,$crlf,HOSTKEY) $active %p } alias debug { if ($1 == on) { if (!$window(@sockread)) { window -k0 @sockread } | set %debug on } | elseif ($1 == off) { unset %debug | window -c @sockread } } alias mr { var %c $+($chr(37),$chr(35),$replace($remove($$1-,$chr(58),$chr(37),$chr(35)),$chr(32),\b)) | return %c } alias mn { var %n $remove($gettok($$1,1,33),:) | return %n } alias rlevel { var %l $left($nick($2,$1).pnick,1) if (%l == ') { return 4 } | elseif (%l == .) { return 3 } | elseif (%l == @) { return 2 } | elseif (%l == $chr(37)) { return 1 } | else { return 0 } } alias scripName { return ҒɾᶏᴄƗᴜɾϵ Raw } ;FINDREGULARS [channel] returns list of all non supers and owners, tokened by 44 alias findregulars { var %t $nick($$1,0,a,q'), %r | while (%t > 0) { %r = $addtok(%r, $nick($$1,%t,a,q'), 44) | dec %t } | return %r } ;FINDALLUSERS [channel] returns list of all non supers, tokened by 44 alias findallusers { var %t $nick($$1,0,a,'), %r | while (%t > 0) { if ($nick($$1,%t,a,') != $me) { %r = $addtok(%r, $v1, 44) } | dec %t } | return %r } ;ALL.USERS.EXCEPT [channel level] returns list of all users under access, tokened by 44 alias all.users.except { var %c $$1, %a $left($$2, 1), %b $right($$2, 1) var %i $iif(%a == +, a, %b) var %e $iif(%a == +, $+(',%b), ') var %t $nick(%c,0,%i,%e), %r while (%t > 0) { if ($nick(%c,%t,%i,%e) != $me) { %r = $addtok(%r, $v1, 44) } | dec %t } return %r } ;MKICK [channel nicklist] - delay kicks all users in NICKS list alias mkick { var %c $$1, %n $$2-, %d 1 KICK %c $gettok(%n, 1, 44) var %n $remtok(%n, $gettok(%n, 1, 44), 1, 44) if ($numtok(%n, 44)) { .timer -m 1 %d mkick %c %n } } ;MBAN [channel nicklist] - delay kicks/bans all users in NICKS list alias mban { var %c $$1, %n $$2-, %d 1 ban %c $gettok(%n, 1, 44) 0 var %n $remtok(%n, $gettok(%n, 1, 44), 1, 44) if ($numtok(%n, 44)) { .timer -m 1 %d mban %c %n } } ;MMODE [channel mode nicklist] - delay modes all users in NICKS list alias mmode { var %c $$1, %m $$2, %n $$3- if ($numtok(%n, 44) > 5) { mode %c $+($left(%m,1),$str($right(%m,1),5)) $replace($gettok(%n,1-5,44),$chr(44),$chr(32)) .timer -m 1 1 mmode %c %m $deltok(%n,1-5,44) | return } mode %c $+($left(%m,1),$str($right(%m,1),$v1)) $replace($gettok(%n,$+(1-,$v1),44),$chr(44),$chr(32)) } ;BAN [chan nick time reason] - removes user form access and kicks alias ban { var %c $$1, %n $$2, %t $$3, %r $iif($4,$4-,$scripName ban) access %c add deny $gettok($gettok($ial(%n,1),2,33),1,64) %t $+(:,%r) kick %c %n %r } ; ################################# ; #****** MESSAGE THEMES ******# ;################################# ;window echo - chan event nick text alias wecho { var %c $$1, %e $$2, %n $$3, %t $4- echo -i12 %c $+(14,[,$asctime(H:nn),]) $+(14,$utfencode(),7,%e,14,$utfencode()) $+(12,%n,14) %t } ;local echo - local event such as access, etc alias lecho { var %c $$1, %e $$2, %t $3- echo -i12 %c $+(14,[,$asctime(H:nn),]) $+(0-8,%e,0-) $+(14,%t) } ;global echo - broadcast - invites , broadcast alias gecho { var %i $chan(0) while (%i) { echo $chan(%i) $+(14,[,$asctime(H:nn),]) 15-= 11GLOBAL BROADCAST 15=-0 $1- dec %i } } ; ################################# ; #****** MENUS ******# ;################################# menu nicklist { $1 .Whisper: query $$1 .Notice: { NOTICE # $$1 $$?="Enter notice message:" } .- .Check Time: { swrite PRIVMSG # $$1 :TIME } .Script Check: { set -u10 %ScriptCheck $$1 | who # } - $iif($$1 isowner #,$style(1)) $chr(32) Owner: { mode # $iif($1 isowner #,-hoq,+q) $$1 $$1 $$1 } $iif($$1 isop #,$iif($$1 !isowner #,$style(1))) $chr(32) Host: { mode # $iif($1 isop #,-ho,+o) $$1 $$1 } $iif($$1 ishop #,$style(1)) $chr(32) Halfop: { mode # $iif($1 ishop #,-h,+h) $$1 } $iif($$1 isvo #,$style(1)) $chr(32) Voice: { mode # $iif($1 isvo #,-v,+v) $$1 } $chr(32) Participant: { mode # -vhoq $$1 $$1 $$1 $$1 } - $iif($me !isop #,$style(2)) Kick: { kick # $$1 } $iif($me !isop #,$style(2)) Ban: { ban # $$1 0 } - $iif($numtok($snicks,44) > 1,Selected Users) .+q Owner: { mmode # +q $$snicks } .-q Owner: { mmode # -q $$snicks } .- .+o Host: { mmode # +o $$snicks } .-o Host: { mmode # -o $$snicks } .- .+v Voice: { mmode # +v $$snicks } .-v Voice: { mmode # -v $$snicks } .- .Kick:{ mkick # $$snicks } .Ban: { mban # $$snicks } $iif($me !isop #,$style(2)) Mass Commands .+q Owner: { mmode # +q $all.users.except(#, +q) } .-q Owner: { mmode # -q $all.users.except(#, -q) } .- .+o Host: { mmode # +o $all.users.except(#, +o) } .-o Host: { mmode # -o $all.users.except(#, -o) } .- .+v Voice: { mmode # +v $all.users.except(#, +v) } .-v Voice: { mmode # -v $all.users.except(#, -v) } .- .Kick: { mkick # $findregulars(#) } .Ban: { mban # $findregulars(#) } - } menu channel { Clear: clear $active # .Copy Name: { lecho # CLIPBOARD # | clipboard # } .Copy URL: { lecho # CLIPBOARD http://www.buzzen.net/chatui.aspx?rm=%25%23 $+ $mid(#,3-) | clipboard http://www.buzzen.net/chatui.aspx?rm=%25%23 $+ $mid(#,3-) } .- .Invite: { var %i $$?="Enter User to Invite to # " | INVITE %i # } .Broadcast: { notice # # $$?="Enter your broadcast message:" } } menu status { Clear: clear $active Disconnect: sockclose buzzen.* Reconnect: reconnect - Join Channel: { var %c $$?="Enter Channel Name:" | JOIN $mr(%c) } - $iif(%debug,$style(2)) Debug Start:debug on $iif(!%debug,$style(2)) Debug End:debug off } menu @sockread { Clear: clear - $iif(%debug,$style(2)) Debug Start: debug on $iif(!%debug,$style(2)) Debug End: debug off } menu query { Clear: clear }