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.

nospam1.7.2.tcl kick problem

Old posts that have not been replied to for several years.
Locked
f
forever79
Voice
Posts: 18
Joined: Sat Jun 21, 2003 6:12 pm

nospam1.7.2.tcl kick problem

Post by forever79 »

hi
this is a antispam tcl script code, this is work good with any problem...
my bot ban to user but not good kick, its kick to user because user was banned. i want to kick spam user with my special message than ban to it...

please help me


Code: Select all

#---------------------------------------------------------------------------------------
#- no!spam leaf - by wreck
#---------------------------------------------------------------------------------------
#- $Id: no.spam.leaf.tcl,v 1.6 2001/07/31 00:07:37 ppslim Exp $
#---------------------------------------------------------------------------------------

# If you want no!spam leaf to keep a log of all the spammers it bans, then set this to 1.
# Then right below it set the full path of the file you want to log spammers to.
set spam-leaf-log 1
set spam-leaf-file "/home/forever69/cirkinbot/scripts/leafspam"

# If you want no!spam leaf to echo the log into the partyline, set this to 1. Otherwise,
# 0 to disable. This can be used without using $spam-leaf-log.
set spam-leaf-party 1

#---------------------------------------------------------------------------------------
#- code begins here
#- please don't edit anything below, unless you know what you are doing.
#---------------------------------------------------------------------------------------

proc pushkick {chan nick rsn} {if {$chan != ""} {if {[onchan $nick $chan]} {putquick "KICK $chan $nick :$rsn"}} else {foreach chan [channels] {if {[onchan $nick $chan]} {puthelp "KICK $chan $nick :$rsn"}}}}
proc hs_ban {mask bot comment type time} {if {$time >= 0} {newban $mask $bot $comment $time} else {newban $mask $bot $comment}}
proc hs_chanban {chan mask bot comment type time} {if {$time >= 0} {newchanban $chan $mask $bot $comment $time} else {newchanban $chan $mask $bot $comment}}

#---------------------------------------------------------------------------------------

proc hs_log {type bot who where what why} {
  global spam-leaf-log spam-leaf-file spam-leaf-party
  if {${spam-leaf-log} || ${spam-leaf-party}} {
    set when [strftime "%D %r"]
    switch $type {
      c {set data "$when: $who said: (#$why) $what in: $where"}
      d {set data "$when: $who was sending: $what to people in: $where"}
      i {set data "$when: $who invited me to: $where"}
      m {set data "$when: $who messaged me with: (#$why) $what"}
      n {if {![string length $where]} {set where "me"} ; set data "$when: $who noticed: $where with: (#$why) $what"}
      p {set data "$when: $who parted from: $where with: (#$why) $what"}
    }
    if {${spam-leaf-log}} {
      set file [open ${spam-leaf-file} a+]
      puts $file $data
      close $file    
    }
    if {${spam-leaf-party}} {putlog "\[no!spam(\002$bot\002)\] $data"}
  }
}

proc hs_handle {bot type glbl nick from chan idx kick1 kick2 time mask rsn data} {
  if {[validchan $chan]} {
    if {$glbl} {
      hs_ban $mask $bot $rsn $type $time
      if {$kick1} {pushkick "" $nick $rsn}
    } else {
      hs_chanban $chan $mask $bot $rsn $type $time
      if {$kick1} {pushkick $chan $nick $rsn}
    }
  } else {
    hs_ban $mask $bot $rsn $type $time
    if {$kick2} {pushkick "" $nick $rsn}
  }
  hs_log $type $bot $from $chan $data $idx
}

proc hs_handler {from cmd arg} {
  hs_handle $from [lindex $arg 0] [lindex $arg 1] [lindex $arg 2] [lindex $arg 3] [lindex $arg 4] [lindex $arg 5] [lindex $arg 6] [lindex $arg 7] [lindex $arg 8] [lindex $arg 9] [lindex $arg 10] [lindex $arg 11]
  return 0
}

bind bot - spammer hs_handler

putlog "no!spam leaf :Loaded"





and
this a nospam1.7.1.tcl
________________________________________________________

Code: Select all

#---------------------------------------------------------------------------------------
#- no!spam - by PPSlim and wreck
#
#-   First beta and 1.6.3 by: PPSlim  (Nothing is real but the pain.)
#- 1.2.0 to 1.6.2 & 1.7.0 by: wreck   (Hi kids. Do you like violence?)
#
#- Works on all eggdrops 1.1.5 to 1.6.6.
#---------------------------------------------------------------------------------------
#- $Id: no.spam.tcl,v 1.24 2002/01/14 20:52:06 ppslim Exp $
#---------------------------------------------------------------------------------------
#- DCC commands: (see .desc file for full descriptions)
#
#-   +spam <type> <string>           Add spam string.
#-   -spam <type> <string>           Remove spam string.
#-   spams <type> [string]           View spam strings. (that match string)
#
#-   +spamchan <channel> [type]      Add spam channel. (add type to channel)
#-   -spamchan <channel> [type]      Remove spam channel. (remove type from channel)
#-   spamchans                       View spam channels.
#
#- Valid types can be found by typing DCC command name by itself,
#- strings can contain wildcards (* or ?) and case does not matter.
#---------------------------------------------------------------------------------------

