This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

Kick users after a certain amount of time spent in the chan

Requests for complete scripts or modifications/fixes for scripts you didn't write. Response not guaranteed, and no thread bumping!
q
qetuoadgjl
Voice
Posts: 11
Joined: Tue Feb 26, 2008 11:03 am

Kick users after a certain amount of time spent in the chan

Post by qetuoadgjl »

Okay I know there are a few aidle on here already, but none of them are exactly what I'm looking for!

Okay so, we need a maximum stay tcl, which will kick users say after 15 minutes or however many minutes we specify as we run a help channel and don't want a bunch of idlers in the room. we need an option to make it channel specific as we have alot of bots running in various rooms. Also, we don't want it kicking our ops or voices etc just people with no voice, no half ops, no ops soone. and if it could notice the user 5 minutes before they will be kicked warning them, that would be good, but no crucial! lol

ty all
User avatar
TCL_no_TK
Owner
Posts: 509
Joined: Fri Aug 25, 2006 7:05 pm
Location: England, Yorkshire

Post by TCL_no_TK »

Usage:
.chanset <#channel> +idlekick
.chanset <#channel> idlekick-time <time(minets)>

Code: Select all

# time in minets to check channels for idlers? (default: 10)
set idlekick_checktime "10"

# set your IRCd's kick length below (default: 150)
#  -- note, some networks all 255. but 150 should be safe :)
set idlekick_kicklength "150"

# set the kick message
set idlekick_kickmsg "idle lamer"

# Set the warn message
set idlekick_warnmsg "how lame are you? Mr I idle in a help channel"

# warn the user a minet before the set idle time for the channel?
#  -- this should allow you to inform the user better, that they will be kicked in a minet if they contine to idle. ;p
# 1/0 = yes/no
set idlekick_loseit "1"

# Punishments
# 1 = kick the user.
# 2 = kick and ban the user.
# 3 = warn and kick the user.
# 4 = warn, kick and ban the user.
# 5 = warn the user.
set idlekick_punish "4"

# code
proc time:idlekick {minuet hour day month year} {
global idlekick_loseit idlekick_punish
 foreach channel [channels] {
  if {[channel get $channel idlekick] == "+" && [botisop $channel]} {
   foreach iu [chanlist $channel] {
    if {![isbotnick $iu] && [onchan $iu $channel] && ![isop $iu $channel] && ![ishalfop $iu $channel] && ![isvoice $iu $channel]} {
     if {$idlekick_loseit == 1 && [expr [channel get $channel idlekick-time] -1] == [getchanidle $iu $channel]} {
      switch $idlekick_punish {
       "1" {idle:kick "$channel $iu"}
       "2" {idle:kickban "$channel $iu"}
       "3" {idle:warnkick "$channel $iu"}
       "4" {idle:warnkickban "$channel $iu"}
       "5" {idle:warn "$channel $iu"}
      }
     }
     if {$idlekick_loseit == 0 && [channel get $channel idlekick-time] == [getchanidle $iu $channel]} {
      switch $idlekick_punish {
       "1" {idle:kick "$channel $iu"}
       "2" {idle:kickban "$channel $iu"}
       "3" {idle:warnkick "$channel $iu"}
       "4" {idle:warnkickban "$channel $iu"}
       "5" {idle:warn "$channel $iu"}
      }
     }
    }
   }
  }
 }; return
}

proc idle:kick {text} {
global idlekick_kickmsg idlekick_kicklength
 set chan [lindex [split $text] 0]
  set nick [lindex [split $text] 1]
   if {[onchan $nick $chan] && [botisop $chan]} {
    putserv "KICK $chan $nick :[trimchars "$idlekick_kickmsg  $idlekick_kicklength"]"
   }; return
}

proc idle:kickban {text} {
global idlekick_kickmsg idlekick_kicklength
 set chan [lindex [split $text] 0]
  set nick [lindex [split $text] 1]
   if {[onchan $nick $chan] && [botisop $chan]} {
    putserv "MODE $chan +b "*!*@[lindex [split [getchanhost $nick] "@"] 1]"    
    putserv "KICK $chan $nick :[trimchars "$idlekick_kickmsg  $idlekick_kicklength"]"
   }; return
}

proc idle:warnkick {text} {
global idlekick_loseit
 idle:warn "$text"
  if {$idlekick_loseit == 1} {
   utimer 54 {idle:kick "$text"}
  } else {
   idle:kick "$text"
  }; return
}

proc idle:warnkickban {text} {
global idlekick_loseit
 idle:warn "$text"
  if {$idlekick_loseit == 1} {
   utimer 54 {idle:kickban "$text"}
  } else {
   idle:kickban "$text"
  }; return
}

proc idle:warn {text} {
global idlekick_warnmsg
 set chan [lindex [split $text] 0]
  set nick [lindex [split $text] 1]
   if {[onchan $nick $chan]} {
    puthelp "NOTICE $nick :$idlekick_warnmsg"
   }; return
}

proc trimchars {text} {
 set chars [lrange "$text" 0 [expr [llength "$text"] -1]]
  set trim [lrange "$text" end end]
   return [join [lrange "[split "$chars" {}]" 0 $trim] {}]
}

