# first stab at a BitchX look for jIRCii # lots of work needs to be done here yet, particuarly with the dcc related messages. # # Usage: /load BitchX.irc # # Updated: 09.27.04 # - fixed oversight of not properly timestamping certain events i.e. /whois replies # - fixed a problem causing statusbar to not turn blue for some people... # $nnn = "\c4*\c16o\c4*\c15"; $rrr = "\c14>\c15>\c16>"; # # Setup initial properties on load... # setProperty("ui.sbarlines", 2); setProperty("statusbar.color", "-16777114"); if (getProperty("statusbar.bgtype", 0) == 0) { setProperty("statusbar.bgtype", 1); # make the statusbar solid, if default type is set } setProperty("statusbar", -1); # force jIRCii to refresh statusbar settings right away on unload { setProperty("ui.sbarlines", 1); } # # a bunch of sets redefining each of jIRCii's built in echos... # set names beginning with XX_ apply only to this script. # set CHANNEL_MODE_IS { return "$nnn mode\c14/\c10 $+ $0 \c14[\c16 $+ $parms $+ \c14]\c15 by\c16 $source"; } set CHANNEL_TOPIC_IS { return "$nnn Topic \c14(\c10 $+ $0 $+ \c14):\c15 $parms"; } set CHANNEL_TOPIC_SETBY { return "$nnn Topic \c14(\c10 $+ $1 $+ \c14):\c15 set by\c10 $nick \c15at\c10 $seton"; } set CHANNEL_CREATED { return "$nnn Channel $1 was created at $created"; } set JOIN_SYNC { return "$nnn \c16BitchX\c15: Join to $1 was synched in $sync secs!!"; } set CHANNEL_MODE { return "$nnn mode\c14/\c10 $+ $target \c14[\c16 $+ $parms $+ \c14]\c15 by\c16 $source"; } set USER_MODE { return "$nnn Mode change \c14[\c16 $+ $parms $+ \c14]\c15 for user\c10 $target"; } set USER_QUIT { return "$nnn SignOff\c16 $nick \c14(\c15 $+ $parms $+ \c14)"; } set CHANNEL_PART { return "$nnn $nick \c14[\c15 $+ $address $+ \c14]\c15 has left $target \c14[\c14]"; } # part messages not supported yet set CHANNEL_JOIN { return "$nnn \c11 $+ $nick \c14[\c10 $+ $address $+ \c14]\c15 has joined $target"; } set SEND_TEXT { return "\C06<\c15 $+ $me $+ \c06>\C15 $parms"; } set SEND_TEXT_INACTIVE { return "\C06<\c15 $+ $me $+ \c14:\c15 $+ $target $+ \c06>\C15 $parms"; } set XX_MY_NICK { return "$rrr You\c14(\c15 $+ $0 $+ \c14)\c15 are now known as\c10 $1"; } set XX_USER_NICK { return "$nnn \c16 $+ $0 $+ \c15 is now known as\c10 $1"; } set XX_CH_TEXT_IN_HI { return "\C12<\c08 $+ $1 $+ \c14:\c15 $+ $0 $+ \c12>\C15 $2-"; } set XX_CH_TEXT_IN { return "\C12<\c15 $+ $1 $+ \c14:\c15 $+ $0 $+ \c12>\C15 $2-"; } set XX_CH_TEXT_HI { return "\C12<\c08 $+ $0 $+ \c12>\C15 $1-"; } set XX_CH_TEXT { return "\C12<\c15 $+ $0 $+ \c12>\C15 $1-"; } set CHANNEL_TOPIC_CHANGED { return "$nnn Topic \c14(\c10 $+ $0 $+ \c14):\c15 changed by\c10 $nick $+ \c14:\c15 $parms"; } set XX_CH_KICK_HI { return "$rrr You\c15 have been kicked off\c10 $0 \c15by\c10 $1 \c14(\c15 $+ $3- $+ \c14)"; } set XX_CH_KICK { return "$nnn $2 was kicked off $0 by\c10 $1 \c14(\c15 $+ $3- $+ \c14)"; } set ACTION { return "\c14*\c08 $nick $+ / $+ $0 \c15 $+ $1-"; } set PRIVACTION { return "\c14*\c16 $nick \c15 $+ $1-"; } set ACTION_INACTIVE { return "\c14*\c15 >\c10 $+ $nick $+ \c15 $0 $1-"; } set PRIVACTION { return "\c14*\c16 $nick \c15 $+ $1-"; } set SEND_ACTION { return "\c14*\c16 $me \c15 $+ $parms"; } set SEND_ACTION_INACTIVE { return "\c14*\c15 ->\c16 $me $+ \c15/\c10 $+ $0 \c15 $+ $parms"; } set SEND_ACTION_PRIV { return "\c14*\c15 ->\c16 $me $+ \c15/\c10 $+ $0 \c15 $+ $parms"; } set REPL_372 { return "$nnn $parms"; } set REPL_324 { return; } set FORMATTED_NAMES_HEADER { return "$nnn \c14[\c09Users\c14(\c3 $+ $2 $+ \c14:\c03 $+ $total $+ \c14)]"; } set FORMATTED_NAMES { return "\c14[" . formatNick($nick, $2, left("$[10]nick", 10)) . " \c14] "; } set TIMESTAMP { return "\c14 $time $+ \c15.\c16. "; } set XX_CTCP_REPLY { return "$nnn CTCP\c16 $1 \c15reply from $0 $+ \c14:\c15 $2-"; } set XX_SEND_DCC_SEND { return "\c14[\c05dcc\c14(\c04SEND\c14)]\c15 $0"; } set XX_SEND_DCC { return "\c14[\c05dcc\c14(\c04 $+ $1 $+ \c14)]\c15 $0"; } set XX_SEND_CTCP_PARMS { return "\c14[\c05ctcp\c14(\c04 $+ $0 $+ \c14)]\c15 $1"; } set XX_SEND_CTCP { return "\c14[\c05ctcp\c14(\c04 $+ $0 $+ \c14)]\c15 $1"; } set SEND_NOTICE { return "\c14[\c05notice\c14(\c04 $+ $0 $+ \c14)]\c15 $parms"; } set SEND_WALL { return "\c15[\c16BX-Wall\c15/\c16 $+ $0 $+ \c15] $1-"; } set SEND_WALLEX { return "\c15[\c16BX-Exclude\c15/\c16 $+ $0 $+ \c15] $1-"; } set XX_EMPTY_NOTICE { return "\c9[ $+ $0 $+ ]\c15 $1-"; } set XX_NOTICE { return "\c14-\c13 $+ $0 $+ \c14(\c6 $+ $1 $+ \c14)-\c15 $2-"; } set XX_PRIVMSG_WINDOW { return "\c14[\c13 $+ $0 $+ \c14(\c6msg\c14)\c14]\c15 $2-"; } set XX_PRIVMSG { return "\c14[\c13 $+ $0 $+ \c14(\c6 $+ $1 $+ \c14)]-\c15 $2-"; } set SEND_MSG { return "\c14[\c05msg\c14(\c04 $+ $0 $+ \c14)]\c15 $parms"; } set NOTIFY_SIGNON { return "$nnn \c09Signon\c15 by\c4 $nick $+ \c14!\c4 $+ $address \c15at $time"; } set NOTIFY_SIGNOFF { return "$nnn \c09Signoff\c15 by\c5 $nick $+ \c14!\c5 $+ $address \c15at $time"; } set REPL_366 { return; } # hide REPL_END_OF_NAMES set REPL_401 { return "\c16 $+ $1 $+ \c14:\c15 $2-"; } # no such nick/channel set REPL_406 { return "\c16 $+ $1 $+ \c14:\c15 $2-"; } # was no such nick/channel set XX_WHOIS_HEADER { return "\c9+--------\c3-\c9--\c3--\c9-\c3---------\c14-\c3--\c14--\c3-\c14------------ -- -"; } set XX_REPL_311_1 { return "\c9|\c16 $0 \c14(\c15 $+ $1 $+ @ $+ $2 $+ \c14)"; } set XX_REPL_314_1 { return "\c9|\c16 $0 \c15was \c14(\c15 $+ $1 $+ @ $+ $2 $+ \c14)"; } set XX_REPL_311_2 { return formatWhoisBX("\c09|", "ircname" , $3-); } set XX_REPL_314_2 { return formatWhoisBX("\c09|", "ircname" , $3-); } set REPL_319 { return formatWhoisBX("\c03|", "channels", $2-); } set REPL_312 { return formatWhoisBX("\c14|", "server" , "$2 \c14(\c15 $+ $3- $+ \c14)"); } set REPL_301 { return formatWhoisBX("\c14|", "away" , "$1 - $2-"); } set REPL_307 { return formatWhoisBX("\c14:", "register", "$1 $2-"); } set REPL_313 { return formatWhoisBX("\c14:", "ircop" , "$1 (is \c16NOT\c15 an irc warrior)"); } set REPL_317 { return formatWhoisBX("\c14:", "idle" , formatTime($2)); } set REPL_330 { return formatWhoisBX("\c14:", "register", "$1 $3- $2"); } set REPL_320 { return formatWhoisBX("\c14:", "info" , "$1 $2-"); } set REPL_338 { return formatWhoisBX("\c14:", "host" , "$2"); } set REPL_318 { return ""; } # hide END of /WHOIS set REPL_369 { return ""; } # hide END of /WHOWAS set REPL_403 { return formatNumeric($1, $2-); } # no such channel set REPL_442 { return formatNumeric($1, $2-); } # you're not on that channel set REPL_473 { return formatNumeric($1, $2-); } # banned set REPL_474 { return formatNumeric($1, $2-); } # invite set REPL_475 { return formatNumeric($1, $2-); } # key set REPL_433 { return formatNumeric($1, $2-); } # nick in use set REPL_352 { return "\c08 $+ $[12]1 \c16 $+ $[11]5 \c10 $+ $[2]6 \c15 $+ $2 $+ \c4@\c15 $+ $3 ( $+ $8- $+ ) "; } set XX_CTCP_REQUEST { return "$rrr \c9 $+ $0 \c14[\c3 $+ $1 $+ \c14]\c3 requested $3 from $2"; } set XX_CTCP_REQUEST_P { return "$rrr \c9 $+ $0 \c14[\c3 $+ $1 $+ \c14]\c3 requested $3 $4- from $2"; } set REPL_364 { return "\C15 $+ $[20]1 -> $[20]2 ( $+ $3 hops): $4-"; } set REPL_365 { return; } set REPL_321 { return "\c33\bC\bhannel \bU\bsers \bT\bopic"; } set REPL_322 { return "\c35\b $+ $[20]1 $+ \b\c33 $[-5]2 $3-"; } set REPL_323 { return; } set NUMERIC { return "$nnn $parms"; } set XX_SBAR_TIME { return "\c10[\c16 $+ $0 $+ \c10]"; } set XX_SBAR_MYNICK { return "\c10[\c15 $+ $0 \c10(\c15 $+ $mymode $+ \c10)]"; } set XX_SBAR_QUERY_CHAN { return " \c10[\c15 $+ $0 \c10(\c15" . getMode($0) . "\c10)]"; } set XX_SBAR_QUERY_OTHER { return " \c10[\c15Query: \c16 $+ $0 $+ \c10]"; } set XX_SBAR_QUERY_NONE { return ""; } set XX_SBAR_LAG { return " \c10[\c15Lag\c16 $[-2]lag $+ \c10]"; } set XX_SBAR_CHAN_INFO { return " \c10[\c15Ops\c10/\c16" . size(getOps($0)) . " \c15Non\c10/\c16" . size(getNormal($0)) . " \c15Voice\c10/\c16" . size(getVoiced($0)) . "\c10]"; } set XX_SBAR_NO_INFO { return " \c10[\c15Ops\c10/\c16. \c15Non\c10/\c16. \c15Voice\c10/\c16.\c10]"; } set XX_SBAR_DCC_STATUS { return "\c10[\c15 $+ $0 $+ \c10:\c15 $+ $pc $+ \c10]"; } set PROCESS_DATA { return "\c15[ $+ $pid $+ ] $parms"; } set OPEN_URL { return "$nnn Opening $0"; } set RESOLVED_LOCALINFO { return "$nnn Resolved local host to $0"; } set XX_RESOLVE_SUCCESS { return "$nnn Resolved $0 to $2 $+ [ $+ $1 $+ ]"; } set XX_RESOLVE_FAILED { return "$nnn Unable to resolve $0 $+ : host not found"; } set IDENT_REQUEST { return "$nnn \c4Ident\c15 request from $0"; } set SERVER_ERROR { return "$nnn Server error: $parms"; } set IRC_ATTEMPT_CONNECT { return "$nnn Attempting to connect to " . $0; } set IRC_DISCONNECT { return "$nnn Disconnected from " . getServerHost() . ": $parms"; } set IRC_CONNECT { return "$nnn Connected to " . getServerHost(); } set IRC_RECONNECT { return "$nnn Attempting to reconnect to " . getServerHost(); } set INVITE { return "$nnn \b $+ $nick $+ \b invites you to join\r:\r $1"; } set REPL_341 { return "$nnn $1 has been invited to\r:\r $2"; } set CHATMSG { return "\c14[\c9 $+ $0 $+ \c14(\c3dcc\c14)]\c15 $1-"; } set SEND_CHAT_ERROR { return "$nnn there is no open chat with $0"; } set SEND_CHAT { return "\c14[\c5dcc\c14(\c4 $+ $0 $+ \c14)]\c15 $1-"; } set CHAT_OPEN { return "$nnn \c4DCC\c15 CHAT with\c16 $nick \c15established"; } set CHAT_CLOSE { return "$nnn DCC Chat with\c16 $nick \c15lost\c14:\c15 $1-"; } set XX_RECEIVE_COMPLETE { return "$nnn Receive of $1 from $0 complete at $2"; } set SEND_COMPLETE { return "$nnn Send to $nick complete"; } set XX_RECEIVE_START { return "$nnn Receive of $1 from $0 has started"; } set SEND_START { return "$nnn Send to $nick has started"; } set RECEIVE_FAILED { return "$nnn Receive from $nick has failed: $1-"; } set SEND_FAILED { return "$nnn Send to $nick has failed: $1-"; } set RESUME_SUCCEEDED { return "$nnn Resume request to $nick successful"; } set RESUME_FAILED { return "$nnn Resume request to $nick \bfailed\b"; } set RESUME_REQUEST_ERROR { return "$nnn $nick has made a jacked up resume request"; } set RESUME_REQUEST { return "$nnn $nick has requested to resume the dcc transfer"; } set PRIVMSG { if (-iswindow $nick) { return parseSet("XX_PRIVMSG_WINDOW", $nick, "$address $parms"); } else { return parseSet("XX_PRIVMSG", $nick, "$address $parms"); } } set SEND_DCC { if ($1 eq "SEND") { return parseSet("XX_SEND_DCC_SEND", $0, formatBytes($3) . " " . getFileName($4-)); } return parseSet("XX_SEND_DCC", $0, uc($1)); } set SEND_CTCP { if ($1 eq "PING") { return parseSet("XX_SEND_CTCP", $0, "PING"); } else if ($2- eq "") { return parseSet("XX_SEND_CTCP", $0, $1); } else { return parseSet("XX_SEND_CTCP", $0, "$1 $2-"); } } set USER_NICK { if ($nick eq $me) { return parseSet("XX_MY_NICK", $nick, $1); } else { return parseSet("XX_USER_NICK", $nick, $1); } } set CHANNEL_TEXT_INACTIVE { if ($me isin $parms) { return parseSet("XX_CH_TEXT_IN_HI", $target, "$nick $parms"); } return parseSet("XX_CH_TEXT_IN", $target, "$nick $parms"); } set CHANNEL_TEXT { if ($me isin $parms) { return parseSet("XX_CH_TEXT_HI", $nick, $parms); } else { return parseSet("XX_CH_TEXT", $nick, $parms); } } set CHANNEL_KICK { if ($1 eq $me) { return parseSet("XX_CH_KICK_HI", $target, "$nick $1 $2-"); } else { return parseSet("XX_CH_KICK", $target, "$nick $1 $2-"); } } set CTCP_REPLY { $stuff = $2-; if ($pt ne "") { $stuff = $pt; } return parseSet("XX_CTCP_REPLY", $nick, "$1 $stuff"); } set NICKLIST_FORMAT { return formatNick($nick, $channel, $nick); } sub formatNick { if ($1 isop $2) { return "\c11@\c12 $+ $3"; } else if ($1 isvoice $2) { return "\C13+\c12 $+ $3"; } else if ($1 ishalfop $2) { return "\C09%\C12 $+ $3"; } return "\C12 $3"; } set NOTICE { if ($nick eq "") { return parseSet("XX_EMPTY_NOTICE", getServerNetwork(), "$parms"); } return parseSet("XX_NOTICE", $nick, "$address $parms"); } # # Altering the whois reply a little... # set REPL_311 { return; } set REPL_314 { return; } on REPL_314 { if (-isSetT "active.whois") { echo(timeStampCh(parseSet("XX_WHOIS_HEADER"))); echo(timeStampCh(parseSet("XX_REPL_314_1", $1, "$2 $3 $5-"))); echo(timeStampCh(parseSet("XX_REPL_314_2", $1, "$2 $3 $5-"))); } else { echoStatus(timeStampCh(parseSet("XX_WHOIS_HEADER"))); echoStatus(timeStampCh(parseSet("XX_REPL_314_1", $1, "$2 $3 $5-"))); echoStatus(timeStampCh(parseSet("XX_REPL_314_2", $1, "$2 $3 $5-"))); } } on REPL_311 { if (-isSetT "active.whois") { echo(timeStampCh(parseSet("XX_WHOIS_HEADER"))); echo(timeStampCh(parseSet("XX_REPL_311_1", $1, "$2 $3 $5-"))); echo(timeStampCh(parseSet("XX_REPL_311_2", $1, "$2 $3 $5-"))); } else { echoStatus(timeStampCh(parseSet("XX_WHOIS_HEADER"))); echoStatus(timeStampCh(parseSet("XX_REPL_311_1", $1, "$2 $3 $5-"))); echoStatus(timeStampCh(parseSet("XX_REPL_311_2", $1, "$2 $3 $5-"))); } } sub formatWhoisBX { local('$temp'); $temp = "$1 \c16" . charAt("$[9]2", 0) . "\c15" . substr("$[9]2", 1, strlen("$[9]2")); return "$temp $+ \c14:\c15 $3"; } # # formatted numerics # sub formatNumeric { if (charAt($1, 0) eq "#") { return "$nnn [ $+ $1 $+ ] $2"; } return "$nnn \c16 $+ $1 $+ \c15 $2"; } # # Formatted Server Output Type Stuff # # /who reply set REPL_315 { return; } # /mode #channel +b reply $_bancount = 0; set CHANNEL_BANLIST { local('@info'); @info = split('!', $3); $_bancount++; return "\c15 $+ $1 $2 set by: " . @info[0]; } set CHANNEL_BANLIST_END { if ($_bancount == 0) { return formatNumeric($1, "no bans set"); } $_bancount = 0; return; } # hide end of banlist reply... set CTCP_REQUEST { if ($2- eq "" || ($1 eq "PING" && -isnumber $2) ) { return parseSet("XX_CTCP_REQUEST", $nick, "$address $target $1"); } else { return parseSet("XX_CTCP_REQUEST_P", $nick, "$address $target $1 $2-"); } } set SBAR_LEFT { local('$ime $iset'); if ($me isop $query) { $ime = "\B@\B $+ $me"; } else if ($me ishalfop $query) { $ime = "\B%\B $+ $me"; } else if ($me isvoice $query) { $ime = "\B+\B $+ $me"; } else { $ime = "$me"; } if ($line == 0) { if ($me ison $query) { $iset = "XX_SBAR_QUERY_CHAN"; } else if ($query ne "") { $iset = "XX_SBAR_QUERY_OTHER"; } else { $iset = "XX_SBAR_QUERY_NONE"; } return parseSet("XX_SBAR_TIME", right("0 $+ $time", 7)) . parseSet("XX_SBAR_MYNICK", $ime) . parseSet($iset, $query); } else { if ($me ison $query) { $iset = "XX_SBAR_CHAN_INFO"; } else { $iset = "XX_SBAR_NO_INFO"; } return parseSet("XX_SBAR_LAG") . parseSet($iset, $query); } return; } set SBAR_RIGHT { if ($line > 0) { return; } if ($me ison $query) { setWindowPrompt($window, "[ $+ $query $+ ] "); } else if (getWindowState($window) eq "NORMAL" && !-isspecial $window) # make sure the window is open and not a oddball window { setWindowPrompt($window, "[0] "); } if (size(getActiveConnections()) > 0) { foreach $var (getActiveConnections()) { if (getConnectionType($var) eq "RECEIVE") { $pc = getDCCPercentage($var); if ($DCC_WATCH_TIMER eq "") { sub timertemp { refreshWindow(getActiveWindow()); } $DCC_WATCH_TIMER = addTimer(&timertemp, 2000); } return parseSet("XX_SBAR_DCC_STATUS", left(getDCCFileName($var), 25), $pc); } } } if ($DCC_WATCH_TIMER ne "") { stopTimer($DCC_WATCH_TIMER); $DCC_WATCH_TIMER = ""; } return; } # # DCC Chat Related # set DCC_REQUEST { if ($2 eq "SEND") { return "\c42$nnn DCC SEND request from $nick $+ \r:\r $3 (" . formatBytes($6) . ")"; } return "\c42$nnn DCC $2 request from $nick"; } # # /dcc command... don't want anyone feeling to left out :) # alias dcc { if ($1 ne "") { call("/ $+ $0-", "use-built-in-command-only"); return; } echo("\c3\bT\bype \c16|\c3 \bN\bick \c16|\c3 \bP\bercent \bC\bomplete \c16|\c3 \bK\b/s \c16|\c3 \bF\bile"); echo("\c15\r-----\r-\b-\b-\r---------\r-\b-\b-\r-----------------------\r-\b-\b-\r-----\r-\b-\b-\r-----------------------"); foreach $conn (getActiveConnections()) { $type = getConnectionType($conn); $nick = getDCCNickname($conn); $info = DCCInformation($conn); echo("$[8]type $+ $[11]nick $info"); } } set DCC_LIST_TYPE { $conn = getDCCConnection($this); return "\c08" . getConnectionType($conn); } set DCC_LIST_NICK { $conn = getDCCConnection($this); return "\c15" . getDCCNickname($conn); } sub DCCInformation { local('$info $conn'); $conn = $1; $type = getConnectionType($conn); if (!-isdccopen $conn) { return "Waiting..."; } if ($type eq "CHAT") { $info = "\c15Idle for\r:\r " . formatTime(getDCCIdleTime($conn) / 1000); } else { local('$a $b $c $d $bar'); $a = getDCCPercentage($conn); $b = getDCCFileName($conn); $c = formatBytes(getTransferRate($conn)) . "/s"; $d = formatTime2(getTimeRemaining($conn)); $bar = "\c5,5" . substr("##########", 0, $a / 10) . "\c14,14" . substr("::::::::::", 0, 10 - ($a / 10)) . "\o\c15"; $info = "\c15 $+ $bar $[-2]a $+ % $[8]d $[7]c $b"; } return $info; } set DCC_LIST_INFORMATION { return DCCInformation(getDCCConnection($this)); } set RECEIVE_COMPLETE { $dcc = getDCCConnection($this); $file = getDCCFileName($dcc); $rate = formatBytes(getTransferRate($dcc)) . "/s"; return parseSet("XX_RECEIVE_COMPLETE", $nick, "$file $rate"); } set RECEIVE_START { $dcc = getDCCConnection($this); $file = getDCCFileName($dcc); return parseSet("XX_RECEIVE_START", $nick, $file); } set RESOLVED_HOST { if ($2- ne "") { return parseSet("XX_RESOLVE_SUCCESS", $0, "$1 $2"); } else { return parseSet("XX_RESOLVE_FAILED", $0); } } sub timeStampCh { if (-isSetF "option.timestamp") { return parseSet("TIMESTAMP") . $1; } return $1; }