BT.Gag.tcl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. #########################################################################
  2. ## BlackTools - The Ultimate Channel Control Script ##
  3. ## One TCL. One smart Eggdrop ##
  4. #########################################################################
  5. ############################# GAG 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 gag:process {gagger time reason nick hand host chan chan1 type} {
  16. global botnick black
  17. set cmd_status [btcmd:status $chan $hand "gag" 0]
  18. if {$cmd_status == "1"} {
  19. return
  20. }
  21. set split_hand [split $hand ":"]
  22. set gethand [lindex $split_hand 0]
  23. set getlang [string tolower [setting:get $chan lang]]
  24. set return_time [time_return_minute $time]
  25. set counter 0
  26. set num 0
  27. set temp_num 0
  28. set cmd "gag"
  29. set show_gagger $gagger
  30. set show_reason $reason
  31. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  32. set handle [nick2hand $gagger]
  33. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  34. return
  35. }
  36. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  37. return
  38. }
  39. if {$gagger == ""} {
  40. switch $type {
  41. 0 {
  42. blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
  43. }
  44. 1 {
  45. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
  46. }
  47. 2 {
  48. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $cmd
  49. }
  50. }
  51. return 0
  52. }
  53. if {![validchan $chan]} {
  54. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  55. return
  56. }
  57. if {![onchan $botnick $chan]} {
  58. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  59. return
  60. }
  61. if {[matchattr $handle $black(exceptflags) $chan]} {
  62. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  63. return
  64. }
  65. if {[isbotnick $gagger]} {
  66. return
  67. }
  68. if {![botisop $chan]} {
  69. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  70. return
  71. }
  72. if {[isop $gagger $chan]} {
  73. blacktools:tell $nick $host $hand $chan $chan1 gl.hasop none
  74. return
  75. }
  76. if {[onchan $gagger $chan]} {
  77. set mask [return_mask [return_host_num $cmd $chan] [getchanhost $gagger $chan] $gagger]
  78. } else {
  79. set mask ""
  80. }
  81. if {[blacktools:isban $mask $chan] == "1"} {
  82. blacktools:tell $nick $host $hand $chan $chan1 gag.4 $show_gagger
  83. return
  84. }
  85. if {[blacktools:isgag $mask $chan] == "1"} {
  86. blacktools:tell $nick $host $hand $chan $chan1 gag.3 $show_gagger
  87. return
  88. }
  89. if {[string equal -nocase $gagger "-list"]} {
  90. foreach b [blacktools:gaglist $chan] {
  91. set bhost [lindex [split $b] 2]
  92. set counter [expr $counter + 1]
  93. set mask [lindex [split $b] 2]
  94. set expire [lindex [split $b] 4]
  95. set created [lindex [split $b] 5]
  96. set created [clock format $created -format %D-%H:%M:%S]
  97. set breason [lrange [split $b] 8 end]
  98. set bywho [lindex [split $b] 3]
  99. set split_bywho [split $bywho ":"]
  100. set handle [lindex [split $split_bywho] 0]
  101. set type [lindex [split $split_bywho] 1]
  102. set bywho "$handle\([string toupper $type]\)"
  103. if {$type != ""} {
  104. set bywho "$handle\([string toupper $type]\)"
  105. } else { set bywho $handle }
  106. set expire [return_time_2 $getlang [expr $expire - [unixtime]]]
  107. blacktools:tell $nick $host $hand $chan $chan1 sb.4 "$mask $bywho $created $expire $breason"
  108. }
  109. blacktools:tell $nick $host $hand $chan $chan1 gag.2 none
  110. return
  111. }
  112. set split_hand [split $hand ":"]
  113. set handle [lindex $split_hand 0]
  114. set type [lindex $split_hand 1]
  115. if {($return_time > "20160" || $return_time == "0") && [matchattr $handle -|OS $chan]} {
  116. blacktools:tell $nick $host $hand $chan $chan1 gag.7 none
  117. return
  118. }
  119. if {$return_time == "-1"} {
  120. set return_time $black(gag_time)
  121. }
  122. set return_time [time_return_minute $return_time]
  123. if {$mask == ""} {
  124. blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $show_gagger
  125. return
  126. }
  127. if {$show_reason == ""} {
  128. set getreason [setting:get $chan gag-reason]
  129. if {$getreason == ""} {
  130. set show_reason $black(say.$getlang.gag.6)
  131. } else {
  132. set show_reason $getreason
  133. }
  134. }
  135. if {[isvoice $gagger $chan]} {
  136. pushmode $chan -v $gagger
  137. }
  138. set getlang [string tolower [setting:get $chan lang]]
  139. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  140. set replace(%chan%) $chan
  141. set replace(%time%) [return_time $getlang [expr [expr [unixtime] + [expr $return_time * 60]] - [unixtime]]]
  142. set replace(%gagger%) $gagger
  143. set gag_user_message [string map [array get replace] $black(say.$getlang.gag.10)]
  144. set gag_chan_message [string map [array get replace] $black(say.$getlang.gag.11)]
  145. putserv "PRIVMSG $chan :$gag_chan_message"
  146. putserv "PRIVMSG $gagger :$gag_user_message"
  147. pushmode $chan +b $mask
  148. while {$temp_num == 0} {
  149. set get [blacktools:ban:find_id $num]
  150. if {$get == "$num"} {
  151. set num [expr $num + 1]
  152. } else { set temp_num 1 }
  153. }
  154. blacktools:addban $nick $mask $hand $chan $chan1 $return_time "GAG" "0" "0" $show_reason "0" "" "" "" 0 $num
  155. set backchan [join [setting:get $chan backchan]]
  156. if {$backchan == ""} {
  157. return
  158. }
  159. if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
  160. return
  161. }
  162. set bantime [time_return_minute $return_time]
  163. set bantime [expr $bantime * 60]
  164. set expire [return_time_2 $getlang $bantime]
  165. set replace(%banmask%) $mask
  166. set replace(%bantime%) $expire
  167. set replace(%reason%) $reason
  168. set replace(%chan%) $chan
  169. set replace(%nick%) $gethand
  170. puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan.2)]"
  171. }
  172. proc gagpublic {nick host hand chan arg} {
  173. global black lastbind
  174. set return [blacktools:mychar $lastbind $hand]
  175. if {$return == "0"} {
  176. return
  177. }
  178. set gagger [lindex [split $arg] 0]
  179. set time [lindex [split $arg] 1]
  180. set reason [join [lrange [split $arg] 2 end]]
  181. set type 0
  182. set handle [nick2hand $gagger]
  183. set chan1 "$chan"
  184. set return_time [time_return_minute $time]
  185. if {$return_time == "-1"} {
  186. set reason [join [lrange [split $arg] 1 end]]
  187. set time [setting:get $chan gag-bantime]
  188. if {$time == ""} {
  189. set time $black(gag:bantime)
  190. }
  191. }
  192. if {[regexp {^[&#]} $gagger] && [matchattr $hand nmo|MASO $gagger]} {
  193. set chan "$gagger"
  194. set gagger [lindex [split $arg] 1]
  195. set time [lindex [split $arg] 2]
  196. set reason [join [lrange [split $arg] 3 end]]
  197. set return_time [time_return_minute $time]
  198. if {$return_time == "-1"} {
  199. set reason [join [lrange [split $arg] 2 end]]
  200. set time [setting:get $chan gag-bantime]
  201. if {$time == ""} {
  202. set time $black(gag:bantime)
  203. }
  204. }
  205. }
  206. foreach c [channels] {
  207. set backchan [join [setting:get $c backchan]]
  208. if {[string match -nocase $chan $backchan]} {
  209. set chan "$c"
  210. }
  211. }
  212. if {$gagger != ""} {
  213. gag:process $gagger $time $reason $nick "$hand:GAG" $host $chan $chan1 $type
  214. } else { gag:process $gagger $time $reason $nick $hand $host $chan $chan1 $type }
  215. }
  216. proc gag:part {nick host hand chan arg} {
  217. global black
  218. if {![validchan $chan]} {
  219. return
  220. }
  221. set uhost "$nick![getchanhost $nick $chan]"
  222. gag:leave $nick $uhost $chan
  223. }
  224. proc gag:split {nick host hand chan args} {
  225. global black
  226. if {![validchan $chan]} {
  227. return
  228. }
  229. set uhost "$nick![getchanhost $nick $chan]"
  230. gag:leave $nick $uhost $chan
  231. }
  232. proc gag:kick {nick host hand chan kicked reason} {
  233. global black
  234. if {![validchan $chan]} {
  235. return
  236. }
  237. set uhost "$kicked![getchanhost $kicked $chan]"
  238. gag:leave $kicked $uhost $chan
  239. }
  240. proc gag:leave {nick host chan} {
  241. global black
  242. if {![validchan $chan]} {
  243. return
  244. }
  245. foreach g [blacktools:gaglist $chan] {
  246. set read_host [lindex [split $g] 3]
  247. if {[string match -nocase $read_host $host]} {
  248. pushmode $chan -b $read_host
  249. }
  250. }
  251. }
  252. ################################# ungag ###############################
  253. proc ungagpublic {nick host hand chan arg} {
  254. global black
  255. set gagger [lindex [split $arg] 0]
  256. set type 0
  257. set chan1 "$chan"
  258. if {[regexp {^[&#]} $gagger] && [matchattr $hand nmo|MASO $chan]} {
  259. set chan "$gagger"
  260. set gagger [lindex [split $arg] 1]
  261. }
  262. foreach c [channels] {
  263. set backchan [join [setting:get $c backchan]]
  264. if {[string match -nocase $chan $backchan]} {
  265. set chan "$c"
  266. }
  267. }
  268. if {$gagger != ""} {
  269. ungag:process $gagger $nick $hand $host $chan $chan1 $type
  270. } else { ungag:process $gagger $nick $hand $host $chan $chan1 $type }
  271. }
  272. proc ungag:process {gagger nick hand host chan chan1 type} {
  273. global black
  274. set cmd_status [btcmd:status $chan $hand "ungag" 0]
  275. if {$cmd_status == "1"} {
  276. return
  277. }
  278. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  279. return
  280. }
  281. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  282. return
  283. }
  284. set show_gagger $gagger
  285. set getlang [string tolower [setting:get $chan lang]]
  286. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  287. if {$gagger == ""} {
  288. switch $type {
  289. 0 {
  290. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ungag"
  291. }
  292. 1 {
  293. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ungag"
  294. }
  295. 2 {
  296. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ungag"
  297. }
  298. }
  299. return 0
  300. }
  301. if {![validchan $chan]} {
  302. return
  303. }
  304. if {[onchan $gagger $chan]} {
  305. set mask [return_mask [return_host_num "gag" $chan] [getchanhost $gagger $chan] $gagger]
  306. } else {
  307. blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $show_gagger
  308. return
  309. }
  310. if {[blacktools:isgag $mask $chan] == "0"} {
  311. blacktools:tell $nick $host $hand $chan $chan1 ungag.5 $show_gagger
  312. return
  313. } else {
  314. blacktools:delban $mask $chan "0" "1"
  315. if {[ischanban $mask $chan]} {
  316. pushmode $chan -b $mask
  317. }
  318. set replace(%chan%) $chan
  319. set replace(%gagger%) $gagger
  320. set ungag_user_message [string map [array get replace] $black(say.$getlang.ungag.7)]
  321. set ungag_chan_message [string map [array get replace] $black(say.$getlang.ungag.8)]
  322. putserv "PRIVMSG $gagger :$ungag_user_message"
  323. putserv "PRIVMSG $chan :$ungag_chan_message"
  324. }
  325. }
  326. proc gag:reban {nick host hand chan args} {
  327. global black
  328. set bans [lindex $args 1]
  329. if {![botisop $chan]} { return }
  330. foreach user [chanlist $chan] {
  331. set gethost "$user![getchanhost $user $chan]"
  332. if {[string match -nocase $bans $gethost]} {
  333. if {[blacktools:isgag $bans $chan] == "1"} {
  334. pushmode $chan +b $bans
  335. }
  336. }
  337. }
  338. }
  339. ##############
  340. #########################################################################
  341. ## END ##
  342. #########################################################################