# Set this to the full path of your spam channels file, this is where the channels that
# no!spam will monitor are kept. Don't manually create this. Do it in the partyline using
# the DCC commands +/-spamchan.
set spam-chan-file "/home/forever69/cirkinbot/scripts/spam.chans"

timer 20 restart

# Ignore channel, notice, part, and private messages that are under $spam-len characters in length.
set spam-len 1

# If the alleged spammer doesn't meet atleast this flag, ban them.
# (if o is given, anyone who has the +o flag on the bot won't be banned)
set spam-ignore-flag "m"

# If the alleged spammer doesn't meet atleast this channel flag, ban them.
# (if o is given, anyone who has the +o channel flag on the bot won't be banned)
# This maybe set to "" for no channel flag matching. Previous versions, emulated a setting of ""
set spam-ignore-cflag ""

# If the alleged spammer is an op in the channel, don't ban them?
set spam-ignore-opped 1

# If the alleged spammer is a voice in the channel, don't ban them?
set spam-ignore-voiced 1

# People who meet atleast this flag can use the no!spam DCC commands.
set spam-dcc-flag m

# If you want no!spam to keep a log of all the spammers it bans, then set this to 1.
# Then right below it set the full path of the file you want to log spammers to.
set spam-log 1
set spam-log-file "/home/forever69/cirkinbot/scripts/spammers"

#---------------------------------------------------------------------------------------
#- spam leaf bot(s)

# If you want this copy of no!spam to forward all spammers to another bot for processing
# then set this to 1. If you do not want to forward, then set this to 0.
#
# How this Works:  The hub will sit and monitor for spam like normal, but instead of
#                  banning the spammer itself, it will ask the leaf(s) to take care of it.
#
#                  The hub sends the leaf(s) all the appropriate settings to handle the
#                  bans. (such as ban time, ban reason, etc.) So you MUST continue
#                  setting up the rest of this TCL for the leaf to work properly.
#
#                  The only thing always processed by the hub will be $spam_file_warn.
#
# Please Note:  The hub is this bot, and the leaf(s) will being any bots running
#               no.spam.leaf.tcl. These do not have to do with botflags or sharing.
#
#               Though, the bots must be linked with the hub running no!spam 1.7.0
#               or later, and the leaf(s) using no.spam.leaf.tcl.
#
set spam-use-leaf 1

# The events and the leaf(s) that should process them.
# Leave any event set to "" to have the hub process it.
#
# Please Note:  You need to specify the leaf's botnet-nick, not its normal IRC nick.
#
set spam_leaf(chan) "cirkinbot"
set spam_leaf(file) "cirkinbot"
set spam_leaf(invt) "cirkinbot"
set spam_leaf(notc) "cirkinbot"
set spam_leaf(part) "cirkinbot"
set spam_leaf(priv) "cirkinbot"

# What should no!spam do if the leaf is not linked?
# 0 = Nothing, ignore the spam
# 1 = Process the spam itself
set spam-no-leaf 1

#---------------------------------------------------------------------------------------
#- channel messages

# If you want no!spam to monitor the channel messages (normal chat) in channels that you
# have marked as +c (see DCC commands) then set this to 1. Otherwise leave it set to 0,
# to keep it disabled.
#
# This works by you providing a list of search strings to look for. If one of these strings
# is found in anyone's (that doesn't meet $spam-ignore-flag) channel message then they will
# be banned accordingly.
#
set spam_check(chan) 0

# Set this to the full path of your channel spam strings file.
# You don't have to create one now, you can wait and do it using +/-spam.
#
# Please Note:  If you want to use the same spam strings for each type, then specify the
#               same file for each. Then use +/-spam on one, it will be applied to them all.
#
# Example of a channel spam file: (don't include the # of course)
#
# *join #*
# *http://www.*
# *first to join * gets a cookie*
#
set spam_file(chan) "/home/forever69/cirkinbot/scripts/spam.chan"

# Where should the ban be applied?
# 0 = Only ban globally if we have to
# 1 = Always ban globally
#
# Please Note:  This now works the same for each type.
#
set spam_global(chan) 1

# How should the hosts of the spammers be masked?
# 0 = *!user@host.domain
# 1 = *!*user@host.domain
# 2 = *!*@host.domain
# 3 = *!*user@*.domain
# 4 = *!*@*.domain
# 5 = nick!user@host.domain
# 6 = nick!*user@host.domain
# 7 = nick!*@host.domain
# 8 = nick!*user@*.domain
# 9 = nick!*@*.domain
# 10 = regular eggdrop mask
set spam_mask(chan) 2

# How long (in minutes) should the ban last?
# Set to 0, to make it a permanent ban. (not recommended)
# Set to -1, to use the default ban-time. (as set in your eggdrop.conf)
#
# Please Note:  No longer uses "" for default ban-time.
#
set spam_time(chan) 60

# Random ban messages to use.
#
# Please Note:  That using * as the first character in your message makes the ban sticky.
#
set spam_reason(chan) {
  "\00312Mass-Msg/Invite/Adv/Trojan Send\00312"
}

#---------------------------------------------------------------------------------------
#- part messages
#- Please Note:  This works exactly like above, except part messages are checked on
#-               channels that're marked as +p

set spam_check(part) 0

set spam_file(part) "/home/forever69/cirkinbot/scripts/spam.part"
set spam_mask(part) 0
set spam_time(part) 60
set spam_global(part) 1
set spam_reason(part) {
  "Part message abuse"
}

