TCL Counter

Counter

#This is a basic kick and join counter. This script requires that 
#userinfo1.0.tcl is loaded before this script is. And also that KICKS is a 
#field in the userinfo1.0.tcl script. I would appreciate it, if you left my 
#nick in the putlog. Any changes, improvements, or problems plz don't hesitate
#to email me at abodnar@mail.utexas.edu
# --Neuromancer

#New to v2.0
#------------------------------------------------------------------------------
#- Added cmds to let you find out the total amount of joins to a channel by doing 
#either .totaljoins [#channel] in the bot or !totaljoins [#channel] in the
#channel, #channel is optional.
#- Added cmds to let you find out the total amount of kicks for a channel 
#or a person by doing either .totalkicks [nick] in the bot or 
#!totalkicks [nick] in the channel, nick is optional. 
#- Cleaned up some of the code dealing w/ the files
#- Made the # given when someone joins have the proper ending...
#ie. 1 = 1st, 2 = 2nd, 263 = 263rd

if {![info exists userinfover] } {
 putlog "*** Can't load Counter 2.0 -- Userinfo v1.01 required"
 return 0
}

bind pub f|f !totaljoins pub:totaljoins
bind dcc f|f totaljoins dcc:totaljoins
bind join -|- * joincounter
bind pub f|f !totalkicks pub:totalkicks
bind dcc f|f totalkicks dcc:totalkicks
bind kick -|- * kickcounter
set khits 0
set jhits 6034

proc convert {number} {
 set one st
 set two nd
 set three rd
 set others th
 set numlength [string length $number]
 incr numlength -2
 set num2ndchar [string index $number $numlength]
 switch $num2ndchar {
  1 { set number $number$others }
  default {
   incr numlength
   set numchar [string index $number $numlength]
   switch $numchar {
    1 { set number $number$one }
    2 { set number $number$two }
    3 { set number $number$three }
    default { set number $number$others }
   }
  }
 }
 return $number
}

proc dcc:totaljoins {hand idx arg} {
 if {$arg == ""} {
  set temp 0
  set chan [lindex [console $idx] 0]
  set rchan [string tolower $chan]
  if {[file exists ./scripts/$rchan.jcount.txt]} {
   set o_fid [open "./scripts/$rchan.jcount.txt" "RDONLY"]
   gets $o_fid temp
   close $o_fid
   putdcc $idx "$temp people have visited $rchan"
   return 0
  } else {
   putdcc $idx "Sorry, no one has visited $rchan yet"
  }
 } else {
  set temp 0
  set rchan [string tolower $arg]
  if {[file exists ./scripts/$rchan.jcount.txt]} {
   set o_fid [open "./scripts/$rchan.jcount.txt" "RDONLY"]
   gets $o_fid temp
   close $o_fid
   putdcc $idx "$temp people have visited $rchan"
   return 0
  } else {
   putdcc $idx "Sorry, no one has visited $rchan yet"
  }
 }
}

proc pub:totaljoins {nick host hand chan arg} {
 if { $arg == "" } {
  set temp 0
  set rchan [string tolower $chan]
  if {[file exists ./scripts/$rchan.jcount.txt]} {
   set o_fid [open "./scripts/$rchan.jcount.txt" "RDONLY"]
   gets $o_fid temp
   close $o_fid
   putserv "PRIVMSG $chan :$temp people have visited $chan"
   return 0
  } else {
   putserv "PRIVMSG $chan :Sorry, no one has visited $rchan yet"
  }
 } else {
  set temp 0
  set rchan [string tolower $arg]
  if {[file exists ./scripts/$rchan.jcount.txt]} {
   set o_fid [open "./scripts/$rchan.jcount.txt" "RDONLY"]
   gets $o_fid temp
   close $o_fid
   putserv "PRIVMSG $chan :$temp people have visited $rchan"
   return 0
  } else {
   putserv "PRIVMSG $chan :Sorry, no one has visited $rchan yet"
  }
 }
} 

