#####################################################################################
## logger.bx by powuh, Wed Dec  4 20:54:36 EST 2002
##
## This is a logger script for BitchX and Epic.  It is fully customizable, so you
## can log what you want to, where you want to!  I wrote this after finding many
## flaws in bxlog.bx by dARTh in both log handling, and code syntax.  Hopefully
## my logger.bx will be a better replacement.
##
## Any comments, suggestions, etc can be directed to powuh on EFNet's #BitchX
#####################################################################################

@ log.version = [1.0]
@ log.config.file = [~/.bxlogger.cfg]

if (fexist($log.config.file) == -1) {
   xecho -b Config file, $log.config.file, not found... Using default values.  Type /logconf to configure!
   @ logdir = [~/.BitchX/logs];@ logdate = [%m-%d-%y/%H:%M];@ logdir.channels = [$logdir/channels]
   @ logdir.messages = [$logdir/messages];@ logdir.notices = [$logdir/notices];@ logdir.ctcp = [$logdir/ctcp]
   @ logdir.dcc = [$logdir/dcc];@ logpublic = 1;@ logprivate = 1;@ lognotices = 1;@ logdccs = 1;@ logctcps = 1
   }{load $log.config.file}

alias _logger {
   if (logenable) {
      if (log.debug) echo _logger $0 > $1-
      if (fexist($logdir) == -1) {${mkdir($logdir)?[eval xecho -b mkdir failed $logdir]:[]}}
      if (logsepdirs && fexist($logdir.channels) == -1) {${mkdir($logdir.channels)?[eval xecho -b mkdir failed $logdir.channels]:[]}}
      if (logsepdirs && fexist($logdir.messages) == -1) {${mkdir($logdir.messages)?[eval xecho -b mkdir failed $logdir.messages]:[]}}
      if (logsepdirs && fexist($logdir.notices) == -1) {${mkdir($logdir.notices)?[eval xecho -b mkdir failed $logdir.notices]:[]}}
      if (logsepdirs && fexist($logdir.ctcp) == -1) {${mkdir($logdir.ctcp)?[eval xecho -b mkdir failed $logdir.ctcp]:[]}}
      if (logsepdirs && fexist($logdir.dcc) == -1) {${mkdir($logdir.dcc)?[eval xecho -b mkdir failed $logdir.ctcp]:[]}}
      @ :logfh = open($0 W)
      @ write($logfh [$strftime($logdate)] $stripc($stripansicodes($strip( $1-))))
      @ close($logfh)
   }
}

alias logconf {
   if ([$0]) switch ($0) {
      (a)  {@ logenable = ([$1]==[yes])?1:0}
      (b)  {@ logpublic = ([$1]==[yes])?1:0}
      (c)  {@ logmessages = ([$1]==[yes])?1:0}
      (d)  {@ lognotices = ([$1]==[yes])?1:0}
      (e)  {@ logdccs = ([$1]==[yes])?1:0}
      (f)  {@ logctcps = ([$1]==[yes])?1:0}
      (g)  {@ logdir = ([$1])?[$1]:[$logdir]}
      (h)  {@ logsepdirs = ([$1]==[yes])?1:0}
      (h1) {@ logdir.channels = ([$1])?[$1]:[$logdir.channels]}
      (h2) {@ logdir.messages = ([$1])?[$1]:[$logdir.messages]}
      (h3) {@ logdir.notices = ([$1])?[$1]:[$logdir.notices]}
      (h4) {@ logdir.dcc = ([$1])?[$1]:[$logdir.dcc]}
      (h5) {@ logdir.ctcp = ([$1])?[$1]:[$logdir.ctcp]}
      (i)  {@ logdate = ([$1])?[$1]:[$logdate]}
      (*)  {xecho -b Invalid switch to /logconf: $0;return}
   }

   xecho -b
   xecho -b Logger Configuration:
   xecho -b   [a] Enable Logging ..................... ${logenable?[yes]:[no]}
   if (logenable)  xecho -b   [b] Log channel activity ............... ${logpublic?[yes]:[no]}
   if (logenable)  xecho -b   [c] Log private messages ............... ${logmessages?[yes]:[no]}
   if (logenable)  xecho -b   [d] Log notices ........................ ${lognotices?[yes]:[no]}
   if (logenable)  xecho -b   [e] Log DCCs ........................... ${logdccs?[yes]:[no]}
   if (logenable)  xecho -b   [f] Log CTCPs .......................... ${logctcps?[yes]:[no]}
   if (logenable)  xecho -b   [g] Log Directory ...................... ${logdir?[$logdir/]:[Not Set]}
   if (logenable)  xecho -b   [h] Subdirectories by type ............. ${logsepdirs?[yes]:[no]}
   if (logsepdirs) xecho -b      [h1] Channel log directory .......... ${logdir.channels?[$logdir.channels/]:[Not Set]}
   if (logsepdirs) xecho -b      [h2] Message log directory .......... ${logdir.messages?[$logdir.messages/]:[Not Set]}
   if (logsepdirs) xecho -b      [h3] Notice log directory ........... ${logdir.notices?[$logdir.notices/]:[Not Set]}
   if (logsepdirs) xecho -b      [h4] DCC log directory .............. ${logdir.dcc?[$logdir.dcc/]:[Not Set]}
   if (logsepdirs) xecho -b      [h5] CTCP log directory ............. ${logdir.ctcp?[$logdir.ctcp/]:[Not Set]}
   if (logenable)  xecho -b   [i] Log Timestamp Format ............... $logdate \($strftime($logdate)\)
   xecho -b
   xecho -b Type /logconf <letter> <value> to configure. Then /logsave to save settings.
   xecho -b
}
 