#---------------------------------------------------------------------------------------
#- notices
#- Please Note:  This works just like above except notices that are sent to your bot,
#-               and channel notices to channels that're marked as +n are monitored.

set spam_check(notc) 1

set spam_file(notc) "/home/forever69/cirkinbot/scripts/spam.notc"
set spam_mask(notc) 0
set spam_time(notc) 60
set spam_global(notc) 1
set spam_reason(notc) {
  "\00312Mass-Msg/Invite/Adv/Trojan Send\00312"
}

#---------------------------------------------------------------------------------------
#- invites

# If you want no!spam to ban people, who don't match $spam-ignore-flag, that invite your
# bot to a channel that it isn't on, set this to 1. Otherwise set it to 0, to disable.
#
# Please Note:  If the person who sent this notice left the channel they sent it from,
#               the ban will become global (only for $spam_time(invt)) despite $spam_global.
#
#               And since no message is sent with invites, you don't need to add
#               any search strings. You also don't need to mark any channels for
#               this, since it (the spammer or spam) won't necessarily be in one.
#
set spam_check(invt) 1

set spam_mask(invt) 0
set spam_time(invt) 60
set spam_global(invt) 1
set spam_reason(invt) {
  "\00312Mass-Msg/Invite/Adv/Trojan Send\00312"
}

#---------------------------------------------------------------------------------------
#- private messages

# If you want no!spam to monitor your bots private messages (/msg) for spam, then set
# this to 1, otherwise 0 to disable.
#
# Please Note:  This works just like invite checking, but you're required to store a list
#               of search strings. (see DCC commands)
#
set spam_check(priv) 1

set spam_file(priv) "/home/forever69/cirkinbot/scripts/spam.priv"
set spam_mask(priv) 0
set spam_time(priv) 60
set spam_global(priv) 1
set spam_reason(priv) {
  "\00312Mass-Msg/Invite/Adv/Trojan Send\00312"
}

#---------------------------------------------------------------------------------------
#- dcc sends

# If you want no!spam to monitor DCC sends that people send to your bot, then keep this
# set to 1, otherwise 0 to disable.
#
set spam_check(file) 1

# If you want no!spam to cycle channels that are marked as +d (see DCC commands) every
# $spam-file-interval minutes, so it can pick-up DCC-on-joins and ban the sender, then
# keep this set to 1.
#
# Also Note:  This can also help catch on-join/part spamming too.
#
set spam-file-cycle 1

# Interval to cycle channels. (in minutes)
set spam-file-interval 1

# Pick interval at random? (from $spam-file-lower to $spam-file-interval)
set spam-file-rand 0

# If using random intervals, set this to the lower radom limit. (mins)
#
# Example:  Set spam-file-interval 20, and spam-file-lower 10 would make the bot
#           cycle the channel every 10 to 20 mins rather than the original method,
#           1 to 20 minutes.
#
# Please Note:  To make it use the original random method, set this to 1, higher
#               than or the same as $spam-file-interval.
#
set spam-file-lower 10

# Skip cycling a channel if the bot isn't opped there?
set spam-cycle-noop 0

# Skip cycling a channel if the bot is the only op left?
set spam-cycle-onlyop 0

# Skip cycling a channel if it is opless?
set spam-cycle-juped 0

# Don't cycle a channel if there isn't atleast $spam-cycle-min nick(s) matching
# the $spam-cycle-flag flag, that are opped? (setting spam-cycle-min to 0 will disable this)
set spam-cycle-min 0
set spam-cycle-flag b

# If you want to keep a list of files that you don't want to ban for then set
# them here. You can safely set this to "" to block all files. Wildcards work.
set spam-file-safe {
  "motd.txt"
}

# If you want no!spam to send a notice to someone for sending a specific file out,
# then set it here.
#
# Example:
#
#   set spam_file_warn(life_stages.text.shs) {
#     "You were banned because you are infected with a virus."
#     "If you need help removing it, join #dmsetup."
#     "Please don't respond to this, I'm a bot."
#   }
#
# Please Note:  Each line is sent seperately, file name NEEDS to be lower case.
#

set spam_mask(file) 0
set spam_time(file) 60
set spam_global(file) 1
set spam_reason(file) {
  ""
}

#---------------------------------------------------------------------------------------
#- code begins here
#- please don't edit anything below, unless you know what you are doing.
#---------------------------------------------------------------------------------------

if {!$spam_check(chan) && !$spam_check(part) && !$spam_check(notc) && !$spam_check(invt) && !$spam_check(priv) && !$spam_check(file)} {
  putlog "Loading no!spam has been skipped. You have it disabled."
  return 0
}

proc ctrl:filter {str} {regsub -all -- {\003[0-9]{0,2}(,[0-9]{0,2})?|\017|\037|\002|\026|\006|\007} $str "" str ; return $str}
proc strcmp {one two} {if {[string tolower $one] == [string tolower $two]} {return 1} ; return 0}
proc llcmp {lsta lstb} {strcmp [llength $lsta] [llength $lstb]}
proc lremove {list str} {lreplace $list [lsearch -exact $list $str] [lsearch -exact $list $str]}
proc fulltype {type} {switch -- $type {c {return chan} d {return file} i {return invt} m {return priv} n {return notc} p {return part}}}