proc joincounter {nick host hand chan} {
 global jhits
 set temp 0
 set rchan [string tolower $chan]
 if {[file exists ./scripts/$rchan.jcount.txt]} {
  set o_fid [open "./scripts/$rchan.jcount.txt" "RDONLY"]
  gets $o_fid temp
  close $o_fid
 } else {
  set o_fid [open "./scripts/$rchan.jcount.txt" "CREAT RDWR"]
  puts $o_fid temp
  close $o_fid
 }
 set jhits $temp
 incr jhits
 putserv "NOTICE $nick :You are the [convert $jhits] person to join $chan"
 set o_id [open "./scripts/$rchan.jcount.txt" "WRONLY"]
 puts $o_id $jhits
 close $o_id
}


proc dcc:totalkicks {hand idx arg} {
 if {$arg == ""} {
  set temp 0
  set chan [lindex [console $idx] 0]
  set rchan [string tolower $chan]
  if {[file exists ./scripts/$rchan.kcount.txt]} {
   set o_fid [open "./scripts/$rchan.kcount.txt" "RDONLY"]
   gets $o_fid temp
   close $o_fid
   putdcc $idx "$temp people have been kicked from $rchan"
   return 0
  } else {
   putdcc $idx "Sorry, no one has been kicked from $rchan yet"
  }
 } else {
  set temp 0
  set nick [string tolower $arg]
  if {[validuser $nick]} {
   if {[getuser $nick XTRA KICKS] == ""} {
    putdcc $idx "$arg hasn't kicked anyone yet"
   } else {
    set tkicks [getuser $nick XTRA KICKS]
    putdcc $idx "$arg has kicked $tkicks lamers"
   }
  } else {
   putdcc $idx "I do not know who $arg is"
  }
 }
}        

proc pub:totalkicks {nick host hand chan arg} {
 if {$arg == ""} {
  set temp 0
  set rchan [string tolower $chan]
  if {[file exists ./scripts/$rchan.kcount.txt]} {
   set o_fid [open "./scripts/$rchan.kcount.txt" "RDONLY"]
   gets $o_fid temp
   close $o_fid
   putserv "PRIVMSG $chan :$temp people have been kicked from $rchan"
   return 0
  } else {
   putserv "PRIVMSG $chan :Sorry, no one has been kicked from $rchan yet"
  }
 } else {
  set temp 0
  set nick [string tolower $arg]
  if {[validuser $nick]} {
   if {[getuser $nick XTRA KICKS] == ""} {
    putserv "PRIVMSG $chan :$arg hasn't kicked anyone yet"
   } else {
    set tkicks [getuser $nick XTRA KICKS]
    putserv "PRIVMSG $chan :$arg has kicked $tkicks lamers"
   }
  } else {
   putserv "PRIVMSG $chan :I do not know who $arg is"
  }
 }
}

proc kickcounter {nick host hand chan knick reason} {
 global khits
 set temp 0
 set rchan [string tolower $chan]
 if {[file exists ./scripts/$rchan.kcount.txt]} {
  set o_fid [open "./scripts/$rchan.kcount.txt" "RDONLY"]
  gets $o_fid temp
  close $o_fid
 } else {
  set o_fid [open "./scripts/$rchan.kcount.txt" "CREAT RDWR"]
  puts $o_fid temp
  close $o_fid
 }
 set khits $temp
 incr khits
 if {[validuser [nick2hand $nick $chan]]} {
  if {[getuser $hand XTRA KICKS] == ""} {
   setuser $hand XTRA KICKS 0 
  }
  set tkicks [getuser $hand XTRA KICKS]
  incr tkicks
  setuser $hand XTRA KICKS $tkicks
  putserv "PRIVMSG $chan :$nick has bashed $tkicks lamers since Kick Counter was started"
 }
 putserv "NOTICE $knick :Ti si [convert $khits] chovek koito izhvurcha ot kanala"
 putserv "PRIVMSG $chan :$knick beshe [convert $khits] chovek koito go izritaha ot kanala"
 set o_id [open "./scripts/$rchan.kcount.txt" "WRONLY"]
 puts $o_id $khits
 close $o_id
}

putlog "Join & Kick Counter v2.1 by Neuromancer"