OCB - One Channel Ban - requested

Release your script here.
State:
- Author
- What it does
- Perhaps a little guide.
- Also, if the snippet is of any use to the community, it has a chance of getting posted on the main page, so don't hesitate to submit/ask!

OCB - One Channel Ban - requested

Postby Cristian » Sun Dec 14, 2008 11:11 am

Updated: 6/1/2008

Notice, there is no anti join flood


OCB short for One channel ban, can be setup to ban users connected to the server for under X seconds and for users who is on X channels.

fx:
if minchannels is set to 2, and a user join #channel, the eggdrop does a whois, and finds one channel (#channel), this user will be kicked and banned.
if minchannels is set to 6, and a user join #channel, the eggdrop does a whois, and finds two channels (#channel and #channel_2), this user will be kicked and anned.
if minchannels is set to 1, and a user join #channel, the eggdrop does a whois, and finds one channel (#channel), this user will NOT be kicked and banned.#



There is three channel flags, one master and two specific.

channel flag ocb - turned off this script won't run, this is the master switch.
channel flag ocb-require1 - checks for X channel on join.
channel flag ocb-require2 - checks for time connected to the server.




It also notifys a 'home' channel when a user is affected by the OCB script.

A trigger can be changed as well. - (default .ocb)

    .ocb [on] [off] [default]
    .ocb OC [on] [off] [default]
    .ocb NCU [on] [off] [default]


OC short for One channel.
NCU short for newly connected users.

Signontime is in seconds 600 = 10 minuttes and is the default time.

The kickmessage is changeable too.
**NEW** The bantime is changeable and specified in minuttes (0 for permanent)
**NEW** The exemptflags have been added so, you can add users (and yourself) and preventing the eggdrop to kick you.
**NEW** Set home for bot messages, or leave it blank to turn it off.


Have fun with the script, and please report bugs and error here at sp00fed.org.
If you have any suggestions please inform me.

Thanks.




Code: Select all
setudef flag ocb
setudef flag ocb-require1
setudef flag ocb-require2

namespace eval ocb {
   namespace eval variable {
      variable home "#home"
      variable minchannels 2
      variable trigger ".ocb"
      variable signontime 600
      variable exemptflags "nmov|nmov"
      variable bantime 10

      variable kickmsg1 "kickmessage for being on X channels."
      variable kickmsg2 "kickmessage for users connected to quakenet under X seconds."
   }

   if {[array exists hostmasks]} {
      array unset hostmasks
   }

   array set hostmasks {
      *sp00fed.org          ""
      *hostname1.net        ""
      *hostname2.com        ""
   }





   bind join - * [namespace current]::onjoin   
   bind PUB o $::ocb::variable::trigger [namespace current]::menu