proc findnick {nick} {foreach chan [channels] {if {[onchan $nick $chan]} {return $chan}} ; return ""}
proc isbothost {uhost} {global botname ; return [strcmp $uhost $botname]}
proc pushkick {chan nick rsn} {if {$chan != ""} {if {[onchan $nick $chan]} {putserv "KICK $chan $nick :$rsn"}} else {foreach chan [channels] {if {[onchan $nick $chan]} {puthelp "KICK $chan $nick :$rsn"}}}}

if {$numversion <= 1032800} {proc isbotnick {nick} {global botnick ; return [strcmp $nick $botnick]}}

proc ns:ban {mask comment type} {global botnick spam_time ; if {[set time $spam_time([fulltype $type])] >= 0} {newban $mask $botnick $comment $time} else {newban $mask $botnick $comment}}
proc ns:chanban {chan mask comment type} {global botnick spam_time ; if {[set time $spam_time([fulltype $type])] >= 0} {newchanban $chan $mask $botnick $comment $time} else {newchanban $chan $mask $botnick $comment}}
proc ns:clrtmr {} {if {[string match *nospam_cycle* [set tms [timers]]]} {foreach t $tms {if {[string match *nospam_cycle* $t]} {killtimer [lindex [split $t] 2]}}}}
proc ns:rand {low high} {if {$low >= $high} {return [rand $high]} else {return [expr ([rand [expr $high - $low]]) + $low]}}

proc spamlen {spam} {global spam-len ; if {[string length $spam] > ${spam-len}} {return 1} ; return 0}

#- masktype{} is based upon the original by MC_8 (mc.moretools.tcl)
proc masktype {uhost type} {
  set masked [maskhost $uhost]
  set nick [string range $uhost 0 [expr [string first ! $uhost] - 1]]
  switch -- $type {
    0 {set ban "*[string range $uhost [string first ! $uhost] e]"}
    1 {set ban "*!*[string trimleft [string range $uhost [expr [string first ! $uhost] + 1] e] "~"]"}
    2 {set ban "*!*[string range $uhost [string first @ $uhost] e]"}
    3 {set ident [string range $uhost [expr [string first ! $uhost] + 1] [expr [string last @ $uhost] - 1]] ; set ban "*!*[string trimleft $ident ~][string range $masked [string first @ $masked] e]"}
    4 {set ban "*!*[string range $masked [string last @ $masked] e]"}
    5 {set ban $uhost}
    6 {set ident [string range $uhost [expr [string first ! $uhost] + 1] [expr [string last @ $uhost] - 1]] ; set ban "$nick!*[string trimleft $ident ~][string range $uhost [string last @ $uhost] e]"}
    7 {set ban "$nick!*[string range $uhost [string last @ $uhost] e]"}
    8 {set ident [string range $uhost [expr [string first ! $uhost] + 1] [expr [string last @ $uhost] - 1]] ; set ban "$nick!*[string trimleft $ident ~][string range $masked [string last @ $masked] e]"}
    9 {set ban "$nick!*[string range $masked [string last @ $masked] e]"}
    default {set ban "*!*[string range $uhost [string first @ $uhost] e]"}
  }
  set nnick [lindex [split $ban !] 0]
  set iident [string range $ban [expr [string first ! $ban] + 1] [expr [string last @ $ban] - 1]]
  set hhost [string range $ban [expr [string last @ $ban] + 1] e]
  if {$iident != [set temp [string range $iident [expr [string length $iident] - 9] e]]} {set iident *[string trimleft $temp *]}
  if {$hhost != [set temp [string range $hhost [expr [string length $hhost] - 63] e]]} {set hhost *[string trimleft $temp *]}
  return $nnick!$iident@$hhost
}

proc spamchan {chan type} {
  global spam_chans
  if {![info exists spam_chans]} {return 0}
  foreach cflags $spam_chans {
    set chanx [lindex [split $cflags +] 0]
    if {$type != ""} {if {[strcmp $chanx $chan] && [string match *$type* [lindex [split $cflags +] 1]]} {return 1}} else {if {[strcmp $chanx $chan]} {return 1}}
  }
  return 0
}

proc spamignore {who chan} {
  global spam-ignore-flag spam-ignore-cflag spam-ignore-opped spam-ignore-voiced
  if {[string match *!*@* $who]} {
    set hand [finduser $who]
    set nick [lindex [split $who !] 0]
    #set hand [nick2hand [set nick [lindex [split $who !] 0]]]
  } else {
    set nick [hand2nick [set hand $who]]
  }
  if {(${spam-ignore-cflag} != "") && ([validchan $chan])} {
    if {[matchattr $hand "${spam-ignore-flag}|${spam-ignore-cflag}" $chan]} {return 1}
  } else {
    if {[matchattr $hand ${spam-ignore-flag}]} {return 1}
  }
  if {[validchan $chan]} {
    if {(${spam-ignore-opped} && [isop $nick $chan]) || (${spam-ignore-voiced} && [isvoice $nick $chan])} {return 1}
  }
  return 0
}

