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.

norepeats.tcl v1.1 - by strikelight | Kicks OPS :(

Old posts that have not been replied to for several years.
Locked
User avatar
FakeZ
Voice
Posts: 19
Joined: Tue Oct 28, 2003 2:25 pm

norepeats.tcl v1.1 - by strikelight | Kicks OPS :(

Post by FakeZ »

Can someone help me, that this script dont kicks ops if they repeat something ?

Thanx a lot :mrgreen:
User avatar
]Kami[
Owner
Posts: 590
Joined: Thu Jul 24, 2003 2:59 pm
Location: Slovenia
Contact:

Post by ]Kami[ »

I think you must specify flag which users, bot wont kick, put flag f there, and every op gave flag f...
User avatar
arcane
Master
Posts: 280
Joined: Thu Jan 30, 2003 9:18 am
Location: Germany
Contact:

Post by arcane »

]Kami[ wrote:I think you must specify flag which users, bot wont kick, put flag f there, and every op gave flag f...
hehe... wouldnt it be easier to use flag "o" then? ;)

@FakeZ: i dont know the code, maybe you could post it? i bet you just have to add a line if {[isop $nick]} somewhere
aVote page back online!
Check out the most popular voting script for eggdrop bots.

Join the metal tavern!
User avatar
FakeZ
Voice
Posts: 19
Joined: Tue Oct 28, 2003 2:25 pm

Post by FakeZ »

Code: Select all

## CONFIGURATION ##


# Default repeat rate flood
# <how many repeats>:<in how many seconds>
set norepeats(default) 0:0

# Ban on repeat? (1 = Yes , 0 = No)
set norepeats(banonrepeat) 1

# If banning on repeat, how many minutes shall they be banned for?
set norepeats(bantime) 60

# Kick/Ban Message to use upon repeat detection?
set norepeats(message) "no repeating allowed"


## END OF CONFIG ##



set norepeats(version) 1.1
set eggversion [string trimleft [lindex $version 1] 0]

if {$eggversion < 1050000} {
  proc norepeats_load {} {
    global norepeats
    if {![file exists $norepeats(file)]} { return 0 }
    foreach item [array names norepeats *,rate] {
      catch {unset $norepeats($item)}
    }
    set infile [open "$norepeats(file)" r]
    while {![eof $infile]} {
      gets $infile dataline
      if {$dataline != ""} {
        set dchan [lindex [split $dataline] 0]
        set drate [lindex [split $dataline] 1]
        if {[validchan $dchan]} { set norepeats($dchan,rate) $drate }
      }
    }
    close $infile
    foreach chan [channels] {
      if {![info exists norepeats([string tolower $chan],rate)]} {
        set norepeats([string tolower $chan],rate) $norepeats(default)
      }
    }
    return 1
  }
  proc norepeats_save {} {
    global norepeats
    set outfile [open "$norepeats(file)" w]
    foreach chan [channels] {
      if {![info exists norepeats([string tolower $chan],rate)]} {
        set norepeats([string tolower $chan],rate) $norepeats(default)
      }
      puts $outfile "[string tolower $chan] $norepeats([string tolower $chan],rate)"
    }
    close $outfile
    return 1
  }
  set norepeats(file) "${nick}.rpd"
  regsub -all -- \\\| $norepeats(file) _ norepeats(file)
  regsub -all -- \\\[ $norepeats(file) _ norepeats(file)
  regsub -all -- \\\] $norepeats(file) _ norepeats(file)
  regsub -all -- \\\} $norepeats(file) _ norepeats(file)
  regsub -all -- \\\{ $norepeats(file) _ norepeats(file)
  regsub -all -- \\\' $norepeats(file) _ norepeats(file)
  if {![file exists $norepeats(file)]} {
    set outfile [open "$norepeats(file)" w]
    foreach chan [channels] {
      puts $outfile "[string tolower $chan] $norepeats(default)"
    }
    close $outfile
    catch {unset outfile}
    catch {unset chan}
  }
  bind time - "10 * * * *" norepeats_time_save
  proc norepeats_time_save {mi ho mo da yr} {
    putloglev o * "Saving norepeats data ..."
    norepeats_save
  }
  proc norepeats_rate {chan} {
    global norepeats
    if {![validchan $chan]} { return "0:0" }
    if {![info exists norepeats([string tolower $chan],rate)]} {
      set norepeats([string tolower $chan],rate) "$norepeats(default)"
    }
    return "$norepeats([string tolower $chan],rate)"
  }
  bind dcc n norepeats norepeats_dcc
  proc norepeats_dcc {hand idx text} {
    global norepeats
    set what [string tolower [lindex $text 0]]
    if {($what == "") || ![regexp set|mset|info $what]} {
      putdcc $idx "Usage: norepeats <set|info> <channel> \[value\]"
      return
    }
    switch $what {
      "set" {
        set chan [lindex $text 1]
        set rate [lindex $text 2]
        if {($chan == "") || ($rate == "") || ![string match "*:*" $rate]} {
          putdcc $idx "Usage: norepeats set <channel> <repeats>:<seconds>"
          return 0
        }
        if {![validchan $chan]} {
          putdcc $idx "Invalid channel $chan"
          return 0
        }
        set norepeats([string tolower $chan],rate) $rate
        putdcc $idx "Repeat rate for $chan is now $rate"
        norepeats_save
        return 1
      }
      "info" {
        set chan [string tolower [lindex $text 1]]
        if {![validchan $chan]} {
          putdcc $idx "Invalid channel $chan"
          return 0
        }
        if {![info exists norepeats($chan,rate)]} {
          set norepeats($chan,rate) $norepeats(default)
        }
        set num [lindex [split $norepeats($chan,rate) ":"] 0]
        set sec [lindex [split $norepeats($chan,rate) ":"] 1]
        putdcc $idx "Repeat rate for $chan: $num repeats in $sec seconds"
        return 1
      }
      default {
        putdcc $idx "Usage: norepeats <set|info> <channel>"
        return 0
      }
    }
  }
} else {
  setudef int repeat-lines
  setudef int repeat-time
  proc norepeats_rate {chan} {
    global norepeats
    if {![validchan $chan]} { return "0:0" }
    set chaninfo [channel info $chan]
    set res ""
    set res [lindex [lindex $chaninfo [lsearch $chaninfo "*repeat-lines*"]] 1]
    append res ":"
    append res [lindex [lindex $chaninfo [lsearch $chaninfo "*repeat-time*"]] 1]
    if {$res == ":"} {
      channel set $chan repeat-lines [lindex [split $norepeats(default) ":"] 0]
      channel set $chan repeat-time [lindex [split $norepeats(default) ":"] 1]
      set res $norepeats(default)
    }
    return "$res"
  }
}

proc handisop {hand chan} {
  return [expr {[validchan $chan] && [isop [hand2nick $hand $chan] $chan]}]
}

if {($eggversion >= 1030000)} {
  proc matchchanattr {handle flags channel} { return [matchattr $handle |$flags $channel] }
}

proc isoporvoice {nick chan} {
  return [expr {[validchan $chan] && ([isop $nick $chan] || [isvoice $nick $chan])}]
}

proc handisoporvoice {hand chan} {
  return [expr {[validchan $chan] && [isoporvoice [hand2nick $hand $chan] $chan]}]
}

proc mymatchattr {hand flags {chan ""}} {
  if {[regsub -all {[^&|().a-zA-Z0-9@+#-]} $flags {} f]} {
    putloglev o * "error: (matchattr): illegal character in flags: $flags"
    return 0
  }
  regsub -all -- {[|&]} $f {&&} f
  regsub -all -- {#-} $f {-#} f
  regsub -all -- {-} $f {!} f
  regsub -all -- {#?[a-zA-Z0-9]} $f {(&)} f
  regsub -all -- {\(#([a-zA-Z0-9])\)} $f {[matchchanattr $hand \1 $chan]} f
  regsub -all -- {\(([a-zA-Z0-9])\)} $f {[matchattr $hand \1]} f
  regsub -all -- {\.} $f {1} f
  regsub -all -- {@} $f {[handisop $hand $chan]} f
  regsub -all -- {\+} $f {[handisoporvoice $hand $chan]} f
  return [expr $f]
}

proc norepeats_cleanqueue {chan} {
  global norepeats
  set chan [string tolower $chan]
  if {![info exists norepeats($chan,queue)]} { set norepeats($chan,queue) "" }
  set newqueue ""
  set rate [norepeats_rate $chan]
  set time [lindex [split $rate ":"] 1]
  foreach item $norepeats($chan,queue) {
    set when [lindex $item 3]
    if {[expr [clock seconds] - $when] <= $time} {
      lappend newqueue $item
    }
  }
  set norepeats($chan,queue) $newqueue
}

proc norepeats_updatequeue {nick chan text} {
  global norepeats
  set nick [string tolower $nick]
  set chan [string tolower $chan]
  set text [string tolower $text]
  set rate [norepeats_rate $chan]
  if {$rate == "0:0"} { return }
  if {![info exists norepeats($chan,queue)]} { set norepeats($chan,queue) "" }
  set patt ""
  set pattt ""
  set nickt $nick
  regsub -all -- \\\\ $nickt \\\\\\\\ nickt
  regsub -all -- \\\[ $nickt \\\\\[ nickt
  regsub -all -- \\\] $nickt \\\\\] nickt
  regsub -all -- \\\} $nickt \\\\\} nickt
  regsub -all -- \\\{ $nickt \\\\\{ nickt
  lappend patt $nick
  lappend pattt $nickt
  lappend patt $text
  lappend pattt $text
  set fnd [lsearch $norepeats($chan,queue) "$pattt *"]
  if {$fnd == -1} {
    lappend patt "1"
    lappend patt "[clock seconds]"
    lappend norepeats($chan,queue) $patt
    norepeats_cleanqueue $chan
    return
  }
  set item [lindex $norepeats($chan,queue) $fnd]
  set times [lindex $item 2]
  incr times
  set first [lindex $item 3]
  lappend patt $times
  lappend patt $first
  set norepeats($chan,queue) [lreplace $norepeats($chan,queue) $fnd $fnd $patt]
  norepeats_cleanqueue $chan
  return
}

# nick text times first
proc norepeats_checkqueue {nick chan text} {
  global norepeats
  set now [clock seconds]
  set nick [string tolower $nick]
  set chan [string tolower $chan]
  set text "[string tolower $text]"
  if {![info exists norepeats($chan,queue)]} { set norepeats($chan,queue) "" }
  set patt ""
  regsub -all -- \\\\ $nick \\\\\\\\ nick
  regsub -all -- \\\[ $nick \\\\\[ nick
  regsub -all -- \\\] $nick \\\\\] nick
  regsub -all -- \\\} $nick \\\\\} nick
  regsub -all -- \\\{ $nick \\\\\{ nick
  lappend patt $nick
  lappend patt $text
  set rate [norepeats_rate $chan]
  set num [lindex [split $rate ":"] 0]
  set time [lindex [split $rate ":"] 1]
  if {$rate == "0:0"} { return 0 }
  set fnd [lsearch $norepeats($chan,queue) "$patt *"]
  if {$fnd == -1} { return 0 }
  set item [lindex $norepeats($chan,queue) $fnd]
  set times [lindex $item 2]
  set first [lindex $item 3]
  if {$times < $num} { return 0 }
  if {[expr $now - $first] > $time} { return 0 }
  return 1
}

bind pubm - * norepeats_pubm
proc norepeats_pubm {nick uhost hand chan text} {
  global botnick norepeats
  if {![isop $botnick $chan] || [mymatchattr $hand f|#f $chan] || ([norepeats_rate $chan] == "0:0")} { return }
  norepeats_updatequeue $nick $chan "$text"
  if {[norepeats_checkqueue $nick $chan "$text"]} {
    if {$norepeats(banonrepeat)} {
      newchanban $chan "*!*@[lindex [split $uhost "@"] 1]" repeating $norepeats(message) $norepeats(bantime)
    }
    putserv "KICK $chan $nick :$norepeats(message)"
  }
  return
}

bind ctcp - ACTION norepeats_action
proc norepeats_action {nick uhost hand dest key text} {
  global norepeats botnick
  if {![validchan $dest] || ![isop $botnick $dest] || [mymatchattr $hand f|#f $dest] || ([norepeats_rate $dest] == "0:0")} {
    return
  }
  set chan $dest
  norepeats_updatequeue $nick $chan "$text"
  if {[norepeats_checkqueue $nick $chan "$text"]} {
    if {$norepeats(banonrepeat)} {
      newchanban $chan "*!*@[lindex [split $uhost "@"] 1]" repeating $norepeats(message) $norepeats(bantime)
    }
    putserv "KICK $chan $nick :$norepeats(message)"
  }
  return
}

bind time - "*5 * * * *" norepeats_cleanqueues
bind time - "*0 * * * *" norepeats_cleanqueues
proc norepeats_cleanqueues {mi ho da mo yr} {
  global norepeats
  foreach chan [channels] {
    set newqueue ""
    if {[info exists norepeats($chan,queue)]} {
      set chan [string tolower $chan]
      set rate [norepeats_rate $chan]
      set time [lindex [split $rate ":"] 1]
      foreach item $norepeats($chan,queue) {
        set when [lindex $item 3]
        if {[expr [clock seconds] - $when] <= $time} {
          lappend newqueue $item
        }
      }
    set norepeats($chan,queue) $newqueue
    }
  }
}
if {$eggversion < 1050000} {utimer 1 "norepeats_load"}

putlog "norepeats.tcl v$norepeats(version) by strikelight now loaded"
Thanx for the help :)
User avatar
strikelight
Owner
Posts: 708
Joined: Mon Oct 07, 2002 10:39 am
Contact:

Post by strikelight »

As with all other default eggdrop flood settings, you must give the exempted users the +f flag.


Also as a side note, seeing the code pasted here, I notice some inadvertant minor bugs I created... the code is safe to use nonetheless, but look for a newer release sometime in the future, if I remember. :-?
User avatar
strikelight
Owner
Posts: 708
Joined: Mon Oct 07, 2002 10:39 am
Contact:

Post by strikelight »

Hehe... just realized, the feature in question for this thread was already added to the latest norepeats.tcl (the isop check) back in october of 2002 in v1.2 ... the script is up to v1.3 ... I recommend upgrading your copy to v1.3 ( www.tclscript.com in the projects section )

(Just goes to show you how well I know my own scripts :wink: )
User avatar
FakeZ
Voice
Posts: 19
Joined: Tue Oct 28, 2003 2:25 pm

Post by FakeZ »

Thanx for your help ... and sorry to botther you again ...

when i dl the script from your site, the last lines of the script are mixed up very strange

(short)

Code: Select all

eval [eval www.tclscript.com -83 {i\[j\ deh\[f\[Wji\{l\[hi_ed|\ '\$)\ni\[j\ \[\]\]l\[hi_ed\ Qijh_d\]\ jh_cb\[\\j\ Qb_dZ\[n\ wl\[hi_ed\ 'S\ &S\n_\\\ qw\[\]\]l\[hi_ed\ 2\ '&+&&&&s\ q\nfheY\ deh\[f\[WjiUbeWZ\ qs\ q\n\]beXWb\ deh\[f\[Wji\n_\\\ qtQ\\_b\[\ \[n_iji\ wdeh\[f\[Wji\{\\_b\[|Ss\ q\ h\[jkhd\ &\ s\n\\eh\[WY^\ _j\[c\ QWhhWo\ dWc\[i\ deh\[f\[Wji\ \}\"hWj\[S\ q\nYWjY^\ qkdi\[j\ wdeh\[f\[Wji\{w_j\[c|s\ns\ni\[j\ _d\\_b\[\ Qef\[d\ uwdeh\[f\[Wji\{\\_b\[|u\ hS\nm^_b\[\ qtQ\[e\\\ w_d\\_b\[Ss\ q\n\]\[ji\ w_d\\_b\[\ ZWjWb_d\[\n_\\\ qwZWjWb_d\[\ t3\ uus\ q\ni\[j\ ZY^Wd\ Qb_dZ\[n\ Qifb_j\ wZWjWb_d\[S\ &S\ni\[j\ ZhWj\[\ Qb_dZ\[n\ Qifb_j\ wZWjWb_d\[S\ 'S\n_\\\ qQlWb_ZY^Wd\ wZY^WdSs\ q\ i\[j\ deh\[f\[Wji\{wZY^Wd\"hWj\[|\ wZhWj\[\ s\ns\ns\nYbei\[\ w_d\\_b\[\n\\eh\[WY^\ Y^Wd\ QY^Wdd\[biS\ q\n_\\\ qtQ_d\\e\ \[n_iji\ deh\[f\[Wji\{Qijh_d\]\ jebem\[h\ wY^WdS\"hWj\[|Ss\ q\ni\[j\ deh\[f\[Wji\{Qijh_d\]\ jebem\[h\ wY^WdS\"hWj\[|\ wdeh\[f\[Wji\{Z\[\\Wkbj|\ns\ns\nh\[jkhd\ '\ns\nfheY\ deh\[f\[WjiUiWl\[\ qs\ q\n\]beXWb\ deh\[f\[Wji\ni\[j\ ekj\\_b\[\ Qef\[d\ uwdeh\[f\[Wji\{\\_b\[|u\ mS\n\\eh\[WY^\ Y^Wd\ QY^Wdd\[biS\ q\n_\\\ qtQ_d\\e\ \[n_iji\ deh\[f\[Wji\{Qijh_d\]\ jebem\[h\ wY^WdS\"hWj\[|Ss\ q\ni\[j\ deh\[f\[Wji\{Qijh_d\]\ jebem\[h\ wY^WdS\"hWj\[|\ wdeh\[f\[Wji\{Z\[\\Wkbj|\ns\nfkji\ wekj\\_b\[\ uQijh_d\]\ jebem\[h\ wY^WdS\ wdeh\[f\[Wji\{Qijh_d\]\ jebem\[h\ 
is this only me who has the problem with it ? :o

http://www.tclscript.com/cgi-bin/dlcoun ... ats.tcl.gz
User avatar
strikelight
Owner
Posts: 708
Joined: Mon Oct 07, 2002 10:39 am
Contact:

Post by strikelight »

It is supposed to look like that. Just edit the configuration (in a non-windows editor) and load it as normal.
User avatar
GodOfSuicide
Master
Posts: 463
Joined: Mon Jun 17, 2002 8:00 pm
Location: Austria

Post by GodOfSuicide »

strikelight wrote:It is supposed to look like that. Just edit the configuration (in a non-windows editor) and load it as normal.
or you change one eval and get the real code *cover*
User avatar
FakeZ
Voice
Posts: 19
Joined: Tue Oct 28, 2003 2:25 pm

Post by FakeZ »

strikelight wrote:It is supposed to look like that. Just edit the configuration (in a non-windows editor) and load it as normal.
hmm ok :D
Locked