   proc onjoin {nickname hostname handle channel} {
      global ocb

      if {[channel get $channel ocb]} {

         if {![isbotnick $nickname]} {
            if {![matchattr $handle $::ocb::variable::exemptflags $channel]} {
               foreach {h i} [array get ocb::hostmasks] {
                  if {[string match $h $hostname]} {
                     return
                  }
               }

               set victim [string map {"\{" "\\\{" "\\" "\\\\" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]"} [string tolower $nickname]]
               set userhostname [string trim $hostname "~"]
               set channel [string tolower $channel]

               set ocb($victim) "{$victim} {$channel} {$userhostname} {0}"
               #putlog "making whois $victim "
               bind raw - {319} [namespace current]::raw319
               bind raw - {317} [namespace current]::raw317
               putquick "WHOIS [join $victim] [join $victim]"
            }
         }
      }
   }
   proc raw319 {server raw arguments} {
      global ocb
      catch { unbind RAW - {319} [namespace current]::raw319 }


      set victim [string map {"\{" "\\\{" "\\" "\\\\" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]"} [string tolower [lindex [split $arguments] 1]]]
      if {[info exists ocb($victim)]} {


         set channel [join [lindex [split $ocb($victim)] 1]]
         set hostname [join [lindex [split $ocb($victim)] 2]]
         set result [join [lindex [split $ocb($victim)] 3]]
         set channels [string tolower [lrange $arguments 2 e]]

         if {[channel get $channel ocb-require1]} {

            #putlog "channels $channels"
            if {[llength $channels] < $::ocb::variable::minchannels} {
               foreach user [chanlist $channel] {
                  if {[string match "$hostname" "[string trim [getchanhost $user $channel] "~"]"]} {
                     set banmask *!*[string trim $hostname "~"]
                     putquick "KICK $channel $user :$::ocb::variable::kickmsg1" -next 
                     putquick "MODE $channel +b $banmask" -next
                     newchanban $channel $banmask OCB $::ocb::variable::kickmsg1 $::ocb::variable::bantime
                     if {[validchan $::ocb::variable::home]} {
                        putmsg $::ocb::variable::home "Kicked $user. Only [llength $channels] channels were were found."
                     }
                  }
                  set ocb($victim) "{$victim} {$channel} {$hostname} {1}"
               }
            }
         }
      }
   }
   proc raw317 {server raw arguments} {
      global ocb
      catch { unbind RAW - {317} [namespace current]::raw317 }
      #putlog "Arguments: $arguments"
      set victim [string map {"\{" "\\\{" "\\" "\\\\" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]"} [string tolower [lindex [split $arguments] 1]]]
      if {[info exists ocb($victim)]} {
   
         set channel [join [lindex [split $ocb($victim)] 1]]
         set hostname [join [lindex [split $ocb($victim)] 2]]
         #set result [join [lindex [split $ocb($victim)] 3]]

         set signontime [lindex [split $arguments] 3]
         #putlog "Sign on time: $signontime"
         if {[channel get $channel ocb-require2]} {
            if {[expr [unixtime] - $signontime] < $::ocb::variable::signontime} {
               foreach user [chanlist $channel] {
                  if {[string match "$hostname" "[string trim [getchanhost $user $channel] "~"]"]} {
                     set banmask *!*[string trim $hostname "~"]
                     putquick "KICK $channel $user :$::ocb::variable::kickmsg2" -next   
                     putquick "MODE $channel +b $banmask" -next
                     newchanban $channel $banmask OCB $::ocb::variable::kickmsg2 $::ocb::variable::bantime
                     if {[validchan $::ocb::variable::home]} {
                        putmsg $::ocb::variable::home "Kicked $user. Under [duration [expr [unixtime] - $signontime]] on [lindex [split $::server .] 2]."
                     }
                  }
               }
            }
         }
      }
   }


   proc menu {nickname hostname handle channel arguments} {
      set first "[lindex $arguments 0]"
      switch $first {
         "on" {
            channel set $channel +ocb


            set status ""
            append status "(\002NCU\002) Newly connected users is "
            if {[channel get $channel ocb-require1]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
            append status "(\002OC\002) One channel users is "
            if {[channel get $channel ocb-require2]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }

            puthelp "NOTICE $nickname :(\002OCB\002) One channel ban is turned (\002\00309ON\003\002) - $status"
         }
         "off" {   
            channel set $channel -ocb


            set status ""
            append status "(\002NCU\002) Newly connected users is "
            if {[channel get $channel ocb-require1]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
            append status "(\002OC\002) One channel users is "
            if {[channel get $channel ocb-require2]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }

            puthelp "NOTICE $nickname :(\002OCB\002) One channel ban is turned (\002\00304OFF\003\002) - $status"
         }
         "ncu" {
            set second "[lindex $arguments 1]"
            switch $second {
               "on" {
                  channel set $channel +ocb-require1
                  puthelp "NOTICE $nickname :One channel ban for \002newly connected users\002 is turned (\002\00309ON\003\002)"
               }
               "off" {   
                  channel set $channel -ocb-require1
                  puthelp "NOTICE $nickname :One channel ban for \002newly connected users\002 is turned (\002\00304OFF\003\002)"
               }
               "default" {
                  if {[channel get $channel ocb-require1]} {
                     puthelp "NOTICE $nickname :One channel ban for \002newly connected users\002 is (\002\00309ON\003\002)"
                  } else {
                     puthelp "NOTICE $nickname :One channel ban for \002newly connected users\002 is (\002\00304OFF\003\002)"
                  }
               }
            }
         }
         "oc" {
            set second "[lindex $arguments 1]"
            switch $second {
               "on" {
                  channel set $channel +ocb-require2
                  puthelp "NOTICE $nickname :One channel ban for \002One channel users\002 is turned (\002\00309ON\003\002)"
               }
               "off" {   
                  channel set $channel -ocb-require2
                  puthelp "NOTICE $nickname :One channel ban for \002One channel users\002 is turned (\002\00304OFF\003\002)"
               }
               "default" {
                  if {[channel get $channel ocb-require2]} {
                     puthelp "NOTICE $nickname :One channel ban for \002One channel users\002 is (\002\00309ON\003\002)"
                  } else {
                     puthelp "NOTICE $nickname :One channel ban for \002One channel users\002 is (\002\00304OFF\003\002)"
                  }
               }
            }
         }
         "default" {
            if {[channel get $channel ocb]} {
               set status ""
               append status "(\002NCU\002) Newly connected users is "
               if {[channel get $channel ocb-require1]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
               append status "(\002OC\002) One channel users is "
               if {[channel get $channel ocb-require2]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }

               puthelp "NOTICE $nickname :(\002OCB\002) One channel ban is (\002\00309ON\003\002) - $status"


            } else {
               set status ""
               append status "(\002NCU\002) Newly connected users is "
               if {[channel get $channel ocb-require1]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }
               append status "(\002OC\002) One channel users is "
               if {[channel get $channel ocb-require2]} { append status "(\002\00309ON\003\002) " } { append status "(\002\00304OFF\003\002) " }

               puthelp "NOTICE $nickname :(\002OCB\002) One channel ban is (\002\00304OFF\003\002) - $status"
            }
         }
      }
   }
}
Cristian
proof of advance
proof of advance
 
Posts: 282
Joined: Sun Nov 04, 2007 3:02 pm
Location: Denmark
Authnick: Sumsar

Re: OCB - One Channel Ban - requested

Postby Cristian » Sat Dec 20, 2008 12:49 am

I have updated this script, you are now able to add host masks that you don't want to be checked.
Cristian
proof of advance
proof of advance
 
Posts: 282
Joined: Sun Nov 04, 2007 3:02 pm
Location: Denmark
Authnick: Sumsar

Postby SilverRain » Wed Dec 31, 2008 10:14 am

Very nice Sumsar - thanks for sharing!
SilverRain
 

Re: OCB - One Channel Ban - requested

Postby sKippah » Fri Jan 02, 2009 3:34 pm

Thank you very much. This script works perfect for me ;)

One Question. If somebody was already in the chan and got killed by S and he wants to rejoin, he also becomes kicked. Is it possible to sort this out?
and is there a Time expiration for a ban?
sKippah
 

Re: OCB - One Channel Ban - requested

Postby Cristian » Fri Jan 02, 2009 4:09 pm

You could set ban on the channel when a user get killed, it is not permanent, or should it be?

When setting a ban the user wouldn't be able to rejoin, save out logs for kickage spam ;)

and to the question about ban expiration, No I didn't add that function, you didn't ask for one ;)
do you wish one?
Cristian
proof of advance
proof of advance
 
Posts: 282
Joined: Sun Nov 04, 2007 3:02 pm
Location: Denmark
Authnick: Sumsar

Re: OCB - One Channel Ban - requested

Postby sKippah » Sat Jan 03, 2009 8:02 pm

hello Sumsar. Wrote it already in request. please, if you would do that :) thank you
sKippah
 


Return to TCL Scripting Release

Who is online

Users browsing this forum: No registered users and 1 guest

cron