#by wiebe @ QuakeNet
#gseen module required
#load this _after_ gseen module



set c_seen(xhost) "users.quakenet.org"




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

proc c_seen:help:pub { nick uhost handle chan text } {
  if { ![string match *gseen* [modules]] } { return 0 }
  lappend output "Usage: seen <nick>|<mask>"
  lappend output "Returns seen info for the given nick or mask. #account can be used for *!*@<account>.users.quakenet.org"
  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 seen msg
bind msgm fvlomn|fvlomn "help seen" c_seen:help:msg

proc c_seen:help:msg { nick uhost handle text } {
  if { ![string match *gseen* [modules]] } { return 0 }
  lappend output "Usage: seen <nick>|<mask>"
  lappend output "Returns seen info for the given nick or mask. #account can be used for *!*@<account>.users.quakenet.org"
  if { [catch {set x [cnotice $nick $output]} error] || !$x } {
    foreach t $output { puthelp "NOTICE $nick :$t" }
  }
  putcmdlog "($nick!$uhost) !$handle! $text"
}



#seen pub
bind pubm fvlomn|fvlomn "% ${botnet-nick} seen" c_seen:pub
bind pubm fvlomn|fvlomn "% ${botnet-nick} seen *" c_seen:pub

proc c_seen:pub { nick uhost handle chan text } {
  if { ![string match *gseen* [modules]] } { return 0 }
  set target [lindex [split $text] 2]
  if { ![string equal $target ""] } {
    *pub:!seen $nick $uhost $handle $chan [c_seen:mask $target]
  } else {
    lappend output "Usage: seen <nick>|<mask>"
    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]]"
}



#seen msg
bind msg fvlomn|fvlomn seen c_seen:msg

proc c_seen:msg { nick uhost handle text } {
  if { ![string match *gseen* [modules]] } { return 0 }
  if { ![string equal $text ""] } {
    set target [lindex [split $text] 0]
    *msg:seen $nick $uhost $handle [c_seen:mask $target]
  } else {
    lappend output "Usage: seen <nick>|<mask>"
    if { [catch {set x [cnotice $nick $output]} error] || !$x } {
      foreach t $output { puthelp "NOTICE $nick :$t" }
    }
  }
  return 1
}



proc c_seen:mask { mask } {

#transform to correct masks
#user@host
  if { [string match ?*@?* $mask] && ![string match ?*!?*@?* $mask] } {
    return *!$mask

#host
  } elseif { [string match *.* $mask] && ![string match ?*!?*@?* $mask] } {
    return *!*@$mask

#nick!user
  } elseif { [string match ?*!?* $mask] && ![string match ?*!?*@?* $mask] } {
    return $mask@*

# #account
  } elseif { [string match \#?* $mask] && ![string match ?*!?*@?* $mask] } {
    return *!*@[string range $mask 1 end].$::c_seen(xhost)

#nick
  } else {
    return $mask
  }
}

