BT.Gag.tcl 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  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. ## 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 gag:process {gagger time reason nick hand host chan chan1 type} {
  17. global botnick black
  18. set cmd_status [btcmd:status $chan $hand "gag" 0]
  19. if {$cmd_status == "1"} {
  20. return
  21. }
  22. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  23. return
  24. }
  25. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  26. return
  27. }
  28. set split_hand [split $hand ":"]
  29. set gethand [lindex $split_hand 0]
  30. set getlang [string tolower [setting:get $chan lang]]
  31. set return_time [time_return_minute $time]
  32. set counter 0
  33. set num 0
  34. set temp_num 0
  35. set cmd "gag"
  36. set show_gagger $gagger
  37. set show_reason $reason
  38. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  39. set handle [nick2hand $gagger]
  40. if {$gagger == ""} {
  41. switch $type {
  42. 0 {
  43. blacktools:tell $nick $host $hand $chan $chan1 gl.instr $cmd
  44. }
  45. 1 {
  46. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $cmd
  47. }
  48. 2 {
  49. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv $cmd
  50. }
  51. }
  52. return 0
  53. }
  54. if {![validchan $chan]} {
  55. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  56. return
  57. }
  58. if {![onchan $botnick $chan]} {
  59. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  60. return
  61. }
  62. if {[matchattr $handle $black(exceptflags) $chan]} {
  63. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  64. return
  65. }
  66. if {[isbotnick $gagger]} {
  67. return
  68. }
  69. if {![botisop $chan]} {
  70. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  71. return
  72. }
  73. if {[isop $gagger $chan]} {
  74. blacktools:tell $nick $host $hand $chan $chan1 gl.hasop none
  75. return
  76. }
  77. if {[onchan $gagger $chan]} {
  78. set mask [return_mask [return_host_num $cmd $chan [getchanhost $gagger $chan]] [getchanhost $gagger $chan] $gagger]
  79. } else {
  80. set mask ""
  81. }
  82. if {[blacktools:isban $mask $chan] == "1"} {
  83. blacktools:tell $nick $host $hand $chan $chan1 gag.4 $show_gagger
  84. return
  85. }
  86. if {[blacktools:isgag $mask $chan] == "1"} {
  87. blacktools:tell $nick $host $hand $chan $chan1 gag.3 $show_gagger
  88. return
  89. }
  90. set split_hand [split $hand ":"]
  91. set handle [lindex $split_hand 0]
  92. set type [lindex $split_hand 1]
  93. if {($return_time > "20160" || $return_time == "0") && [matchattr $handle -|O $chan]} {
  94. blacktools:tell $nick $host $hand $chan $chan1 gag.7 none
  95. return
  96. }
  97. if {$return_time == "-1"} {
  98. set return_time $black(gag_time)
  99. }
  100. set return_time [time_return_minute $return_time]
  101. if {$mask == ""} {
  102. blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $show_gagger
  103. return
  104. }
  105. if {$show_reason == ""} {
  106. set getreason [setting:get $chan gag-reason]
  107. if {$getreason == ""} {
  108. set show_reason $black(say.$getlang.gag.6)
  109. } else {
  110. set show_reason $getreason
  111. }
  112. }
  113. if {[isvoice $gagger $chan]} {
  114. pushmode $chan -v $gagger
  115. }
  116. set getlang [string tolower [setting:get $chan lang]]
  117. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  118. set replace(%chan%) $chan
  119. set replace(%time%) [return_time $getlang [expr [expr [unixtime] + [expr $return_time * 60]] - [unixtime]]]
  120. set replace(%gagger%) $gagger
  121. set text1 [black:color:set "" $black(say.$getlang.gag.10)]
  122. set text2 [black:color:set "" $black(say.$getlang.gag.11)]
  123. set reply1 [join $text1]
  124. set reply2 [join $text2]
  125. set gag_user_message [string map [array get replace] $reply1]
  126. set gag_chan_message [string map [array get replace] $reply2]
  127. putserv "PRIVMSG $chan :$gag_chan_message"
  128. putserv "PRIVMSG $gagger :$gag_user_message"
  129. pushmode $chan +b $mask
  130. set num [blacktools:ban:find_id]
  131. blacktools:addban $nick $mask $hand $chan $chan1 $return_time "GAG" "0" "0" $show_reason "0" "" "" "" 0 $num
  132. set backchan [join [setting:get $chan backchan]]
  133. if {$backchan == ""} {
  134. return
  135. }
  136. if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
  137. return
  138. }
  139. set bantime [time_return_minute $return_time]
  140. set bantime [expr $bantime * 60]
  141. set expire [return_time_2 $getlang $bantime]
  142. if {$reason == ""} { set reason "N/A" }
  143. set replace(%banmask%) $mask
  144. set replace(%bantime%) $expire
  145. set replace(%reason%) $reason
  146. set replace(%chan%) $chan
  147. set replace(%nick%) $gethand
  148. set text [black:color:set "" $black(say.$getlang.reportchan.2)]
  149. set reply [join $text]
  150. puthelp "PRIVMSG $backchan :[string map [array get replace] $reply]"
  151. }
  152. proc gag:part {nick host hand chan arg} {
  153. global black
  154. if {![validchan $chan]} {
  155. return
  156. }
  157. set uhost "$nick![getchanhost $nick $chan]"
  158. gag:leave $nick $uhost $chan
  159. }
  160. proc gag:split {nick host hand chan args} {
  161. global black
  162. if {![validchan $chan]} {
  163. return
  164. }
  165. set uhost "$nick![getchanhost $nick $chan]"
  166. gag:leave $nick $uhost $chan
  167. }
  168. proc gag:kick {nick host hand chan kicked reason} {
  169. global black
  170. if {![validchan $chan]} {
  171. return
  172. }
  173. set uhost "$kicked![getchanhost $kicked $chan]"
  174. gag:leave $kicked $uhost $chan
  175. }
  176. proc gag:leave {nick host chan} {
  177. global black
  178. if {![validchan $chan]} {
  179. return
  180. }
  181. foreach g [blacktools:gaglist $chan] {
  182. set read_host [lindex [split $g] 3]
  183. if {[string match -nocase $read_host $host]} {
  184. pushmode $chan -b $read_host
  185. }
  186. }
  187. }
  188. ################################# ungag ###############################
  189. proc ungag:process {gagger nick hand host chan chan1 type} {
  190. global black botnick
  191. set cmd_status [btcmd:status $chan $hand "ungag" 0]
  192. if {$cmd_status == "1"} {
  193. return
  194. }
  195. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  196. return
  197. }
  198. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  199. return
  200. }
  201. set show_gagger $gagger
  202. set getlang [string tolower [setting:get $chan lang]]
  203. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  204. if {$gagger == ""} {
  205. switch $type {
  206. 0 {
  207. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ungag"
  208. }
  209. 1 {
  210. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ungag"
  211. }
  212. 2 {
  213. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ungag"
  214. }
  215. }
  216. return 0
  217. }
  218. if {![validchan $chan]} {
  219. return
  220. }
  221. if {[onchan $gagger $chan]} {
  222. set mask [return_mask [return_host_num "gag" $chan [getchanhost $gagger $chan]] [getchanhost $gagger $chan] $gagger]
  223. } else {
  224. blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $show_gagger
  225. return
  226. }
  227. if {[blacktools:isgag $mask $chan] == "0"} {
  228. blacktools:tell $nick $host $hand $chan $chan1 ungag.5 $show_gagger
  229. return
  230. } else {
  231. blacktools:delban $mask $chan "0" "1"
  232. if {[ischanban $mask $chan]} {
  233. pushmode $chan -b $mask
  234. }
  235. set replace(%chan%) $chan
  236. set replace(%gagger%) $gagger
  237. set textgagger [black:color:set "" $black(say.$getlang.ungag.7)]
  238. set textchan [black:color:set "" $black(say.$getlang.ungag.8)]
  239. set reply1 [join $textgagger]
  240. set reply2 [join $textchan]
  241. set ungag_user_message [string map [array get replace] $reply1]
  242. set ungag_chan_message [string map [array get replace] $reply2]
  243. putserv "PRIVMSG $gagger :$ungag_user_message"
  244. putserv "PRIVMSG $chan :$ungag_chan_message"
  245. set backchan [join [setting:get $chan backchan]]
  246. if {$backchan == ""} {
  247. return
  248. }
  249. if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
  250. return
  251. }
  252. set replace(%banmask%) $mask
  253. set replace(%chan%) $chan
  254. set replace(%nick%) $hand
  255. set text [black:color:set "" $black(say.$getlang.reportchan.4)]
  256. set reply [join $text]
  257. puthelp "PRIVMSG $backchan :[string map [array get replace] $reply]"
  258. }
  259. }
  260. proc gag:reban {nick host hand chan args} {
  261. global black
  262. set bans [lindex $args 1]
  263. if {![botisop $chan]} { return }
  264. set check_gag [blacktools:isgag $bans $chan]
  265. if {$check_gag == "1"} {
  266. foreach user [chanlist $chan] {
  267. set gethost "$nick![getchanhost $user $chan]"
  268. if {[string match -nocase $gethost $bans] || [string match -nocase $bans $gethost]} {
  269. pushmode $chan +b $bans
  270. }
  271. }
  272. }
  273. }
  274. ##############
  275. #########################################################################
  276. ## END ##
  277. #########################################################################