# channel options
setudef flag idlekick
setudef str idlekick-time

# binds
bind time - "$idlekick_checktime * * * *" time:idlekick

#end
putlog "loaded idlekick.tcl version 1.1 by TCL_no_TK"
return
Not tested, and sorry for spelling/grammer mistakes :oops:

P.S Just FYI, MC_8's idle script should be able to do this. linkage:http://forum.purehype.net/phpBB3/viewto ... f=32&t=697

EDIT: fixed erorr mentioned in post below. :D Thanks
EDIT [2]: fixed error, extra '}' in one of idle: procs
EDIT [3]: switched kickban, to ban first.
Last edited by TCL_no_TK on Thu Mar 20, 2008 11:29 pm, edited 3 times in total.
User avatar
speechles
Revered One
Posts: 1398
Joined: Sat Aug 26, 2006 10:19 pm
Location: emerald triangle, california (coastal redwoods)

Post by speechles »

Code: Select all

putserv "KICK $chan $nick :[trimchars $idlekick_kickmsg  $idlekick_kicklength]" 
...snipped irrelevant sections...
proc trimchars {text} {
Do you see the problem here? Your incorrectly invoking trimchars with too many parameters.

Code: Select all

putserv "KICK $chan $nick :[trimchars "$idlekick_kickmsg  $idlekick_kicklength"]"
This is how you should do it. Notice trimchars see's a single parameter built with two variables now, not two seperate parameters. You also don't need to worry about the tcl interpreter evaluating those double-quotes incorrectly either. Because of how tcl works, by the time the putserv is invoked (the 1st set of double-quotes), the trimchars section will have already been evaluated (the 2nd set of double-quotes). Escaping any of them will lead to a tcl error, above is correct.
User avatar
TCL_no_TK
Owner
Posts: 509
Joined: Fri Aug 25, 2006 7:05 pm
Location: England, Yorkshire

Post by TCL_no_TK »

Thanks :) glad its nothin to worry about :P
User avatar
iamdeath
Master
Posts: 323
Joined: Fri Feb 11, 2005 2:32 pm
Location: *HeLL*
Contact:

Post by iamdeath »

@TCL_no_TK

You should release that script, it will be useful for others in future if anyone needs something like that. Will definately benefit others. :)

Just a friendly suggestion
peace
death
|AmDeAtH @ Undernet
Death is only the *Beginning*...
User avatar
TCL_no_TK
Owner
Posts: 509
Joined: Fri Aug 25, 2006 7:05 pm
Location: England, Yorkshire

Post by TCL_no_TK »

Submitted :) Thanks 8)
User avatar
Fahad
Op
Posts: 127
Joined: Mon Aug 29, 2016 9:40 am

Post by Fahad »

This TCL is not working... At ALL
User avatar
Fahad
Op
Posts: 127
Joined: Mon Aug 29, 2016 9:40 am

Post by Fahad »

Code: Select all

# idlekick.tcl version 1.1.1 by TCL_no_TK <ispmailsucks@googlemail.com>
#
# this script was written for user qetuoadgjl on egghelp.org forums
#   Post: http://forum.egghelp.org/viewtopic.php?t=15543
#
# Kicks users after a set about of idle time, configurable via dcc chanset command.
# Ability to warn users before kicking and banning them, and other punishment options.
#
# Usage:
# .chanset <#channel> +idlekick
# .chanset <#channel> idlekick-time <time(minets)>
#
##

# time in minets to check channels for idlers? (default: 10)
set idlekick_checktime "2"

# set your IRCd's kick length below (default: 150)
#  -- note, some networks all 255. but 150 should be safe :)
set idlekick_kicklength "10"

# set the kick message
set idlekick_kickmsg "3Idling is 4NOT4 3allowed"

# Set the warn message
set idlekick_warnmsg "3Ask your 4QUESTION "

# warn the user a minet before the set idle time for the channel?
#  -- this should allow you to inform the user better, that they will be kicked in a minet if they contine to idle. ;p
# 1/0 = yes/no
set idlekick_loseit "1"

# Punishment Options
# 1 = kick the user.
# 2 = kick and ban the user.
# 3 = warn and kick the user.
# 4 = warn, kick and ban the user.
# 5 = warn the user.
set idlekick_punish "3"

#code
proc time:idlekick {minuet hour day month year} {
global idlekick_loseit idlekick_punish
 foreach channel [channels] {
  if {[channel get $channel idlekick] == "+" && [botisop $channel]} {
   foreach iu [chanlist $channel] {
    if {![isbotnick $iu] && [onchan $iu $channel] && ![isop $iu $channel] && ![ishalfop $iu $channel] && ![isvoice $iu $channel]} {
     if {$idlekick_loseit == 1 && [expr [channel get $channel idlekick-time] -1] == [getchanidle $iu $channel]} {
      switch $idlekick_punish {
       "1" {idle:kick "$channel $iu"}
       "2" {idle:kickban "$channel $iu"}
       "3" {idle:warnkick "$channel $iu"}
       "4" {idle:warnkickban "$channel $iu"}
       "5" {idle:warn "$channel $iu"}
      }
     }
     if {$idlekick_loseit == 0 && [channel get $channel idlekick-time] == [getchanidle $iu $channel]} {
      switch $idlekick_punish {
       "1" {idle:kick "$channel $iu"}
       "2" {idle:kickban "$channel $iu"}
       "3" {idle:warnkick "$channel $iu"}
       "4" {idle:warnkickban "$channel $iu"}
       "5" {idle:warn "$channel $iu"}
      }
     }
    }
   }
  }
 }; return
}