proc spamsyntax {idx cmd} {
  switch -- $cmd {
    +spam {putidx $idx "Usage: +spam <type> <string>" ; putidx $idx "Valid types: c (chan), m (priv msg), n (notices), p (parts) or a for all."}
    -spam {putidx $idx "Usage: -spam <type> <string>" ; putidx $idx "Valid types: c (chan), m (priv msg), n (notices), p (parts) or a for all."}
    spams {putidx $idx "Usage: spams <type> \[string\]" ; putidx $idx "Valid types: c (chan), m (priv msg), n (notices), p (parts)."}
    +spamchan {putidx $idx "Usage: +spamchan <#channel> \[type\]" ; putidx $idx "Valid types: c (chan), d (dcc-cycle), n (notices), p (parts)."}
    -spamchan {putidx $idx "Usage: -spamchan <#channel> \[type\]" ; putidx $idx "Valid types: c (chan), d (dcc-cycle), n (notices), p (parts)."}
  }
}

#---------------------------------------------------------------------------------------
#- spam string file procs

proc sf_write {type data} {
  global spam_file
  set file [open $spam_file($type) w]
  foreach spam $data {puts $file $spam}
  close $file
}

proc sf_read {type} {
  global spam_file spam_matches
  if {[file exists $spam_file($type)]} {
    set file [open $spam_file($type) r]
    set size [file size $spam_file($type)]
    set data [split [read $file $size] \n]
    close $file
    if {[llength $data]} {set spam_matches($type) $data}
  }
}

proc sf_matches {type} {
  global spam_matches
  if {[info exists spam_matches($type)]} {return $spam_matches($type)}
  return ""
}

proc sf_append {type data} {
  global spam_matches spam_file
  set type [fulltype $type]
  if {[info exists spam_matches($type)]} {if {[lsearch -exact $spam_matches($type) $data] != -1} {lappend spam_matches($type) $data}} else {set spam_matches($type) [list $data]}
  set file [open $spam_file($type) a+]
  puts $file $data
  close $file
}

proc sf_remove {type item} {
  global spam_matches spam_file
  if {[llength [sf_matches [set type [fulltype $type]]]]} {if {![llcmp $spam_matches($type) [set spam_matches($type) [lremove $spam_matches($type) $item]]]} {sf_write $type $spam_matches($type) ; return 1}}
  return 0
}

#---------------------------------------------------------------------------------------
#- spam chan file procs

proc scf_write {} {
  global spam-chan-file spam_chans
  set file [open ${spam-chan-file} w]
  puts $file $spam_chans
  close $file
}

proc scf_read {} {
  global spam-chan-file spam_chans
  set file [open ${spam-chan-file} r]
  set size [file size ${spam-chan-file}]
  set data [split [read $file $size]]
  close $file
  if {[llength $data]} {set spam_chans $data}
}

proc scf_entry {chan} {
  global spam_chans
  foreach cflags $spam_chans {if {[strcmp [lindex [split $cflags +] 0] $chan]} {return $cflags}}
  return ""
}

proc scf_addtype {old new} {
  global spam_chans
  set chan [string tolower [lindex [split $old +] 0]]
  if {![string length [set new [string tolower [string trimleft $new +]]]]} {return 0}
  if {![info exists spam_chans]} {set spam_chans [list "$chan\+$new"] ; return 1}
  if {![string length [set temp [string tolower [lindex [split $old +] 1]]]]} {if {[llcmp $spam_chans [set spam_chans [lremove $spam_chans $old]]]} {return 0} else {lappend spam_chans "$chan\+$new" ; return 1}}
  foreach i [split $new {}] {if {![string match *$i* $temp]} {append temp $i}}
  if {[string length $temp]} {
    if {[set i [lsearch -exact $spam_chans $old]] != -1} {
      set spam_chans [lreplace $spam_chans $i $i "$chan\+$temp"]
      return 1
    }
  }
  return 0
}

proc scf_remtype {old del} {
  global spam_chans
  if {$old == ""} {return 0}
  set chan [string tolower [lindex [split $old +] 0]]
  set temp [string tolower [lindex [split $old +] 1]]
  if {[string length [set del [string tolower [string trimleft $del -]]]]} {
    set r 0
    foreach i [split $del {}] {if {[string match *$i* $temp]} {regsub $i $temp "" temp ; incr r}}
    if {$r} {
      if {[set i [lsearch -exact $spam_chans $old]] != -1} {
        set spam_chans [lreplace $spam_chans $i $i "${chan}+${temp}"]
        scf_write
        return 1
      }
    }
  }
  return 0
}

proc scf_append {chan flags} {
  global spam_chans
  set chan [string tolower $chan]
  if {[info exists spam_chans]} {lappend spam_chans "${chan}+${flags}"} else {set spam_chans [list "${chan}+${flags}"]}
  scf_write
}

proc scf_remove {chan} {
  global spam_chans
  set temp ""
  foreach cflags $spam_chans {if {[strcmp [lindex [split $cflags +] 0] $chan]} {set temp $cflags ; break}}
  if {$temp != ""} {if {![llcmp $spam_chans [set spam_chans [lremove $spam_chans $temp]]]} {scf_write ; return 1}}
  return 0
}

#---------------------------------------------------------------------------------------
#- dcc-on-join procs