alias logsave {
   @rename($log.config.file $log.config.file~)
   @ :savefile = open($log.config.file W T)
   @ write($savefile @ logenable = $logenable)
   @ write($savefile @ logpublic = $logpublic)
   @ write($savefile @ logmessages = $logmessages)
   @ write($savefile @ lognotices = $lognotices)
   @ write($savefile @ logdccs = $logdccs)
   @ write($savefile @ logctcps = $logctcps)
   @ write($savefile @ logdir = [$logdir])
   @ write($savefile @ logsepdirs = $logsepdirs)
   @ write($savefile @ logdir.channels = [$logdir.channels])
   @ write($savefile @ logdir.messages = [$logdir.messages])
   @ write($savefile @ logdir.notices = [$logdir.notices])
   @ write($savefile @ logdir.dcc = [$logdir.dcc])
   @ write($savefile @ logdir.ctcp = [$logdir.ctcp])
   @ write($savefile @ logdate = [$logdate])
   @ close($savefile)
   xecho -b Saved logger configuration to $log.config.file
}

alias loghelp {
   xecho -b
   xecho -b Logger version $log.version by powuh
   xecho -b Commands:
   xecho -b   /loghelp ............ What you are reading now
   xecho -b   /logconf ............ Logger Configuration
   xecho -b   /logsave ............ Save current configuration
   xecho -b
}

## Private message hooks
on #-msg 6192 * {if (logmessages) {_logger ${logsepdirs?logdir.messages:logdir}/$tolower($0.log) <$0> $1-}}
on #-send_msg 6192 * {if (logmessages) {_logger ${logsepdirs?logdir.messages:logdir}/$tolower($0.log) <$N> $1-}}

## Notice hooks
on #-notice 6192 * {if (lognotices) {_logger ${logsepdirs?logdir.notices:logdir}/$tolower($0.log) -$0\- $1-}}
on #-send_notice 6192 * {if (lognotices) {_logger ${logsepdirs?logdir.notices:logdir}/$tolower($0.log) =$0= $1-}}

## DCC hooks
on #-dcc_chat 6192 * {if (logdccs) {_logger ${logsepdirs?logdir.dcc:logdir}/$tolower($0.dcc.log) <$0> $1-}}
on #-send_dcc_chat 6192 * {if (logdccs) {_logger ${logsepdirs?logdir.dcc:logdir}/$tolower($0.dcc.log) <$N> $1-}}
on #-dcc_connect 6192 * {if (logdccs) {_logger ${logsepdirs?logdir.dcc:logdir}/$tolower($0.dcc.log) DCC Connect from $0 $1-}}
on #-dcc_error 6192 * {if (logdccs) {_logger ${logsepdirs?logdir.dcc:logdir}/$tolower($0.dcc.log) DCC Error from $0 $1-}}
on #-dcc_lost 6192 * {if (logdccs) {_logger ${logsepdirs?logdir.dcc:logdir}/$tolower($0.dcc.log) DCC Lost from $0 $1-}}
on #-dcc_request 6192 * {if (logdccs) {_logger ${logsepdirs?logdir.dcc:logdir}/$tolower($0.dcc.log) DCC Request from $0 $1-}}

## Public channel hooks
on #-public 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($1.log) <$0> $2-}}
on #-public_other 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($1.log) <$0> $2-}}
on #-public_ar 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($1.log) <$0> $2-}}
on #-public_other_ar 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($1.log) <$0> $2-}}
on #-public_notice 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($1.log) $0\- $2-}}
on #-action 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($1.log) * $0 $2-}}
on #-send_public 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($0.log) <$N> $1-}}
on #-send_action 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($0.log) * $N $1-}}
on #-leave 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($1.log) *** Parted $0 \($2\)}}
on #-join 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($1.log) *** Joined $0 \($2\)}}
on #-kick 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($2.log) *** $0 was kicked by $1 \($3-\)}}
on #-topic 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($1.log) *** $0 changed topic to $2-}}
on #-channel_nick 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($0.log) *** $1 is now known as $2}}
on #-channel_signoff 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($0.log) *** $1 signoff\: $2-}}
on #-mode 6192 * {if (logpublic) {_logger ${logsepdirs?logdir.channels:logdir}/$tolower($1.log) *** $0 sets mode $2-}}

## CTCP hooks
on #-ctcp 6192 * {if (logctcps) {_logger ${logsepdirs?logdir.ctcp:logdir}/ctcp.log CTCP from $0\: $2-}}
on #-ctcp_reply 6192 * {if (logctcps) {_logger ${logsepdirs?logdir.ctcp:logdir}/ctcp.log CTCP $1 reply from $0\: $2-}}

eval xecho -b logger.bx version $log.version by powuh loaded. Type /loghelp for help.

# EOF
