BT.CloneScan.tcl 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #########################################################################
  2. ## BlackTools - The Ultimate Channel Control Script ##
  3. ## One TCL. One smart Eggdrop ##
  4. #########################################################################
  5. ########################### CLONESCAN TCL ###########################
  6. #########################################################################
  7. ## ##
  8. ## BlackTools : http://blacktools.tclscripts.net ##
  9. ## Bugs report : http://www.tclscripts.net/ ##
  10. ## Online Help : irc://irc.undernet.org/tcl-help ##
  11. ## #TCL-HELP / UnderNet ##
  12. ## You can ask in english or romanian ##
  13. ## ##
  14. #########################################################################
  15. proc scanner:process {nick host hand chan chan1 type} {
  16. global botnick black
  17. set cmd_status [btcmd:status $chan $hand "clonescan" 0]
  18. if {$cmd_status == "1"} {
  19. return
  20. }
  21. array set clones [list]
  22. if {$chan == ""} {
  23. switch $type {
  24. 0 {
  25. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "clonescan"
  26. }
  27. 1 {
  28. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "clonescan"
  29. }
  30. 2 {
  31. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "clonescan"
  32. }
  33. }
  34. return 0
  35. }
  36. if {![validchan $chan]} {
  37. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  38. return
  39. }
  40. if {![onchan $botnick $chan]} {
  41. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  42. return
  43. }
  44. blacktools:tell $nick $host $hand $chan $chan1 clonescan.11 none
  45. clonescan:act $chan $nick $hand $chan1 $type 0
  46. }
  47. proc clonescan:timer {} {
  48. global black
  49. set channels ""
  50. set type 1
  51. foreach chan [channels] {
  52. if {[validchan $chan]} {
  53. if {[setting:get $chan clonescan]} {
  54. lappend channels $chan
  55. }
  56. }
  57. }
  58. if {$channels != ""} {
  59. clonescan:act $channels "nick" "" "chan1" $type 0
  60. set clonescan_time [time_return_minute $black(clonescantime)]
  61. timer $clonescan_time clonescan:timer
  62. }
  63. }
  64. proc clonescan:act {channels nick hand chan1 type counter} {
  65. global black
  66. set chan [lindex $channels $counter]
  67. set cc [expr $counter + 1]
  68. set found_clones 0
  69. array set clones [list]
  70. if {$chan != ""} {
  71. set replace(%chan%) $chan
  72. set getlang [string tolower [setting:get $chan lang]]
  73. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  74. if {[setting:get $chan clonescan-maxclone] == "0" || [setting:get $chan clonescan-maxclone] == ""} {
  75. set maxclone $black(maxclone)
  76. } else { set maxclone [setting:get $chan clonescan-maxclone] }
  77. if {$maxclone < "2"} { return }
  78. putlog "\[BT\] Scaning for clones on $chan.."
  79. foreach user [chanlist $chan] {
  80. set host [string tolower [lindex [split [getchanhost $user $chan] @] 1]]
  81. set findword [prot:findword $chan "CLONESCAN-EXCEPT" $host]
  82. if {$findword == "1"} {
  83. continue
  84. }
  85. if {[string match "*undernet.org*" $host]} {
  86. continue
  87. }
  88. set replace(%host%) $host
  89. lappend clones($host) $user
  90. }
  91. foreach clone [array names clones] {
  92. set userlist [join $clones($clone)]
  93. if {[llength [split $userlist]] >= $maxclone} {
  94. set found_clones 1
  95. if {$type == "0"} {
  96. blacktools:tell $nick "" $hand $chan $chan1 clonescan.10 "[llength [split $userlist]] $clone [join $clones($clone) ", "]"
  97. }
  98. if {$type == "1"} {
  99. set replace(%msg.1%) [llength [split $userlist]]
  100. set replace(%msg.2%) $clone
  101. set replace(%msg.7%) [join $clones($clone) ", "]
  102. set replace(%chan%) $chan
  103. set message [string map [array get replace] $black(say.$getlang.clonescan.10)]
  104. putserv "NOTICE @$chan :$message"
  105. set mask "*!*@$clone"
  106. blacktools:banner:2 $nick "CLONESCAN" $chan $chan1 $mask "0"
  107. }
  108. }
  109. }
  110. }
  111. if {([lindex $channels $cc] != "") && ($type == "1")} {
  112. utimer 5 [list clonescan:act $channels $nick $hand $chan1 $type $cc]
  113. }
  114. if {($type == "0") && ($found_clones == "0")} {
  115. blacktools:tell $nick "" $hand $chan $chan1 clonescan.2 none
  116. }
  117. }
  118. ##############
  119. #########################################################################
  120. ## END ##
  121. #########################################################################