if {$spam_check(file) && ${spam-file-cycle}} {
  proc getchankey {chan} {
    set chanm [split [getchanmode $chan]]
    set modes [lindex $chanm 0]
    if {[string match *k* $modes]} {if {[string match *l* $modes]} {set key [lindex $chanm 2]} else {set key [lindex $chanm 1]}} else {set key ""}
    return $key
  }

  proc cyclechan {chan} {
    global spam-cycle-noop spam-cycle-onlyop spam-cycle-juped spam-cycle-min spam-cycle-flag
    if {![botonchan $chan] || (${spam-cycle-noop} && ![botisop $chan])} {return 0}
    set ops 0
    if {${spam-cycle-min}} {
      foreach nick [chanlist $chan ${spam-cycle-flag}] {if {[isop $nick $chan]} {incr ops}}
      if {$ops <= ${spam-cycle-min}} {return 0}
    }
    set ops 0
    foreach nick [chanlist $chan] {if {[isop $nick $chan]} {incr ops}}
    if {${spam-cycle-juped} && !$ops} {return 0}
    if {${spam-cycle-onlyop} && ($ops == 1) && [botisop $chan]} {return 0}
    if {[set key [getchankey $chan]] != ""} {puthelp "JOIN $chan :$key"} else {puthelp "JOIN $chan"}
    puthelp "PART $chan"
  }

  proc nospam_ctimer {} {
    global spam-file-cycle spam-file-interval spam-file-rand spam-file-lower
    ns:clrtmr
    if {${spam-file-cycle}} {
      if {${spam-file-rand}} {set i [ns:rand ${spam-file-lower} ${spam-file-interval}]} else {set i ${spam-file-interval}}
      timer $i nospam_cycle
    }
  }

  proc nospam_cycle {} {
    global spam_chans
    foreach cflags $spam_chans {
      set cflags [split $cflags +]
      if {[string match *d* [lindex $cflags 1]]} {cyclechan [lindex $cflags 0]}
    }
    nospam_ctimer
  }
}

#---------------------------------------------------------------------------------------
#- spammer logger

proc sl_write {type who where what why} {
  global spam-log spam-log-file
  if {${spam-log}} {
    set file [open ${spam-log-file} a+]
    set when [strftime "%D %r"]
    switch $type {
      c {puts $file "$when: $who said: (#$why) $what in: $where"}
      d {puts $file "$when: $who was sending: $what to people in: $where"}
      i {puts $file "$when: $who invited me to: $where"}
      m {puts $file "$when: $who messaged me with: (#$why) $what"}
      n {if {![string length $where]} {set where "me"} ; puts $file "$when: $who noticed: $where with: (#$why) $what"}
      p {puts $file "$when: $who parted from: $where with: (#$why) $what"}
    }
    close $file
  }
}

#---------------------------------------------------------------------------------------
#- event handling

proc spamhandle {type nick from chan idx kick1 kick2 data} {
  global spam_global spam-use-leaf spam-no-leaf spam_leaf spam_time spam_reason spam_mask
  set ftype [fulltype $type]
  set rsn [lindex $spam_reason($ftype) [rand [llength $spam_reason($ftype)]]]
  set mask [masktype $from 2]
  if {[info exists spam-use-leaf] && ${spam-use-leaf}} {if {[set leaf $spam_leaf($ftype)] == ""} {set method norm} elseif {[islinked $leaf]} {set method leaf} else {if {[info exists spam-no-leaf] && ${spam-no-leaf}} {set method norm} else {set method null}}}
  if {![info exists method]} {set method norm}
  switch $method {
    norm {
      if {[validchan $chan]} {if {$spam_global($ftype)} {ns:ban $mask $rsn $type ; if {$kick1} {pushkick "" $nick $rsn}} else {ns:chanban $chan $mask $rsn $type ; if {$kick1} {pushkick $chan $nick $rsn}}} else {ns:ban $mask $rsn $type ; if {$kick2} {pushkick "" $nick $rsn}}
      sl_write $type $from $chan $data $idx
    }
    leaf {putbot $leaf "spammer [list $type $spam_global($ftype) $nick $from $chan $idx $kick1 $kick2 $spam_time($ftype) $mask "$rsn" "$data"]"}
    null {return 0}
  }
}

#---------------------------------------------------------------------------------------
#- event monitoring

set nospam-loaded ""

catch {unbind raw - PRIVMSG chan:abuse}
catch {rename chan:abuse ""}
catch {unbind msgm - * priv:abuse}
catch {rename priv:abuse ""}

if {$spam_check(chan) || $spam_check(priv)} {
  proc msgs:abuse {from key arg} {
    global spam_check
    set arg [split $arg]
    set where [lindex $arg 0]
    if {![isbothost $from] && ![spamignore $from $where]} {
      if {$spam_check(chan) && [spamchan $where c]} {set type chan} elseif {$spam_check(priv) && [isbotnick $where]} {set type priv}
      if {[info exists type] && [llength [set matches [sf_matches $type]]]} {
        if {[spamlen [set text [ctrl:filter [string tolower [string trimleft [lrange $arg 1 end] :]]]]]} {
          set nick [lindex [split $from !] 0]
          set idx 0
          foreach match $matches {
            incr idx
            if {[string match [string tolower $match] $text]} {if {$type == "chan"} {spamhandle c $nick $from $where $idx 1 1 $text} else {spamhandle m $nick $from $where $idx 1 0 $text} ; break}
          }
        }
      }
    }
    return 0
  }
  bind raw - PRIVMSG msgs:abuse
  if {$spam_check(chan)} {append nospam-loaded c}
  if {$spam_check(priv)} {append nospam-loaded m}
} else {
  catch {unbind raw - PRIVMSG msgs:abuse}
  catch {rename msgs:abuse ""}
}

