#by wiebe @ QuakeNet



#help unixtime pub
bind pubm fvlomn|fvlomn "% ${botnet-nick} help unixtime" c_unixtime:help:pub

proc c_unixtime:help:pub { nick uhost handle chan text } {
  lappend output "Usage: unixtime <unixtime>|<date>"
  lappend output "Converts the given unixtime to a date, or the given date to unixtime."
  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  putloglev c $chan "[lindex [split $text] 1]: $nick $uhost $handle $chan [join [lrange [split $text] 2 end]]"
}



#help unixtime msg
bind msgm fvlomn|fvlomn "help unixtime" c_unixtime:help:msg

proc c_unixtime:help:msg { nick uhost handle text } {
  lappend output "Usage: unixtime <unixtime>|<date>"
  lappend output "Converts the given unixtime to a date, or the given date to unixtime."
  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  putcmdlog "($nick!$uhost) !$handle! $text"
}



#unixtime pub
bind pubm fvlomn|fvlomn "% ${botnet-nick} unixtime" c_unixtime:pub
bind pubm fvlomn|fvlomn "% ${botnet-nick} unixtime *" c_unixtime:pub

proc c_unixtime:pub { nick uhost handle chan text } {
  set timestamp [join [lrange [split $text] 2 end]]
  set output ""
  if { [string equal $timestamp ""] } {
    lappend output "Usage: unixtime <unixtime>|<date>"
  } elseif { [string is digit $timestamp] } {
    if { $timestamp > [unixtime] } {
      puthelp "PRIVMSG $chan :Unixtime $timestamp is: [ctime $timestamp]     (time to: [c_unixtime:ts $timestamp])"
    } else {
      puthelp "PRIVMSG $chan :Unixtime $timestamp is: [ctime $timestamp]     (time since: [c_unixtime:ts $timestamp])"
    }
  } elseif { [catch {set unixtime [clock scan $timestamp]} error] } {
    lappend output "Error converting $timestamp\017 to unixtime. Format yyyy-mm-dd hh:nn:ss, not all parts are required."
  } else {
    puthelp "PRIVMSG $chan :Unixtime $timestamp is: $unixtime"
  }
  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  putloglev c $chan "[lindex [split $text] 1]: $nick $uhost $handle $chan [join [lrange [split $text] 2 end]]"
}




#unixtime msg
bind msg fvlomn|fvlomn unixtime c_unixtime:msg

proc c_unixtime:msg { nick uhost handle text } {
  set timestamp $text
  if { [string equal $timestamp ""] } {
    lappend output "Usage: unixtime <unixtime>|<date>"
  } elseif { [string is digit $timestamp] } {
    if { $timestamp > [unixtime] } {
      lappend output "Unixtime $timestamp is: [ctime $timestamp]     (time to: [c_unixtime:ts $timestamp])"
    } else {
      lappend output "Unixtime $timestamp is: [ctime $timestamp]     (time since: [c_unixtime:ts $timestamp])"
    }
  } elseif { [catch {set unixtime [clock scan $timestamp]} error] } {
    lappend output "Error converting $timestamp\017 to unixtime. Format yyyy-mm-dd hh:nn:ss, not all parts are required."
  } else {
    lappend output "Unixtime $timestamp is: $unixtime"
  }
  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  return 1
}



#unixtime dcc
bind dcc fvlomn|fvlomn unixtime c_unixtime:dcc

proc c_unixtime:dcc { handle idx text } {
  set timestamp $text
  if { [string equal $timestamp ""] } {
    putidx $idx "Usage: unixtime <unixtime>|<date>"
  } elseif { [string is digit $timestamp] } {
    if { $timestamp > [unixtime] } {
      putidx $idx "Unixtime $timestamp is: [ctime $timestamp]     (time to: [c_unixtime:ts $timestamp])"
    } else {
      putidx $idx "Unixtime $timestamp is: [ctime $timestamp]     (time since: [c_unixtime:ts $timestamp])"
    }
  } elseif { [catch {set unixtime [clock scan $timestamp]} error] } {
    putidx $idx "Error converting $timestamp\017 to unixtime. Format yyyy-mm-dd hh:nn:ss, not all parts are required."
  } else {
    putidx $idx "Unixtime $timestamp is: $unixtime"
  }
  return 1
}



#give timestamp, returns duration since/to in Xy Xw Xd Xh Xm Xs format
proc c_unixtime:ts { ts } {
  if { ![string is digit $ts] } { return 0 }
  if { $ts > [unixtime] } {
    set ts [duration [expr $ts - [unixtime]]]
  } else {
    set ts [duration [expr [unixtime] - $ts]]
  }
  set ts [string map [list " seconds" "s" "search" "replace" "search" "replace"] $ts]
  set ts [string map [list " second" "s" "search" "replace" "search" "replace"] $ts]
  set ts [string map [list " minutes" "m" "search" "replace" "search" "replace"] $ts]
  set ts [string map [list " minute" "m" "search" "replace" "search" "replace"] $ts]
  set ts [string map [list " hours" "h" "search" "replace" "search" "replace"] $ts]
  set ts [string map [list " hour" "h" "search" "replace" "search" "replace"] $ts]
  set ts [string map [list " days" "d" "search" "replace" "search" "replace"] $ts]
  set ts [string map [list " day" "d" "search" "replace" "search" "replace"] $ts]
  set ts [string map [list " weeks" "w" "search" "replace" "search" "replace"] $ts]
  set ts [string map [list " week" "w" "search" "replace" "search" "replace"] $ts]
  set ts [string map [list " years" "y" "search" "replace" "search" "replace"] $ts]
  set ts [string map [list " year" "y" "search" "replace" "search" "replace"] $ts]
  return $ts
}

