# by wiebe @ QuakeNet

# chanflag flyby (on / off)
# chanflag flyby-trigger (ban when user parts after being less than X seconds on the channel)
# chanflag flyby-bantime (ban time in minutes)
# ignore fvlomn and bots, ignore voice/halfop/op


setudef flag flyby
setudef int flyby-trigger
setudef int flyby-bantime


bind part -|- * flyby:part

proc flyby:part { nick uhost handle chan {msg ""}} {
  if { [isbotnick $nick] } { return 0 }
  if { ![validchan $chan] } { return 0 }
  if { ![channel get $chan flyby] } { return 0 }
  if { [matchattr $handle bfvlomn|fvlomn $chan] } { return 0 }
  if { [isop $nick $chan] || [ishalfop $nick $chan] || [isvoice $nick $chan] } { return 0 }
  if { [string match -nocase *@*.quakenet.org $uhost] && ![string match -nocase *@*.users.quakenet.org $uhost] } { return 0 }
  if { [string match -nocase *@quakenet.org $uhost] } { return 0 }
  if { [channel get $chan flyby-trigger] < "0" } { return 0 }
  set trigger [channel get $chan flyby-trigger]
  set joints [getchanjoin $nick $chan]
  set now [clock seconds]
  set staydur [expr $now - $joints]
  if { $staydur <= $trigger } {
    set bantime [channel get $chan flyby-bantime]
    set site [lindex [split $uhost @] 1]
    set ban *!*@$site
    if { $bantime < "1" } { set bantime 10 }
    pushmode $chan +b $ban
    utimer 5 [list newchanban $chan $ban flyby "flyby detected" $bantime]
  }
}