proc idle:kick {text} {
global idlekick_kickmsg idlekick_kicklength
 set chan [lindex [split $text] 0]
  set nick [lindex [split $text] 1]
   if {[onchan $nick $chan] && [botisop $chan]} {
    putserv "KICK $chan $nick :[trimchars "$idlekick_kickmsg  $idlekick_kicklength"]"
   }; return
}

proc idle:kickban {text} {
global idlekick_kickmsg idlekick_kicklength
 set chan [lindex [split $text] 0]
  set nick [lindex [split $text] 1]
   if {[onchan $nick $chan] && [botisop $chan]} {
    putserv "MODE $chan +b "*!*@[lindex [split [getchanhost $nick] "@"] 1]"
     putserv "KICK $chan $nick :[trimchars "$idlekick_kickmsg  $idlekick_kicklength"]"
   }; return
}

proc idle:warnkick {text} {
global idlekick_loseit
 idle:warn "$text"
  if {$idlekick_loseit == 1} {
   utimer 54 {idle:kick "$text"}
  } else {
   idle:kick "$text"
  }; return
}

proc idle:warnkickban {text} {
global idlekick_loseit
 idle:warn "$text"
  if {$idlekick_loseit == 1} {
   utimer 54 {idle:kickban "$text"}
  } else {
   idle:kickban "$text"
  }; return
}

proc idle:warn {text} {
global idlekick_warnmsg
 set chan [lindex [split $text] 0]
  set nick [lindex [split $text] 1]
   if {[onchan $nick $chan]} {
    puthelp "NOTICE $nick :$idlekick_warnmsg"
   }; return
}

proc trimchars {text} {
 set chars [lrange "$text" 0 [expr [llength "$text"] -1]]
  set trim [lrange "$text" end end]
   return [join [lrange "[split "$chars" {}]" 0 $trim] {}]
}

#channel options
setudef flag idlekick
setudef str idlekick-time

#binds
bind time - "$idlekick_checktime * * * *" time:idlekick

#end
putlog "loaded idlekick.tcl version 1.1.1 by TCL_no_TK"
return
User avatar
Fahad
Op
Posts: 127
Joined: Mon Aug 29, 2016 9:40 am

Post by Fahad »

TCL_no_TK wrote:Submitted :) Thanks 8)
This DOES not KICK the USER NOT WORKING
User avatar
ComputerTech
Master
Posts: 399
Joined: Sat Feb 22, 2020 10:29 am
Contact:

Post by ComputerTech »

Sorry, I know this is a old post but i kind of want to make it (finished)

this script seems to work for me :D

to turn on this is script as TCL_no_TK said
.chanset <#channel> +idlekick
.chanset <#channel> idlekick-time <time(minets)>
ComputerTech
Y
Yusif
Voice
Posts: 34
Joined: Fri Aug 18, 2023 11:08 am

Post by Yusif »

can someone please help to add to this tcl warn-message on user join that he/she have only 15 minutes to idle in the channel and work for #Help
s
simo
Revered One
Posts: 1078
Joined: Sun Mar 22, 2015 2:41 pm

Post by simo »

Yusif wrote:can someone please help to add to this tcl warn-message on user join that he/she have only 15 minutes to idle in the channel and work for #Help
How about adding that in the channel topic for everyone to see on join?
User avatar
CrazyCat
Revered One
Posts: 1236
Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:

Post by CrazyCat »

You can simply add:

Code: Select all

bind join - "#help *" idknotice
proc idknotice {nick uhost handle chan} {
   putserv "PRIVMSG $nick :You'll be kicked after [channel get $chan idlekick-time] minutes"
}
Y
Yusif
Voice
Posts: 34
Joined: Fri Aug 18, 2023 11:08 am

Post by Yusif »

Thank you CC .. worked fine

Code: Select all

bind join - "#help *" idknotice
proc idknotice {nick uhost handle chan} {
   putserv "PRIVMSG $nick :You'll be kicked after [channel get $chan idlekick-time] minutes"
}
but the :

Code: Select all

[channel get $chan idlekick-time]
not get time from idlekick-time the msg come out like:

Code: Select all

You'll be kicked after minutes  <=  no time there 

thanks again
Y
Yusif
Voice
Posts: 34
Joined: Fri Aug 18, 2023 11:08 am

Post by Yusif »

worked now .. changed it to :

Code: Select all

\002[channel get $chan idlekick-checktime]\002
but another issue, it not send warn-msg 2minutes before times up nor kick when 15 minutes ebd
Post Reply