BT.Idle.tcl 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  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. ## GitHub page : https://github.com/tclscripts/BlackToolS-TCL ##
  11. ## Online Help : irc://irc.undernet.org/tcl-help ##
  12. ## #TCL-HELP / UnderNet ##
  13. ## You can ask in english or romanian ##
  14. ## ##
  15. #########################################################################
  16. proc antidle:process {why type user host nick hand chan chan1} {
  17. global botnick black
  18. set show_user $user
  19. set flag "-|+f"
  20. set handle [nick2hand $user]
  21. if {[matchattr $hand q]} {
  22. blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  23. return
  24. }
  25. if {[matchattr $hand -|q $chan]} {
  26. blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  27. return
  28. }
  29. if {($why == "") && ($type == "0")} {
  30. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
  31. return
  32. }
  33. if {($why == "") && ($type == "1")} {
  34. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
  35. return
  36. }
  37. if {($why == "") && ($type == "2")} {
  38. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "idle"
  39. return
  40. }
  41. if {![validchan $chan]} {
  42. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  43. return
  44. }
  45. if {![onchan $botnick $chan]} {
  46. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  47. return
  48. }
  49. switch [string tolower $why] {
  50. +o {
  51. antidle:set $chan
  52. setting:set $chan +idleop ""
  53. blacktools:tell $nick $host $hand $chan $chan1 idle.11 none
  54. }
  55. -o {
  56. setting:set $chan -idleop ""
  57. blacktools:tell $nick $host $hand $chan $chan1 idle.12 none
  58. antidle:unset $chan
  59. }
  60. -ho {
  61. setting:set $chan -idlehalfop ""
  62. blacktools:tell $nick $host $hand $chan $chan1 idle.26 none
  63. antidle:unset $chan
  64. }
  65. +v {
  66. antidle:set $chan
  67. setting:set $chan +idlevoice ""
  68. blacktools:tell $nick $host $hand $chan $chan1 idle.14 none
  69. }
  70. +ho {
  71. antidle:set $chan
  72. setting:set $chan +idlehalfop ""
  73. blacktools:tell $nick $host $hand $chan $chan1 idle.25 none
  74. }
  75. -v {
  76. setting:set $chan -idlevoice ""
  77. blacktools:tell $nick $host $hand $chan $chan1 idle.15 none
  78. antidle:unset $chan
  79. }
  80. +b {
  81. antidle:set $chan
  82. setting:set $chan +idleban ""
  83. blacktools:tell $nick $host $hand $chan $chan1 idle.27 none
  84. }
  85. -b {
  86. setting:set $chan -idleban ""
  87. blacktools:tell $nick $host $hand $chan $chan1 idle.28 none
  88. antidle:unset $chan
  89. }
  90. add {
  91. if {$user == ""} {
  92. if {$type == "0"} {
  93. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
  94. return
  95. }
  96. if {$type == "1"} {
  97. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
  98. }
  99. return
  100. }
  101. if {[onchan $user $chan]} {
  102. set getuser [nick2hand $user]
  103. if {$getuser != "*"} {
  104. set user $getuser
  105. }
  106. }
  107. if {[validuser $user]} {
  108. chattr $user $flag $chan
  109. blacktools:tell $nick $host $hand $chan $chan1 idle.18 $show_user
  110. } else {
  111. set hosts [getchanhost $user $chan]
  112. set uhost "*!*@[lindex [split $hosts @] 1]"
  113. adduser $user $uhost
  114. chattr $user $flag $chan
  115. blacktools:tell $nick $host $hand $chan $chan1 idle.19 "$show_user $uhost"
  116. }
  117. }
  118. list {
  119. set list [userlist "-|f" $chan]
  120. blacktools:tell $nick $host $hand $chan $chan1 idle.20 "none"
  121. if {$list == ""} {set list "NONE"}
  122. blacktools:tell $nick $host $hand $chan $chan1 idle.21 "$list"
  123. }
  124. del {
  125. if {$user == ""} {
  126. if {$type == "0"} {
  127. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
  128. return
  129. }
  130. if {$type == "1"} {
  131. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
  132. }
  133. return
  134. }
  135. if {[onchan $user $chan]} {
  136. set getuser [nick2hand $user]
  137. if {$getuser != "*"} {
  138. set user $getuser
  139. }
  140. }
  141. if {![validuser $user]} {
  142. blacktools:tell $nick $host $hand $chan $chan1 idle.22 "$show_user"
  143. return
  144. }
  145. if {![matchattr $user "-|f" $chan]} {
  146. blacktools:tell $nick $host $hand $chan $chan1 idle.23 "$show_user"
  147. return
  148. }
  149. chattr $user -|-f $chan
  150. blacktools:tell $nick $host $hand $chan $chan1 idle.24 "$show_user"
  151. }
  152. default {
  153. if {$type == "0"} {
  154. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "idle"
  155. return
  156. }
  157. if {$type == "1"} {
  158. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "idle"
  159. }
  160. }
  161. }
  162. }
  163. proc antidle:unset {chan} {
  164. global black
  165. set idle_activ 0
  166. set options {idleop idlevoice idlehalfop idleban}
  167. foreach option $options {
  168. if {[setting:get $chan $option]} {
  169. set idle_activ 1
  170. }
  171. }
  172. if {$idle_activ == "0"} {
  173. if {[info exists black(idle:$chan:timer_start)]} {
  174. unset black(idle:$chan:timer_start)
  175. }
  176. if {[info exists black(idle:counter:$chan)]} {
  177. unset black(idle:counter:$chan)
  178. }
  179. }
  180. }
  181. proc antidle:set {chan} {
  182. global black
  183. set idle_activ 0
  184. set options {idleop idlevoice idlehalfop idleban}
  185. foreach option $options {
  186. if {[setting:get $chan $option]} {
  187. set idle_activ 1
  188. }
  189. }
  190. if {$idle_activ == "0"} {
  191. if {[setting:get $chan idle-scantime] != ""} {
  192. set time [setting:get $chan idle-scantime]
  193. } else {
  194. set time $black(idleinterval)
  195. }
  196. set scan_time [time_return_minute $time]
  197. set black(idle:$chan:timer_start) $scan_time
  198. }
  199. }
  200. proc antidle:module {chans} {
  201. global black
  202. set channels ""
  203. foreach chan $chans {
  204. if {[validchan $chan]} {
  205. if {[info exists black(secure_mode:$chan)]} {continue}
  206. lappend channels $chan
  207. }
  208. }
  209. if {$channels != ""} {
  210. idlewhois $channels 0
  211. }
  212. }
  213. proc idlewhois {channels counter} {
  214. global black botnick
  215. set chan [lindex $channels $counter]
  216. set cc [expr $counter + 1]
  217. if {$chan != ""} {
  218. black:check:idle $chan
  219. utimer 30 [list idlewhois $channels $cc]
  220. } else {
  221. return
  222. }
  223. }
  224. proc black:check:idle {chan} {
  225. global black
  226. set ::idle_chan $chan
  227. foreach user [chanlist $chan] {
  228. set handle [nick2hand $user]
  229. if {([setting:get $chan idleop] && [isop $user $chan]) || ([setting:get $chan idlevoice] && [isvoice $user $chan]) || ([setting:get $chan idlehalfop] && [ishalfop $user $chan]) || ([setting:get $chan idleban] && ![isop $user $chan] && ![isvoice $user $chan] && ![ishalfop $user $chan])} {
  230. if {![isbotnick $user]} {
  231. putserv "WHOIS $user $user"
  232. }
  233. }
  234. }
  235. bind raw - 317 idleprocespublic
  236. }
  237. proc idleprocespublic {nick int arg} {
  238. global black
  239. set nick [string tolower [lindex [split $arg] 1]]
  240. set handle [nick2hand $nick]
  241. set idler [string tolower [lindex [split $arg] 2]]
  242. set minutesidle [expr $idler / 60]
  243. set chan $::idle_chan
  244. if {[onchan $nick $chan]} {
  245. set idlevoicetime [setting:get $chan idlevoicemax]
  246. if {$idlevoicetime == ""} { set idlevoicetime "$black(idlevoicemax)" }
  247. set idleoptime [setting:get $chan idleopmax]
  248. if {$idleoptime == ""} { set idleoptime "$black(idleopmax)" }
  249. set idlehalfoptime [setting:get $chan idlehalfopmax]
  250. if {$idlehalfoptime == ""} { set idlehalfoptime "$black(idlehalfopmax)" }
  251. set idlebantime [setting:get $chan idlebanmax]
  252. if {$idlebantime == ""} { set idlebantime "$black(idlebanmax)" }
  253. set idlevoicetime [time_return_minute $idlevoicetime]
  254. set idleoptime [time_return_minute $idleoptime]
  255. set idlehalfoptime [time_return_minute $idlehalfoptime]
  256. set idlebantime [time_return_minute $idlebantime]
  257. if {![info exists black(voiceonmsg:$nick:$chan)]} {
  258. if {[setting:get $chan idlevoice]} {
  259. if {(![matchattr $handle "-|gf" $chan]) && [isvoice $nick $chan]} {
  260. if {$minutesidle > $idlevoicetime} {
  261. if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
  262. putserv "PRIVMSG $black(chanserv) :devoice $chan $nick"
  263. } else {
  264. pushmode $chan -v $nick
  265. }
  266. }
  267. }
  268. }
  269. if {[setting:get $chan idleop]} {
  270. if {(![matchattr $handle "-|af" $chan]) && [isop $nick $chan]} {
  271. if {$minutesidle > $idleoptime} {
  272. if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
  273. putserv "PRIVMSG $black(chanserv) :deop $chan $nick"
  274. } else {
  275. pushmode $chan -o $nick
  276. }
  277. }
  278. }
  279. }
  280. if {[setting:get $chan idlehalfop]} {
  281. if {(![matchattr $handle "-|f" $chan]) && [ishalfop $nick $chan]} {
  282. if {$minutesidle > $idlehalfoptime} {
  283. if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
  284. return
  285. } else {
  286. pushmode $chan -h $nick
  287. }
  288. }
  289. }
  290. }
  291. if {[setting:get $chan idleban]} {
  292. if {[matchattr $handle $black(exceptflags) $chan]} {
  293. return
  294. }
  295. if {(![matchattr $handle "-|f" $chan]) && (![ishalfop $nick $chan] && ![isop $nick $chan] && ![isvoice $nick $chan])} {
  296. if {$minutesidle > $idlebantime} {
  297. blacktools:banner:2 $nick "IDLEBAN" $chan $chan [getchanhost $nick $chan] "0" ""
  298. who:chan $chan
  299. }
  300. }
  301. }
  302. }
  303. }
  304. }
  305. ##############
  306. #########################################################################
  307. ## END ##
  308. #########################################################################