BT.Idle.tcl 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. #########################################################################
  2. ## BlackTools - The Ultimate Channel Control Script ##
  3. ## One TCL. One smart Eggdrop ##
  4. #########################################################################
  5. ############################# IDLE 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 antidlepublic {nick host hand chan arg} {
  16. global black lastbind
  17. set type 0
  18. set chan1 "$chan"
  19. set why [lindex [split $arg] 0]
  20. set user [lindex [split $arg] 1]
  21. set host [lindex [split $arg] 2]
  22. if {[regexp {^[&#]} $why] && [matchattr $hand nmo|M $why]} {
  23. set chan "$why"
  24. set why [lindex [split $arg] 1]
  25. set user [lindex [split $arg] 2]
  26. set host [lindex [split $arg] 3]
  27. }
  28. set return [blacktools:mychar $lastbind $hand]
  29. if {$return == "0"} {
  30. return
  31. }
  32. antidle:process $why $type $user $host $nick $hand $chan $chan1
  33. }
  34. proc antidle:process {why type user host nick hand chan chan1} {
  35. global botnick black
  36. set show_user $user
  37. set flag "-|+f"
  38. set handle [nick2hand $user]
  39. if {[matchattr $hand q]} {
  40. blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  41. return
  42. }
  43. if {[matchattr $hand -|q $chan]} {
  44. blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  45. return
  46. }
  47. if {($why == "") && ($type == "0")} {
  48. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
  49. return
  50. }
  51. if {($why == "") && ($type == "1")} {
  52. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
  53. return
  54. }
  55. if {($why == "") && ($type == "2")} {
  56. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "idle"
  57. return
  58. }
  59. if {![validchan $chan]} {
  60. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  61. return
  62. }
  63. if {![onchan $botnick $chan]} {
  64. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  65. return
  66. }
  67. switch $why {
  68. +o {
  69. setting:set $chan +idleop ""
  70. blacktools:tell $nick $host $hand $chan $chan1 idle.11 none
  71. foreach tmr [timers] {
  72. if {[string match "*antidle:module*" [join [lindex $tmr 1]]]} {
  73. return
  74. }
  75. }
  76. set idle_time [time_return_minute $black(idleinterval)]
  77. timer $idle_time antidle:module
  78. }
  79. -o {
  80. setting:set $chan -idleop ""
  81. blacktools:tell $nick $host $hand $chan $chan1 idle.12 none
  82. }
  83. +v {
  84. setting:set $chan +idlevoice ""
  85. blacktools:tell $nick $host $hand $chan $chan1 idle.14 none
  86. foreach tmr [timers] {
  87. if {[string match "*antidle:module*" [join [lindex $tmr 1]]]} {
  88. return
  89. }
  90. }
  91. set idle_time [time_return_minute $black(idleinterval)]
  92. timer $idle_time antidle:module
  93. }
  94. -v {
  95. setting:set $chan -idlevoice ""
  96. blacktools:tell $nick $host $hand $chan $chan1 idle.15 none
  97. }
  98. add {
  99. if {$user == ""} {
  100. if {$type == "0"} {
  101. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
  102. return
  103. }
  104. if {$type == "1"} {
  105. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
  106. }
  107. return
  108. }
  109. if {[onchan $user $chan]} {
  110. set getuser [nick2hand $user]
  111. if {$getuser != "*"} {
  112. set user $getuser
  113. }
  114. }
  115. if {[validuser $user]} {
  116. chattr $user $flag $chan
  117. blacktools:tell $nick $host $hand $chan $chan1 idle.18 $show_user
  118. } else {
  119. set hosts [getchanhost $user $chan]
  120. set uhost "*!*@[lindex [split $hosts @] 1]"
  121. adduser $user $uhost
  122. chattr $user $flag $chan
  123. blacktools:tell $nick $host $hand $chan $chan1 idle.19 "$show_user $uhost"
  124. }
  125. }
  126. list {
  127. set list [userlist "-|f" $chan]
  128. blacktools:tell $nick $host $hand $chan $chan1 idle.20 "none"
  129. if {$list == ""} {set list "NONE"}
  130. blacktools:tell $nick $host $hand $chan $chan1 idle.21 "$list"
  131. }
  132. del {
  133. if {$user == ""} {
  134. if {$type == "0"} {
  135. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
  136. return
  137. }
  138. if {$type == "1"} {
  139. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
  140. }
  141. return
  142. }
  143. if {[onchan $user $chan]} {
  144. set getuser [nick2hand $user]
  145. if {$getuser != "*"} {
  146. set user $getuser
  147. }
  148. }
  149. if {![validuser $user]} {
  150. blacktools:tell $nick $host $hand $chan $chan1 idle.22 "$show_user"
  151. return
  152. }
  153. if {![matchattr $user "-|f" $chan]} {
  154. blacktools:tell $nick $host $hand $chan $chan1 idle.23 "$show_user"
  155. return
  156. }
  157. chattr $user -|-f $chan
  158. blacktools:tell $nick $host $hand $chan $chan1 idle.24 "$show_user"
  159. }
  160. default {
  161. if {$type == "0"} {
  162. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
  163. return
  164. }
  165. if {$type == "1"} {
  166. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
  167. }
  168. }
  169. }
  170. }
  171. proc antidle:module {} {
  172. global black
  173. set channels ""
  174. foreach chan [channels] {
  175. if {[setting:get $chan idleop] || [setting:get $chan idlevoice]} {
  176. lappend channels $chan
  177. }
  178. }
  179. if {$channels != ""} {
  180. idlewhois $channels 0
  181. set idle_time [time_return_minute $black(idleinterval)]
  182. timer $idle_time antidle:module
  183. } else {
  184. return
  185. }
  186. }
  187. proc idlewhois {channels counter} {
  188. global black botnick
  189. set chan [lindex $channels $counter]
  190. set cc [expr $counter + 1]
  191. if {$chan != ""} {
  192. black:check:idle $chan
  193. utimer 30 [list idlewhois $channels $cc]
  194. } else {
  195. return
  196. }
  197. }
  198. proc black:check:idle {chan} {
  199. global black
  200. putlog "\[BT\] Scanning for idle on $chan"
  201. set black(idle_chan) $chan
  202. foreach user [chanlist $chan] {
  203. set handle [nick2hand $user]
  204. if {[isop $user $chan] || [isvoice $user $chan]} {
  205. if {![isbotnick $user]} {
  206. putserv "WHOIS $user $user"
  207. }
  208. }
  209. }
  210. bind raw - 317 idleprocespublic
  211. }
  212. proc idleprocespublic {nick int arg} {
  213. global black
  214. set nick [string tolower [lindex [split $arg] 1]]
  215. set handle [nick2hand $nick]
  216. set idler [string tolower [lindex [split $arg] 2]]
  217. set minutesidle [expr $idler / 60]
  218. set chan $black(idle_chan)
  219. if {[onchan $nick $chan]} {
  220. set idlevoicetime [setting:get $chan idlevoicemax]
  221. if {$idlevoicetime == ""} { set idlevoicetime "$black(idlevoicemax)" }
  222. set idleoptime [setting:get $chan idleopmax]
  223. if {$idleoptime == ""} { set idleoptime "$black(idleopmax)" }
  224. if {![info exists black(voiceonmsg:$nick:$chan)]} {
  225. if {[setting:get $chan idlevoice]} {
  226. if {![matchattr $handle "-|gf" $chan]} {
  227. if {$minutesidle > $idlevoicetime} {
  228. if {[setting:get $chan xonly]} {
  229. putserv "PRIVMSG $black(chanserv) :devoice $chan $nick"
  230. } else {
  231. pushmode $chan -v $nick
  232. }
  233. }
  234. }
  235. }
  236. if {[setting:get $chan idleop]} {
  237. if {![matchattr $handle "-|af" $chan]} {
  238. if {$minutesidle > $idleoptime} {
  239. if {[setting:get $chan xonly]} {
  240. putserv "PRIVMSG $black(chanserv) :deop $chan $nick"
  241. } else {
  242. pushmode $chan -o $nick
  243. }
  244. }
  245. }
  246. }
  247. }
  248. }
  249. }
  250. ##############
  251. #########################################################################
  252. ## END ##
  253. #########################################################################