BT.OwnerCmds.tcl 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. #########################################################################
  2. ## BlackTools - The Ultimate Channel Control Script ##
  3. ## One TCL. One smart Eggdrop ##
  4. #########################################################################
  5. ######################### OWNER CMDS 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. ################################ Commands ###################################
  16. ################################## cp #######################################
  17. proc cp:process {nick host hand chan chan1 type what from to} {
  18. global black
  19. set cmd_status [btcmd:status $chan $hand "cp" 0]
  20. if {$cmd_status == "1"} {
  21. return
  22. }
  23. set notvalid ""
  24. if {![regexp {^[&#]} $from] || (![regexp {^[&#]} $to] && ![string equal -nocase $to "all"])} {
  25. if {$type == "0"} {
  26. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "cp"
  27. }
  28. if {$type == "1"} {
  29. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "cp"
  30. }
  31. if {$type == "2"} {
  32. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "cp"
  33. }
  34. return
  35. }
  36. if {![validchan $from]} {
  37. lappend notvalid $from
  38. }
  39. if {![validchan $to]} {
  40. lappend notvalid $to
  41. }
  42. if {$notvalid != ""} {
  43. if {[llength $notvalid] > 1} {
  44. blacktools:tell $nick $host $hand $chan $chan1 cp.3 $notvalid
  45. } else {
  46. blacktools:tell $nick $host $hand $chan $chan1 cp.2 $notvalid
  47. }
  48. return
  49. }
  50. switch $what {
  51. banlist {
  52. set counter 0
  53. if {[llength [blacktools:banlist $from]] < 1} {
  54. blacktools:tell $nick $host $hand $chan $chan1 cp.1 $from
  55. return
  56. }
  57. set file [open $black(bans_file) "a"]
  58. foreach b [blacktools:banlist $from] {
  59. set enc_chan [encoding convertto utf-8 $to]
  60. set read_type [lindex [split $b] 0]
  61. set read_host [lindex [split $b] 2]
  62. set read_hand [lindex [split $b] 3]
  63. set read_time1 [lindex [split $b] 4]
  64. set read_time2 [lindex [split $b] 5]
  65. set read_num1 [lindex [split $b] 6]
  66. set read_num2 [lindex [split $b] 7]
  67. set read_reason [lrange [split $b] 8 end]
  68. set return [blacktools:ban:exists $read_host $enc_chan]
  69. if {$return == "0"} {
  70. set counter [expr $counter + 1]
  71. puts $file "$read_type [string tolower $enc_chan] [string tolower $read_host] $read_hand $read_time1 $read_time2 $read_num1 $read_num2 $read_reason"
  72. }
  73. }
  74. close $file
  75. blacktools:tell $nick $host $hand $chan $chan1 cp.4 "$counter"
  76. }
  77. userlist {
  78. set time [unixtime]
  79. set counter 0
  80. set total_counter 0
  81. foreach u [userlist] {
  82. if {[matchattr $u $black(exceptflags) $from]} {
  83. set total_counter [expr $total_counter + 1]
  84. set cflags [chattr $u | $from]
  85. if {![matchattr $cflags $to]} {
  86. set counter [expr $counter + 1]
  87. chattr $u $cflags $to
  88. setuser $u XTRA CHANMODIF($to) $time:cp_from_$from
  89. }
  90. }
  91. }
  92. blacktools:tell $nick $host $hand $chan $chan1 cp.5 "$counter $total_counter"
  93. }
  94. settings {
  95. set getflags [get:flags $from]
  96. set getstr [get:str $from]
  97. set counter 0
  98. set file [open $black(extra_file) a]
  99. foreach flag $getflags {
  100. set return [blacktools:flag:exists $to $flag]
  101. if {$return == "0"} {
  102. set counter [expr $counter + 1]
  103. puts $file "$to XTRA $flag"
  104. }
  105. }
  106. foreach str $getstr {
  107. set split_str [split $str ":"]
  108. set s [lindex $split_str 0]
  109. set why [lrange $split_str 1 end]
  110. set return [blacktools:flag:exists $to $s]
  111. if {$return == "0"} {
  112. set counter [expr $counter + 1]
  113. puts $file "$to XTRA $s $why"
  114. }
  115. }
  116. close $file
  117. blacktools:tell $nick $host $hand $chan $chan1 cp.6 "$counter"
  118. }
  119. default {
  120. if {$type == "0"} {
  121. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "cp"
  122. }
  123. if {$type == "1"} {
  124. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "cp"
  125. }
  126. }
  127. }
  128. }
  129. ############################## status #################################
  130. proc status:process {nick host hand chan} {
  131. global black botnick server uptime {server-online} countusers version getowner
  132. set cmd_status [btcmd:status $chan $hand "status" 0]
  133. if {$cmd_status == "1"} {
  134. return
  135. }
  136. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  137. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  138. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  139. return
  140. }
  141. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  142. return
  143. }
  144. foreach c [channels] {
  145. if {![setting:get $c invisible]} {
  146. lappend channels $c
  147. } else {
  148. if {[matchattr $hand n]} {
  149. lappend channels \002$c\002
  150. }
  151. }
  152. }
  153. set chan1 "$chan"
  154. blacktools:tell $nick $host $hand $chan $chan1 status.1 "$black(name) $black(vers) $version"
  155. blacktools:tell $nick $host $hand $chan $chan1 status.4 [join $channels]
  156. blacktools:tell $nick $host $hand $chan $chan1 status.5 "[countusers] [userlist n]"
  157. }
  158. ############################## broadcast ##############################
  159. proc broadcast:cmd:process {nick host hand chan chan1 text type} {
  160. global botnick black
  161. set cmd_status [btcmd:status $chan $hand "broadcast" 0]
  162. if {$cmd_status == "1"} {
  163. return
  164. }
  165. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  166. return
  167. }
  168. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  169. return
  170. }
  171. if {$text == ""} {
  172. switch $type {
  173. 0 {
  174. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "broadcast"
  175. }
  176. 1 {
  177. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "broadcast"
  178. }
  179. 2 {
  180. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "broadcast"
  181. }
  182. }
  183. return 0
  184. }
  185. foreach c [channels] {
  186. if {![setting:get $c silent]} {
  187. putserv "PRIVMSG $c :\[\002BROADCAST\002\] $text"
  188. }
  189. }
  190. }
  191. ############################## msg ####################################
  192. proc msg:process {nick host hand chan chan1 who msg type} {
  193. global black
  194. set cmd_status [btcmd:status $chan $hand "msg" 0]
  195. if {$cmd_status == "1"} {
  196. return
  197. }
  198. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  199. return
  200. }
  201. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  202. return
  203. }
  204. if {$who == ""} {
  205. switch $type {
  206. 0 {
  207. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "msg"
  208. }
  209. 1 {
  210. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "msg"
  211. }
  212. 2 {
  213. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "msg"
  214. }
  215. }
  216. return
  217. }
  218. if {[isbotnick $who]} {
  219. return
  220. }
  221. putserv "USERHOST :$who"
  222. bind RAW - 302 msg:online:check
  223. set ::msgnick $nick
  224. set ::hand $hand
  225. set ::host $host
  226. set ::chan $chan
  227. set ::chan1 $chan1
  228. set ::type $type
  229. set ::msg $msg
  230. set ::who $who
  231. }
  232. proc msg:online:check {from keyword arguments } {
  233. global black
  234. set msgnick $::msgnick
  235. set hand $::hand
  236. set host $::host
  237. set chan $::chan
  238. set chan1 $::chan1
  239. set who $::who
  240. set msg $::msg
  241. set hostname [lindex [split $arguments] 1]
  242. if {[regexp {\+} $hostname]} {
  243. set split_host [split $hostname "+"]
  244. } else {
  245. set split_host [split $hostname "-"]
  246. }
  247. set mask [lindex $split_host 1]
  248. set getnick [string map {
  249. "=" ""
  250. ":" ""
  251. } [lindex $split_host 0]]
  252. if {$getnick != ""} {
  253. if {[matchattr $hand -|A $chan] && [string equal -nocase $who $black(chanserv)]} {
  254. check:if:bind "msg:online:check" "302"
  255. return
  256. }
  257. if {$host != ""} {
  258. if {[matchattr $hand -|AM $chan] && [onchan $who $chan]} {
  259. putserv "PRIVMSG $who :$msg"
  260. check:if:bind "msg:online:check" "302"
  261. return
  262. }
  263. }
  264. if {[matchattr $hand mno]} {
  265. putserv "PRIVMSG $who :$msg"
  266. }
  267. } else {
  268. blacktools:tell $msgnick $host $hand $chan $chan1 gl.notonline "$who"
  269. }
  270. check:if:bind "msg:online:check" "302"
  271. }
  272. ############################### channels ########################
  273. proc channels:process {nick host hand chan chan1} {
  274. global botnick black
  275. set cmd_status [btcmd:status $chan $hand "channels" 0]
  276. if {$cmd_status == "1"} {
  277. return
  278. }
  279. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  280. return
  281. }
  282. set num [llength [channels]]
  283. set minusers "5"
  284. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  285. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  286. foreach c [channels] {
  287. if {![setting:get $c invisible]} {
  288. set usersnumber [llength [chanlist $c]]
  289. if {[channel get $c inactive]} {
  290. if {[info exists black(abuse:$c)]} {
  291. lappend message_aschan "[join $c ", "]"
  292. } else {
  293. lappend message_schan "[join $c ", "]"
  294. }
  295. } elseif {![onchan $botnick $c]} {
  296. lappend message_nchan "[join $c ", "]"
  297. } elseif {[onchan $botnick $c] && (![botisop $c]) && ($usersnumber >= $minusers)} {
  298. lappend message_ok "[join $c ", "]"
  299. } elseif {[onchan $botnick $c] && ($usersnumber < $minusers)} {
  300. lappend message_nmin "[join $c ", "]"
  301. }
  302. if {[botisop $c] && ($usersnumber >= $minusers)} {
  303. lappend message_ok "[join @$c ", "]"
  304. }
  305. } else {
  306. if {[matchattr $hand n]} {
  307. lappend message_inv "[join $c ", "]"
  308. }
  309. }
  310. }
  311. blacktools:tell $nick $host $hand $chan $chan1 channels.1 $num
  312. if {[info exists message_ok]} {
  313. foreach word [wordwrap [join "\[$black(say.$getlang.channels.3)\]: $message_ok"] 350 ,] {
  314. blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
  315. }
  316. }
  317. if {[info exists message_nchan]} {
  318. foreach word [wordwrap [join "\[$black(say.$getlang.channels.4)\]: $message_nchan"] 350 ,] {
  319. blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
  320. }
  321. }
  322. if {[info exists message_nmin]} {
  323. foreach word [wordwrap [join "\[$black(say.$getlang.channels.7) < $minusers\]: $message_nmin"] 350 ,] {
  324. blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
  325. }
  326. }
  327. if {[info exists message_schan]} {
  328. foreach word [wordwrap [join "\[$black(say.$getlang.channels.5)\]: $message_schan"] 350 ,] {
  329. blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
  330. }
  331. }
  332. if {[info exists message_aschan]} {
  333. foreach word [wordwrap [join "\[$black(say.$getlang.channels.6)\]: $message_aschan"] 350 ,] {
  334. blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
  335. }
  336. }
  337. if {[info exists message_inv]} {
  338. foreach word [wordwrap [join "\[$black(say.$getlang.channels.8)\]: $message_inv"] 350 ,] {
  339. blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
  340. }
  341. }
  342. }
  343. ############################### nick ##################################
  344. proc tempnick:process {thenick tonick host hand chan chan1 type} {
  345. global nick lastbind
  346. set cmd_status [btcmd:status $chan $hand "nick" 0]
  347. if {$cmd_status == "1"} {
  348. return
  349. }
  350. if {$thenick == ""} {
  351. switch $type {
  352. 0 {
  353. blacktools:tell $tonick $host $hand $chan $chan1 gl.instr "nick"
  354. }
  355. 1 {
  356. blacktools:tell $tonick $host $hand $chan $chan1 gl.instr_nick "nick"
  357. }
  358. 2 {
  359. blacktools:tell $tonick $host $hand $chan $chan1 gl.instr_priv "nick"
  360. }
  361. }
  362. return
  363. }
  364. set nick $thenick
  365. blacktools:tell $tonick $host $hand $chan $chan1 nick.4 $thenick
  366. }
  367. proc nick:process {who newnick host hand chan} {
  368. global black nick config
  369. set chan1 "$chan"
  370. if {$newnick == ""} {
  371. blacktools:tell $who $host $hand $chan $chan1 nick.2 $newnick
  372. return
  373. }
  374. blacktools:tell $who $host $hand $chan $chan1 nick.1 $newnick
  375. set ::lastnick [config:getinfo $config "set nick \"*\""]
  376. set nick [join $newnick]
  377. set error [config:save $config "set nick \"*\"" "set nick \"$newnick\""]
  378. if {$error == "0"} {
  379. blacktools:tell $who $host $hand $chan $chan1 nick.3 ""
  380. }
  381. bind RAW - 432 check:validnickname
  382. }
  383. ##############
  384. #########################################################################
  385. ## END ##
  386. #########################################################################