if {$spam_check(file)} {
  proc file:abuse {nick uhost hand dest key arg} {
    global spam-file-safe spam_file_warn
    if {![isbothost [set from "$nick!$uhost"]] && ![spamignore $hand [set chan [findnick $nick]]]} {
      set arg [split $arg]
      if {[strcmp [lindex $arg 0] send]} {
        set file [string tolower [lindex $arg 1]]
        if {[info exists spam-file-safe]} {foreach safe ${spam-file-safe} {if {[string match [string tolower $safe] $file]} {return 0}}}
        spamhandle d $nick $from $chan "" 1 0 $file
        if {[info exists spam_file_warn([string tolower $file])]} {foreach msg $spam_file_warn([string tolower $file]) {puthelp "NOTICE $nick :$msg"}}
      }
    }
    return 0
  }
  bind ctcp - DCC file:abuse
  append nospam-loaded d
  if {${spam-file-cycle}} {nospam_ctimer}
} else {
  catch {unbind ctcp - DCC file:abuse}
  catch {rename file:abuse ""}
  ns:clrtmr
}

if {$spam_check(invt)} {
  proc invt:abuse {from key arg} {
    if {![isbothost $from] && ![spamignore $from [set chan [findnick [set nick [lindex [split $from !] 0]]]]]} {
      if {![validchan [string trimleft [lindex [split $arg] 1] :]]} {spamhandle i $nick $from $chan "" 1 0 ""}
    }
    return 0
  }
  bind raw - INVITE invt:abuse
  append nospam-loaded i
} else {
  catch {unbind raw - INVITE invt:abuse}
  catch {rename invt:abuse ""}
}

if {$spam_check(notc)} {
  proc notc:abuse {from key arg} {
    if {([llength [set arg [split $arg]]] > 1) && [string match *!*@* $from]} {
      if {![isbothost $from] && ![spamignore $from [set chan [lindex $arg 0]]]} {
        if {[spamchan $chan n] || [isbotnick $chan]} {
          if {[llength [set matches [sf_matches notc]]]} {
            if {[spamlen [set nmsg [ctrl:filter [string trimleft [string tolower [join [lrange $arg 1 end]]] :]]]]} {
              if {[isbotnick $chan]} {set chan ""}
              set nick [lindex [split $from !] 0]
              set idx 0
              foreach match $matches {
                incr idx
                if {[string match [string tolower $match] $nmsg]} {spamhandle n $nick $from $chan $idx 1 1 $nmsg ; break}
              }
            }
          }
        }
      }
    }
    return 0
  }
  bind raw - NOTICE notc:abuse
  append nospam-loaded n
} else {
  catch {unbind raw - NOTICE notc:abuse}
  catch {rename notc:abuse ""}
}

if {$spam_check(part)} {
  proc part:abuse {from key arg} {
    if {($key == "PART") && ([llength [set arg [split $arg]]] > 2) && [strcmp [string index [lindex $arg 1] 0] :]} {
      if {[spamchan [set chan [lindex $arg 0]] p]} {
        if {![isbothost $from] && ![spamignore $from $chan]} {
          if {[llength [set matches [sf_matches part]]]} {
            if {[spamlen [set pmsg [ctrl:filter [string trimleft [string tolower [join [lrange $arg 1 end]]] :]]]]} {
              set idx 0
              foreach match $matches {
                incr idx
                if {[string match [string tolower $match] $pmsg]} {spamhandle p $nick $from $chan $idx 0 0 $pmsg ; break}
              }
            }
          }
        }
      }
    }
    return 0
  }
  bind raw - PART part:abuse
  append nospam-loaded p
} else {
  catch {unbind raw - PART part:abuse}
  catch {rename part:abuse ""}
}

#---------------------------------------------------------------------------------------
#- dcc commands

proc dcc:+spam {hand idx arg} {
  putcmdlog "#$hand# +spam $arg"
  if {([llength [set arg [split $arg]]] < 2) || ([string length [set type [string tolower [lindex $arg 0]]]] > 1)} {spamsyntax $idx "+spam" ; return 0}
  if {[string length [set spam [join [lrange $arg 1 end]]]] <= 2} {putidx $idx "Try a bigger search string than that." ; return 0}
  if {$type == "a"} {
    sf_append c $spam ; sf_append n $spam ; sf_append p $spam ; sf_append m $spam
    putidx $idx "Successfully added spam string ${spam} to all appropriate types."
  } else {
    sf_append $type $spam
    putidx $idx "Successfully added [fulltype $type] spam string $spam"
  }
  return 0
}

proc dcc:-spam {hand idx arg} {
  putcmdlog "#$hand# -spam $arg"
  if {([llength [set arg [split $arg]]] < 2) || ([string length [set type [string tolower [lindex $arg 0]]]] > 1)} {spamsyntax $idx "-spam" ; return 0}
  set spam [join [lrange $arg 1 end]]
  if {$type == "a"} {
    sf_remove c $spam ; sf_remove n $spam ; sf_remove p $spam ; sf_remove m $spam
    putidx $idx "Removed spam string ${spam} from all appropriate types."
  } else {
    if {[sf_remove $type $spam]} {
      putidx $idx "Removed [fulltype $type] spam string $spam"
    } else {
      putidx $idx "Unable to remove [fulltype $type] spam string $spam"
    }
  }
  return 0
}

