####################################################
# by wiebe @ QuakeNet
#
# requires gseen module for eggdrop
# http://www.visions-of-fantasy.de/eggdrop.php
#
# script can use: irc.tcl script.tcl
####################################################

####################################################
# seen:help:pubm
####################################################
bind pubm fvlomn|fvlomn "% ${botnet-nick} help seen" seen:help:pubm
proc seen:help:pubm { n u h c t } {
  if {[matchattr $h bkZ]} { return 0 }
  if {[string match *gseen* [modules]]} {
    lappend o "seen: usage seen <nick>|<mask>|#<account>"
    lappend o "seen: shows seen info for the given nick or mask, #account can be used as short cut to *!*@<account>.users.quakenet.org"
  } else { lappend o "seen: gseen module does not appear to be loaded." }
  if {[string equal [info procs cnotice] ""]} { foreach l $o { puthelp "NOTICE $n :$l" }
  } else { foreach l $o { cnotice $n $l puthelp "seen: " } }
  putloglev c $c "help: $n $u $h $c seen"
  return 1
}


####################################################
# seen:help:msgm
####################################################
bind msgm fvlomn|fvlomn "help seen" seen:help:msgm
proc seen:help:msgm { n u h t } {
  if {![validchan $c]} { return 0 }
  if {[matchattr $h bkZ]} { return 0 }
  if {[string match *gseen* [modules]]} {
    lappend o "seen: usage seen <nick>|<mask>|#<account>"
    lappend o "seen: shows seen info for the given nick or mask, #account can be used as short cut to *!*@<account>.users.quakenet.org"
  } else { lappend o "seen: gseen module does not appear to be loaded." }
  if {[string equal [info procs cnotice] ""]} { foreach l $o { puthelp "NOTICE $n :$l" }
  } else { foreach l $o { cnotice $n $l puthelp "seen: " } }
  putcmdlog "($n!$u) !$h! help seen"
  return 1
}


####################################################
# seen:pubm2
####################################################
bind pubm -|- "% ${botnet-nick} seen" seen:pubm2
bind pubm -|- "% ${botnet-nick} seen *" seen:pubm2
proc seen:pubm2 { n u h c t } {
  if {![validchan $c]} { return 0 }
  if {[matchattr $h bkZ]} { return 0 }
  if {[matchattr $h fvlomn|fvlomn $c]} { return 0 }
  if {[expr [clock seconds] - [getchanjoin $n $c]] < 30 && ![isvoice $n $c] && ![ishalfop $n $c] && ![isop $n $c]} { return 0 }
  seen:pubm $n $u $h $c $t
  return 1
}


####################################################
# seen:pubm
####################################################
bind pubm fvlomn|fvlomn "% ${botnet-nick} seen" seen:pubm
bind pubm fvlomn|fvlomn "% ${botnet-nick} seen *" seen:pubm
proc seen:pubm { n u h c t } {
  if {![validchan $c]} { return 0 }
  if {[matchattr $h bkZ]} { return 0 }
  set t [join [lrange [split $t] 2 end]]; set o ""
  if {![string match *gseen* [modules]]} {
    lappend o "seen: gseen module does not appear to be loaded."
  } elseif {[string equal $t ""]} {
    lappend o "seen: usage seen <nick>|<mask>|#<account>"
  } else {
    set m [lindex [split [getchanmode $c]] 0]; set d 0
    if {![channel get $c quietseens]} { 
      if {[string match *m* $m] && ![botisop $c] && ![botishalfop $c] && ![botisvoice $c]} {
        set d 1
      } elseif {![matchattr $h fvlomn|fvlomn $c]} { set d 1 }
    }
    if {$d} { channel set $c +quietseens }
    *pub:!seen $n $u $h $c [seen:mask $t]
    if {$d} { channel set $c -quietseens }
  }
  if {[string equal [info procs cnotice] ""]} { foreach l $o { puthelp "NOTICE $n :$l" }
  } else { foreach l $o { cnotice $n $l puthelp "seen: " } }
  putloglev c $c "seen: $n $u $h $c $t"
  return 1
}


####################################################
# seen:msg
####################################################
bind msg fvlomn|fvlomn seen seen:msg
proc seen:msg { n u h t } {
  if {[matchattr $h bkZ]} { return 0 }
  set o ""; set r 1
  if {![string match *gseen* [modules]]} { lappend o "seen: gseen module does not appear to be loaded."
  } elseif {[string equal $t ""]} { lappend o "seen: usage seen <nick>|<mask>|#<account>"
  } else { *msg:seen $n $u $h [seen:mask $t]; set r 0 }
  if {[string equal [info procs cnotice] ""]} { foreach l $o { puthelp "NOTICE $n :$l" }
  } else { foreach l $o { cnotice $n $l puthelp "seen: " } }
  return $r
}


####################################################
# seen:dcc
####################################################
bind dcc -|- seen seen:dcc
proc seen:dcc { h i t } {
  set o ""
  if {![string match *gseen* [modules]]} {
    lappend o "seen: gseen module does not appear to be loaded."
  } elseif {[string equal $t ""]} {
    lappend o "seen: usage seen <nick>|<mask>|#<account>"
    lappend o "seen: shows seen info for the given nick or mask, #account can be used as short cut to *!*@<account>.users.quakenet.org"
  } else {
    *dcc:seen $h $i [seen:mask $t]
  }
  foreach l $o { putidx $i $l }
  return 1
}


####################################################
# seen:mask
####################################################
proc seen:mask { m } {
  if {[string match "?*@?*" $m] && ![string match "?*!?*@?*" $m]} { return "*!$m"
  } elseif {[string match "*.*" $m] && ![string match "?*!?*@?*" $m]} { return "*!*@$m"
  } elseif {[string match "?*!?*" $m] && ![string match "?*!?*@?*" $m]} { return "$m@*"
  } elseif {[string match "\#?*" $m] && ![string match "?*!?*@?*" $m]} {
    return "*!*@[string range $m 1 end].users.quakenet.org" } else { return $m }
}


####################################################
# set info for script.tcl
####################################################
set ::scriptdb(seen) {
  "provides seen command for accessing gseen module seen data"
}