proc dcc:spams {hand idx arg} {
  putcmdlog "#$hand# spams $arg"
  if {![llength [set arg [split $arg]]]} {spamsyntax $idx "spams" ; return 0}
  set type [fulltype [string tolower [lindex $arg 0]]]
  if {[llength [set spams [sf_matches $type]]]} {
    if {[llength $arg] == 1} {
      putidx $idx ",---- [llength $spams] ${type} spam string(s)"
      foreach spam $spams {putidx $idx "| $spam"}
      putidx $idx "`---- end"
    } else {
      set string [join [lrange $arg 1 end]]
      putidx $idx ",---- ${type} spam string(s), that match: $string"
      foreach spam $spams {if {[string match [string tolower $string] [string tolower $spam]]} {putidx $idx "| $spam"}}
      putidx $idx "`---- end"
    }
  } else {
    putidx $idx "You have no ${type} spam strings."
  }
  return 0
}

proc dcc:+spamchan {hand idx arg} {
  putcmdlog "#$hand# +spamchan $arg"
  if {![llength [set arg [split $arg]]]} {spamsyntax $idx "+spamchan" ; return 0}
  set chan [lindex $arg 0]
  if {[llength $arg] == 1} {
    if {[spamchan $chan ""]} {
      putidx $idx "I am already monitoring $chan"
    } else {
      scf_append $chan cdnp
      putidx $idx "Successfully added spam channel ${chan}+cdnp"
    }
  } else {
    set flags [string tolower [lindex $arg 1]]
    if {[spamchan $chan ""]} {
      set cflags [scf_entry $chan]
      if {[scf_addtype $cflags $flags]} {
        scf_write
        putidx $idx "Successfully changed ${cflags} to [scf_entry $chan]"
      } else {
        putidx $idx "Unable to make any changes to $chan"
      }
    } else {
      scf_append $chan $flags
      putidx $idx "Successfully added spam channel ${chan}+${flags}"
    }
  }
  return 0
}

proc dcc:-spamchan {hand idx arg} {
  global spam_chans
  putcmdlog "#$hand# -spamchan $arg"
  if {![llength [set arg [split $arg]]]} {spamsyntax $idx "-spamchan" ; return 0}
  if {![info exists spam_chans] || ([llength $spam_chans] < 1)} {putidx $idx "No spam channels to remove from." ; return 0}
  set chan [lindex $arg 0]
  if {[llength $arg] == 1} {
    if {[scf_remove $chan]} {putidx $idx "Successfully removed spam channel $chan"} else {putidx $idx "Unable to remove spam channel $chan"}
  } else {
    set flags [string tolower [lindex $arg 1]]
    set cflags [scf_entry $chan]
    if {[scf_remtype $cflags $flags]} {putidx $idx "Successfully changed ${cflags} to [scf_entry $chan]"} else {putidx $idx "Unable to make any changes to $chan"}
  }
  return 0
}

proc dcc:spamchans {hand idx arg} {
  global spam_chans spam_check
  putcmdlog "#$hand# spamchans $arg"
  if {![info exists spam_chans] || ([llength $spam_chans] < 1)} {putidx $idx "No spam channels to list." ; return 0}
  putidx $idx ",---- spam channels \[types\] \[#channel\]"
  foreach cflags $spam_chans {
    set type [lindex [split $cflags +] 1]
    if {$spam_check(invt)} {append type i}
    if {$spam_check(priv)} {append type m}
    putidx $idx "| [format "%-11.11s %s" $type [lindex [split $cflags +] 0]]"
  }
  putidx $idx "`---- end"
  return 0
}

bind dcc ${spam-dcc-flag} +spam dcc:+spam
bind dcc ${spam-dcc-flag} -spam dcc:-spam
bind dcc ${spam-dcc-flag} spams dcc:spams
bind dcc ${spam-dcc-flag} +spamchan dcc:+spamchan
bind dcc ${spam-dcc-flag} -spamchan dcc:-spamchan
bind dcc ${spam-dcc-flag} spamchans dcc:spamchans

#---------------------------------------------------------------------------------------
#- load our spamfile buffers and we're done

catch {unset spam_matches(chan) spam_matches(notc) spam_matches(part) spam_matches(priv) spam-chan-matches spam-notc-matches spam-part-matches spam-priv-matches spam_chans}

if {$spam_check(chan)} {sf_read chan}
if {$spam_check(notc)} {sf_read notc}
if {$spam_check(part)} {sf_read part}
if {$spam_check(priv)} {sf_read priv}
if {[file exists ${spam-chan-file}]} {scf_read}

putlog "no!spam [lindex [set nospam-ver {010702 1.7.2}] 1] \+${nospam-loaded} :Loaded"
#0107020F
User avatar
Alchera
Revered One
Posts: 3344
Joined: Mon Aug 11, 2003 12:42 pm
Location: Ballarat Victoria, Australia
Contact:

Post by Alchera »

You set your custom message in nospam1.71.tcl.

Find this line and edit what you wish within the quotation marks.

Code: Select all

# Random ban messages to use. 
# 
# Please Note:  That using * as the first character in your message makes the ban sticky. 
# 
set spam_reason(chan) { 
  "\00312Mass-Msg/Invite/Adv/Trojan Send\00312" 
}
Add [SOLVED] to the thread title if your issue has been.
Search | FAQ | RTM
Locked