BT.LocalCmds.tcl 77 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139
  1. #########################################################################
  2. ## BlackTools - The Ultimate Channel Control Script ##
  3. ## One TCL. One smart Eggdrop ##
  4. #########################################################################
  5. ######################### LOCAL CMDS 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-script ##
  11. ## Online Help : irc://irc.undernet.org/tcl-help ##
  12. ## #TCL-HELP / UnderNet ##
  13. ## You can ask in english or romanian ##
  14. ## ##
  15. #########################################################################
  16. ################################ Commands ###################################
  17. ################################## report ###################################
  18. proc report:process {nick host host1 hand chan chan1 type what message} {
  19. global black
  20. if {[setting:get $chan reportnick]} {
  21. set cmd_status [btcmd:status $chan $hand "report" 0]
  22. if {$cmd_status == "1"} {
  23. return
  24. }
  25. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  26. return
  27. }
  28. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  29. return
  30. }
  31. set number [scan $black(report:flood) %\[^:\]]
  32. set timer [scan $black(report:flood) %*\[^:\]:%s]
  33. if {[info exists black(floodreport:$host1:$chan)]} {
  34. if {$black(floodreport:$host1:$chan) >= "$number"} {
  35. return
  36. }
  37. }
  38. foreach tmr [utimers] {
  39. if {[string match "*black(floodreport:$host1:$chan)*" [join [lindex $tmr 1]]]} {
  40. killutimer [lindex $tmr 2]
  41. }
  42. }
  43. if {![info exists black(floodreport:$host1:$chan)]} {
  44. set black(floodreport:$host1:$chan) 0
  45. }
  46. incr black(floodreport:$host1:$chan)
  47. utimer $timer [list unset black(floodreport:$host1:$chan)]
  48. if {$what == ""} {
  49. if {$type == "0"} {
  50. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "report"
  51. }
  52. if {$type == "1"} {
  53. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "report"
  54. }
  55. if {$type == "2"} {
  56. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "report"
  57. }
  58. return
  59. }
  60. if {![validchan $chan]} {
  61. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  62. return
  63. }
  64. if {![botisop $chan]} {
  65. return
  66. }
  67. if {[isbotnick $what]} {
  68. return
  69. }
  70. set handle [nick2hand $what]
  71. if {[validuser $handle]} {
  72. set found_acces 0
  73. foreach c [channels] {
  74. if {[matchattr $handle $black(exceptflags) $chan]} {
  75. set found_acces 1
  76. }
  77. }
  78. if {$found_acces == "1"} {
  79. return
  80. }
  81. }
  82. if {[string equal -nocase $what $nick]} {
  83. blacktools:tell $nick $host $hand $chan $chan1 report.5 none
  84. return
  85. }
  86. set getlang [string tolower [setting:get $chan lang]]
  87. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  88. if {[onchan $what $chan]} {
  89. set replace(%msg.1%) $what
  90. set replace(%msg.2%) $nick
  91. set replace(%msg.8%) $message
  92. if {$message != ""} {
  93. set text [black:color:set "" $black(say.$getlang.report.2)]
  94. } else {
  95. set text [black:color:set "" $black(say.$getlang.report.3)]
  96. }
  97. set reply [join $text]
  98. set output [string map [array get replace] $reply]
  99. putserv "NOTICE @$chan :$output"
  100. blacktools:tell $nick $host $hand $chan $chan1 report.4 none
  101. } else {
  102. blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $what
  103. }
  104. }
  105. }
  106. ################################# disable ###################################
  107. proc disable:process {nick host hand chan chan1 type what user} {
  108. global black
  109. set cmd_status [btcmd:status $chan $hand "disable" 0]
  110. if {$cmd_status == "1"} {
  111. return
  112. }
  113. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  114. return
  115. }
  116. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  117. return
  118. }
  119. if {$what == ""} {
  120. if {$type == "0"} {
  121. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "disable"
  122. }
  123. if {$type == "1"} {
  124. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "disable"
  125. }
  126. if {$type == "2"} {
  127. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "disable"
  128. }
  129. return
  130. }
  131. set local_cmds "h omsg o v ho man version mode cycle broadcast say act i stats t myset b black stick dr bot n id spam bw vr gag sb banlist k w anunt bt badchan idle limit seen clonescan securemode private guestnick greet leave topic next helped noidle skip topwords q note report"
  132. if {[matchattr $hand -|M $chan] && [lsearch -exact $what $local_cmds] < 0} {
  133. blacktools:tell $nick $host $hand $chan $chan1 disable.8 $what
  134. return
  135. }
  136. if {[string equal -nocase $user "global"] && [matchattr $hand nm]} {
  137. set return_cmd [btcmd:global:set $hand $what 1]
  138. switch $return_cmd {
  139. 0 {
  140. blacktools:tell $nick $host $hand $chan $chan1 disable.6 $what
  141. }
  142. 1 {
  143. blacktools:tell $nick $host $hand $chan $chan1 disable.7 $what
  144. }
  145. 2 {
  146. blacktools:tell $nick $host $hand $chan $chan1 disable.3 $what
  147. }
  148. 3 {
  149. blacktools:tell $nick $host $hand $chan $chan1 disable.8 $what
  150. }
  151. }
  152. return
  153. }
  154. if {$user != ""} {
  155. btcmd:set:user $nick $host $hand $chan $chan1 $user $what "1"
  156. return
  157. }
  158. set return_cmd [btcmd:set $chan $hand $what 1]
  159. switch $return_cmd {
  160. 0 {
  161. blacktools:tell $nick $host $hand $chan $chan1 disable.1 $what
  162. }
  163. 1 {
  164. blacktools:tell $nick $host $hand $chan $chan1 disable.2 $what
  165. }
  166. 2 {
  167. blacktools:tell $nick $host $hand $chan $chan1 disable.3 $what
  168. }
  169. 3 {
  170. blacktools:tell $nick $host $hand $chan $chan1 disable.8 $what
  171. }
  172. }
  173. }
  174. ################################# enable ####################################
  175. proc enable:process {nick host hand chan chan1 type what user} {
  176. global black
  177. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  178. return
  179. }
  180. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  181. return
  182. }
  183. if {$what == ""} {
  184. if {$type == "0"} {
  185. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "enable"
  186. }
  187. if {$type == "1"} {
  188. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "enable"
  189. }
  190. if {$type == "2"} {
  191. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "enable"
  192. }
  193. return
  194. }
  195. if {[string equal -nocase $user "global"] && [matchattr $hand nm]} {
  196. set return_cmd [btcmd:global:set $hand $what 0]
  197. switch $return_cmd {
  198. 0 {
  199. blacktools:tell $nick $host $hand $chan $chan1 enable.7 $what
  200. }
  201. 1 {
  202. blacktools:tell $nick $host $hand $chan $chan1 enable.6 $what
  203. }
  204. 2 {
  205. blacktools:tell $nick $host $hand $chan $chan1 enable.3 $what
  206. }
  207. }
  208. return
  209. }
  210. if {$user != ""} {
  211. btcmd:set:user $nick $host $hand $chan $chan1 $user $what "0"
  212. return
  213. }
  214. set gl_check [btcmd:gl:status $what]
  215. if {$gl_check == "1" && $type == "0"} {
  216. blacktools:tell $nick $host $hand $chan $chan1 enable.8 $what
  217. }
  218. if {[matchattr $hand -|M $chan]} {
  219. set access "MANAGER"
  220. } elseif {[matchattr $hand n]} {
  221. set access "BOSS"
  222. } elseif {[matchattr $hand m]} {
  223. set access "OWNER"
  224. } elseif {[matchattr $hand o]} {
  225. set access "MASTER"
  226. }
  227. set disable_level [btcmd:getlevel $chan $what]
  228. if {$access == "MANAGER" && $disable_level == "OWNER"} {
  229. blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
  230. return
  231. }
  232. if {$access == "OWNER" && $disable_level == "BOSS"} {
  233. blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
  234. return
  235. }
  236. if {$access == "MANAGER" && $disable_level == "BOSS"} {
  237. blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
  238. return
  239. }
  240. if {$access == "MANAGER" && $disable_level == "MASTER"} {
  241. blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
  242. return
  243. }
  244. if {$access == "MASTER" && $disable_level == "OWNER"} {
  245. blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
  246. return
  247. }
  248. if {$access == "MASTER" && $disable_level == "BOSS"} {
  249. blacktools:tell $nick $host $hand $chan $chan1 enable.9 $what
  250. return
  251. }
  252. set return_cmd [btcmd:set $chan $hand $what 0]
  253. switch $return_cmd {
  254. 0 {
  255. blacktools:tell $nick $host $hand $chan $chan1 enable.2 $what
  256. }
  257. 1 {
  258. blacktools:tell $nick $host $hand $chan $chan1 enable.1 $what
  259. }
  260. 2 {
  261. blacktools:tell $nick $host $hand $chan $chan1 enable.3 $what
  262. }
  263. }
  264. }
  265. ################################### t #################################
  266. proc t:process {nick host hand chan chan1 topics type} {
  267. global botnick black
  268. set cmd_status [btcmd:status $chan $hand "t" 0]
  269. if {$cmd_status == "1"} {
  270. return
  271. }
  272. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  273. return
  274. }
  275. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  276. return
  277. }
  278. if {$topics == ""} {
  279. switch $type {
  280. 0 {
  281. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "t"
  282. }
  283. 1 {
  284. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "t"
  285. }
  286. 2 {
  287. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "t"
  288. }
  289. }
  290. return
  291. }
  292. if {![validchan $chan]} {
  293. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  294. return
  295. }
  296. if {![onchan $botnick $chan]} {
  297. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  298. return
  299. }
  300. if {[setting:get $chan showhandle]} {
  301. set topics "($hand) $topics"
  302. } else { set topics "$topics"
  303. }
  304. if {[setting:get $chan xonly]} {
  305. if {![botisop $chan]} {
  306. putserv "PRIVMSG $black(chanserv) :topic $chan $topics"
  307. return
  308. }
  309. }
  310. if {![botisop $chan]} {
  311. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  312. return
  313. }
  314. putserv "TOPIC $chan :$topics"
  315. }
  316. ################################# i ###################################
  317. proc i:process {nick host hand chan chan1 inick type} {
  318. global botnick black
  319. set show_inick $inick
  320. set cmd_status [btcmd:status $chan $hand "i" 0]
  321. if {$cmd_status == "1"} {
  322. return
  323. }
  324. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  325. return
  326. }
  327. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  328. return
  329. }
  330. if {$inick == "" && $chan != $chan1} {
  331. set inick $nick
  332. }
  333. if {$inick == ""} {
  334. switch $type {
  335. 0 {
  336. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "i"
  337. }
  338. 1 {
  339. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "i"
  340. }
  341. 2 {
  342. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "i"
  343. }
  344. }
  345. return
  346. }
  347. if {![validchan $chan]} {
  348. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  349. return
  350. }
  351. if {![onchan $botnick $chan]} {
  352. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  353. return
  354. }
  355. if {![botisop $chan]} {
  356. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  357. return
  358. }
  359. putserv "USERHOST :$inick"
  360. bind RAW - 302 i:online:check
  361. set ::getnick $nick
  362. set ::hand $hand
  363. set ::host $host
  364. set ::chan $chan
  365. set ::chan1 $chan1
  366. set ::type $type
  367. set ::inick $inick
  368. set ::show_inick $show_inick
  369. }
  370. proc i:online:check {from keyword arguments } {
  371. global black
  372. set anick $::getnick
  373. set hand $::hand
  374. set host $::host
  375. set chan $::chan
  376. set chan1 $::chan1
  377. set inick $::inick
  378. set show_inick $::show_inick
  379. set hostname [lindex [split $arguments] 1]
  380. if {[regexp {\+} $hostname]} {
  381. set split_host [split $hostname "+"]
  382. } else {
  383. set split_host [split $hostname "-"]
  384. }
  385. set mask [lindex $split_host 1]
  386. set getnick [string map {
  387. "=" ""
  388. ":" ""
  389. } [lindex $split_host 0]]
  390. if {$getnick != ""} {
  391. set replace(%nick%) $anick
  392. set replace(%chan%) $chan
  393. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  394. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  395. set text [black:color:set "" $black(say.$getlang.i.7)]
  396. set getmsg [join $text]
  397. if {[info exists black(say.$getlang.i.7)]} {
  398. set imessage [string map [array get replace] $getmsg]
  399. }
  400. if {$inick != ""} {
  401. if {[onchan $inick $chan]} {
  402. blacktools:tell $anick $host $hand $chan $chan1 i.1 $show_inick
  403. return
  404. }
  405. putserv "INVITE $inick $chan"
  406. putserv "PRIVMSG $inick :$imessage"
  407. blacktools:tell $anick $host $hand $chan $chan1 i.2 $show_inick
  408. }
  409. } else {
  410. blacktools:tell $anick $host $hand $chan $chan1 gl.notonline "$inick"
  411. }
  412. check:if:bind "i:online:check" "302"
  413. }
  414. ############################### purge ###############################
  415. proc purge:process {nick host hand chan chan1 reason} {
  416. global black
  417. set cmd_status [btcmd:status $chan $hand "purge" 0]
  418. if {$cmd_status == "1"} {
  419. return
  420. }
  421. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  422. return
  423. }
  424. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  425. return
  426. }
  427. if {!($black(homechan) == "") && ![string equal -nocase $black(homechan) "#no_home_chan"]} {
  428. if {[string equal -nocase $chan $black(homechan)]} {
  429. blacktools:tell:prv $nick $host $hand delchan.5 $chan
  430. return
  431. }
  432. }
  433. channel remove $chan
  434. delchan:all $chan
  435. topwords:delete $chan
  436. putserv "PART $chan :PURGED by $hand :$reason"
  437. }
  438. ################################### v #################################
  439. proc v:process {nick host hand chan chan1 arg} {
  440. global botnick black
  441. set xban 0
  442. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  443. return
  444. }
  445. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  446. return
  447. }
  448. set cmd_status [btcmd:status $chan $hand "v" 0]
  449. if {$cmd_status == "1"} {
  450. return
  451. }
  452. if {![validchan $chan]} {
  453. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  454. return
  455. }
  456. if {![onchan $botnick $chan]} {
  457. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  458. return
  459. }
  460. if {![botisop $chan] && ![setting:get $chan xonly]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  461. return
  462. }
  463. if {$arg == ""} {
  464. set arg $nick
  465. }
  466. if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
  467. set xban 1
  468. }
  469. if {[string equal -nocase $arg "+"]} {
  470. set noxonly 0
  471. set userlist ""
  472. foreach voicenick [chanlist $chan] {
  473. if {[isvoice $voicenick $chan]} { continue }
  474. if {[isbotnick $voicenick]} { continue }
  475. if {$xban == "0"} {
  476. set noxonly 1
  477. pushmode $chan +v $voicenick
  478. }
  479. }
  480. if {$noxonly == "0"} {
  481. foreach getuser [chanlist $chan] {
  482. if {![isvoice $getuser $chan]} {
  483. lappend userlist $getuser
  484. }
  485. }
  486. putserv "PRIVMSG $black(chanserv) :voice $chan [join $userlist]"
  487. }
  488. return
  489. }
  490. if {[string equal -nocase $arg "-"]} {
  491. set noxonly 0
  492. set userlist ""
  493. foreach voicenick [chanlist $chan] {
  494. if {[isbotnick $voicenick]} { continue }
  495. if {$xban == "0"} {
  496. set noxonly 1
  497. pushmode $chan -v $voicenick
  498. }
  499. }
  500. if {$noxonly == "0"} {
  501. foreach getuser [chanlist $chan] {
  502. if {[isvoice $getuser $chan]} {
  503. lappend userlist $getuser
  504. }
  505. }
  506. putserv "PRIVMSG $black(chanserv) :devoice $chan [join $userlist]"
  507. }
  508. return
  509. }
  510. set voicelist ""
  511. set devoicelist ""
  512. foreach voicenick [split $arg] {
  513. if {[isbotnick $voicenick]} { continue }
  514. if {[isvoice $voicenick $chan]} {
  515. if {$xban == "0"} {
  516. pushmode $chan -v $voicenick
  517. } else { lappend devoicelist $voicenick }
  518. } else {
  519. if {$xban == "0"} {
  520. pushmode $chan +v $voicenick
  521. } else { lappend voicelist $voicenick }
  522. }
  523. }
  524. if {$devoicelist != ""} {
  525. putserv "PRIVMSG $black(chanserv) :devoice $chan [join $devoicelist]"
  526. }
  527. if {$voicelist != ""} {
  528. putserv "PRIVMSG $black(chanserv) :voice $chan [join $voicelist]"
  529. }
  530. }
  531. ################################## ho #################################
  532. proc ho:process {nick host hand chan chan1 arg} {
  533. global botnick black
  534. set xban 0
  535. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  536. return
  537. }
  538. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  539. return
  540. }
  541. set cmd_status [btcmd:status $chan $hand "ho" 0]
  542. if {$cmd_status == "1"} {
  543. return
  544. }
  545. if {![validchan $chan]} {
  546. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  547. return
  548. }
  549. if {![onchan $botnick $chan]} {
  550. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  551. return
  552. }
  553. if {![botisop $chan] && ![setting:get $chan xonly]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  554. return
  555. }
  556. if {$arg == ""} {
  557. set arg $nick
  558. }
  559. if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
  560. set xban 1
  561. }
  562. if {[string equal -nocase $arg "+"]} {
  563. foreach hopnick [chanlist $chan] {
  564. if {[ishalfop $hopnick $chan]} { continue }
  565. if {$xban == "0"} {
  566. pushmode $chan +h $hopnick
  567. } else { return }
  568. }
  569. return
  570. }
  571. if {[string equal -nocase $arg "-"]} {
  572. foreach hopnick [chanlist $chan] {
  573. if {![ishalfop $hopnick $chan]} { continue }
  574. if {[isbotnick $hopnick]} { continue }
  575. if {[onchan $black(chanserv) $chan] && ![setting:get $chan xonly]} {
  576. blacktools:tell $nick $host $hand $chan $chan1 massdeop.429 $black(chanserv)
  577. return
  578. }
  579. if {$xban == "0"} {
  580. pushmode $chan -h $hopnick
  581. } else { return }
  582. }
  583. return
  584. }
  585. foreach hopnick [split $arg] {
  586. if {[isbotnick $hopnick]} { continue }
  587. if {[ishalfop $hopnick $chan]} {
  588. if {$xban == "0"} {
  589. pushmode $chan -h $hopnick
  590. } else { return }
  591. } else {
  592. if {![setting:get $chan xonly]} {
  593. pushmode $chan +h $hopnick
  594. } else { return }
  595. }
  596. }
  597. }
  598. ################################## o ##################################
  599. proc o:process {nick host hand chan chan1 arg} {
  600. global botnick black
  601. set xban 0
  602. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  603. return
  604. }
  605. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  606. return
  607. }
  608. set cmd_status [btcmd:status $chan $hand "o" 0]
  609. if {$cmd_status == "1"} {
  610. return
  611. }
  612. if {![validchan $chan]} {
  613. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  614. return
  615. }
  616. if {![onchan $botnick $chan]} {
  617. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  618. return
  619. }
  620. if {![botisop $chan] && ![setting:get $chan xonly]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  621. return
  622. }
  623. if {$arg == ""} {
  624. set arg $nick
  625. }
  626. if {[setting:get $chan xonly] && [onchan $black(chanserv) $chan]} {
  627. set xban 1
  628. }
  629. if {[string equal -nocase $arg "+"]} {
  630. set userlist ""
  631. set noxonly 0
  632. foreach opnick [chanlist $chan] {
  633. if {[isop $opnick $chan]} { continue }
  634. if {$xban == "0"} {
  635. set noxonly 1
  636. pushmode $chan +o $opnick
  637. }
  638. }
  639. if {$noxonly == "0"} {
  640. foreach getuser [chanlist $chan] {
  641. if {![isop $getuser $chan]} {
  642. lappend userlist $getuser
  643. }
  644. }
  645. putserv "PRIVMSG $black(chanserv) :op $chan [join $userlist]"
  646. }
  647. return
  648. }
  649. if {[string equal -nocase $arg "-"]} {
  650. set userlist ""
  651. set noxonly 0
  652. foreach opnick [chanlist $chan] {
  653. if {![isop $opnick $chan]} { continue }
  654. if {[isbotnick $opnick]} { continue }
  655. if {[onchan $black(chanserv) $chan] && ![setting:get $chan xonly]} {
  656. blacktools:tell $nick $host $hand $chan $chan1 o.1 $black(chanserv)
  657. return
  658. }
  659. if {$xban == "0"} {
  660. set noxonly 1
  661. pushmode $chan -o $opnick
  662. }
  663. }
  664. if {$noxonly == "0"} {
  665. foreach getuser [chanlist $chan] {
  666. if {[isop $getuser $chan]} {
  667. lappend userlist $getuser
  668. }
  669. }
  670. putserv "PRIVMSG $black(chanserv) :deop $chan [join $userlist]"
  671. }
  672. return
  673. }
  674. set oplist ""
  675. set deoplist ""
  676. foreach opnick [split $arg] {
  677. if {[isbotnick $opnick]} { continue }
  678. if {[isop $opnick $chan]} {
  679. if {$xban == "0"} {
  680. pushmode $chan -o $opnick
  681. } else { lappend deoplist $opnick }
  682. } else {
  683. if {$xban == "0"} {
  684. pushmode $chan +o $opnick
  685. } else { lappend oplist $opnick }
  686. }
  687. }
  688. if {$deoplist != ""} {
  689. putserv "PRIVMSG $black(chanserv) :deop $chan [join $deoplist]"
  690. }
  691. if {$oplist != ""} {
  692. putserv "PRIVMSG $black(chanserv) :op $chan [join $oplist]"
  693. }
  694. }
  695. ################################ say ##################################
  696. proc say:process {nick host hand chan chan1 text type} {
  697. global botnick black
  698. set cmd_status [btcmd:status $chan $hand "say" 0]
  699. if {$cmd_status == "1"} {
  700. return
  701. }
  702. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  703. return
  704. }
  705. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  706. return
  707. }
  708. if {$text == ""} {
  709. switch $type {
  710. 0 {
  711. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "say"
  712. }
  713. 1 {
  714. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "say"
  715. }
  716. 2 {
  717. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "say"
  718. }
  719. }
  720. return 0
  721. }
  722. if {![validchan $chan]} {
  723. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  724. return
  725. }
  726. if {![onchan $botnick $chan]} {
  727. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  728. return
  729. }
  730. putserv "PRIVMSG $chan :$text"
  731. }
  732. ################################ act ##################################
  733. proc act:process {nick host hand chan chan1 text type} {
  734. global botnick black
  735. set cmd_status [btcmd:status $chan $hand "act" 0]
  736. if {$cmd_status == "1"} {
  737. return
  738. }
  739. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  740. return
  741. }
  742. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  743. return
  744. }
  745. if {$text == ""} {
  746. switch $type {
  747. 0 {
  748. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "act"
  749. }
  750. 1 {
  751. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "act"
  752. }
  753. 2 {
  754. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "act"
  755. }
  756. }
  757. return 0
  758. }
  759. if {![validchan $chan]} {
  760. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  761. return
  762. }
  763. if {![onchan $botnick $chan]} {
  764. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  765. return
  766. }
  767. putserv "PRIVMSG $chan :\001ACTION $text\001"
  768. }
  769. ############################## version ################################
  770. proc version:process {nick host hand chan chan1 arg} {
  771. global botnick black
  772. set cmd_status [btcmd:status $chan $hand "version" 0]
  773. if {$cmd_status == "1"} {
  774. return
  775. }
  776. if {$arg != ""} { return }
  777. blacktools:tell $nick $host $hand $chan $chan1 version.1 $black(vers)
  778. }
  779. ############################### cycle #################################
  780. proc cycle:process {nick host hand chan chan1 reason} {
  781. global black botnick
  782. set cmd_status [btcmd:status $chan $hand "cycle" 0]
  783. set reply ""
  784. if {$cmd_status == "1"} {
  785. return
  786. }
  787. set getlang [string tolower [setting:get $chan lang]]
  788. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  789. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  790. return
  791. }
  792. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  793. return
  794. }
  795. if {![validchan $chan]} {
  796. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  797. return
  798. }
  799. if {![onchan $botnick $chan]} {
  800. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  801. return
  802. }
  803. if {[regexp {^[0-9]} $reason] && [matchattr $hand nmo|M $chan]} {
  804. set replace(%msg.1%) $reason
  805. set text [black:color:set "" $black(say.$getlang.cycle.2)]
  806. set reply [join $text]
  807. putserv "PART $chan :[string map [array get replace] $reply]"
  808. channel set $chan +inactive
  809. utimer $reason [list channel set $chan -inactive]
  810. return
  811. }
  812. if {$reason == ""} {
  813. set reason "$black(say.$getlang.cycle.1)"
  814. set len [llength $reason]
  815. set random [expr int(rand()*$len)]
  816. set reason [lindex $reason $random]
  817. set text [black:color:set "" $reason]
  818. set reply [join $text]
  819. } else {
  820. set reply $reason
  821. }
  822. putserv "PART $chan :$reply"
  823. putserv "JOIN $chan"
  824. }
  825. ################################### mode ######################################
  826. proc mode:process {nick host hand chan chan1 modes type hosts} {
  827. global botnick black
  828. set cmd_status [btcmd:status $chan $hand "mode" 0]
  829. if {$cmd_status == "1"} {
  830. return
  831. }
  832. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  833. return
  834. }
  835. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  836. return
  837. }
  838. if {$modes == ""} {
  839. switch $type {
  840. 0 {
  841. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "mode"
  842. }
  843. 1 {
  844. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "mode"
  845. }
  846. 2 {
  847. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "mode"
  848. }
  849. }
  850. return 0
  851. }
  852. if {![validchan $chan]} {
  853. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  854. return
  855. }
  856. if {![onchan $botnick $chan]} {
  857. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  858. return
  859. }
  860. if {![botisop $chan]} {
  861. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  862. return
  863. }
  864. if {![regexp {^[+ -]} $modes]} {
  865. switch $type {
  866. 0 {
  867. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "mode"
  868. }
  869. 1 {
  870. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "mode"
  871. }
  872. 2 {
  873. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "mode"
  874. }
  875. }
  876. return
  877. }
  878. blacktools:tell $nick $host $hand $chan $chan1 mode.6 $modes
  879. if {![string equal -nocase $modes "+b"] && ![string equal -nocase $modes "-b"]} {
  880. putserv "MODE $chan $modes"
  881. channel set $chan chanmode $modes
  882. } else {
  883. putserv "MODE $chan $modes $hosts"
  884. }
  885. }
  886. ################################## myset #############################
  887. proc myset:process {nick host hand chan chan1 flags typez type chan2 arg} {
  888. global black
  889. set cmd_status [btcmd:status $chan $hand "myset" 0]
  890. if {$cmd_status == "1"} {
  891. return
  892. }
  893. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  894. return
  895. }
  896. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  897. return
  898. }
  899. set show_greet $arg
  900. set show_typez $typez
  901. if {$flags == ""} {
  902. switch $type {
  903. 0 {
  904. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  905. }
  906. 1 {
  907. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  908. }
  909. 2 {
  910. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  911. }
  912. }
  913. return 0
  914. }
  915. switch -exact -- [string tolower $flags] {
  916. lang {
  917. if {$typez == ""} {
  918. switch $type {
  919. 0 {
  920. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  921. }
  922. 1 {
  923. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  924. }
  925. 2 {
  926. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  927. }
  928. }
  929. return
  930. }
  931. if {[string equal -nocase $typez "reset"]} {
  932. setuser $hand XTRA OUTPUT_LANG
  933. blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
  934. return
  935. }
  936. if {[string equal -nocase $typez "show"]} {
  937. set get [getuser $hand XTRA OUTPUT_LANG]
  938. if {$get == ""} { set get "N/A" }
  939. blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
  940. return
  941. }
  942. if {![file exists "$black(dirname)/BlackTools/lang/BT.[string tolower $typez].lang.tcl"]} {
  943. blacktools:tell $nick $host $hand $chan $chan1 myset.5 \002[string tolower $typez]\002
  944. return
  945. }
  946. setuser $hand XTRA OUTPUT_LANG $typez
  947. blacktools:tell $nick $host $hand $chan $chan1 myset.1 $typez
  948. return
  949. }
  950. addhost {
  951. if {[matchattr $hand mno]} {
  952. set found_it 0
  953. set found_user ""
  954. if {$typez == ""} {
  955. switch $type {
  956. 0 {
  957. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  958. }
  959. 1 {
  960. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  961. }
  962. 2 {
  963. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  964. }
  965. }
  966. return
  967. }
  968. if {![string equal -nocase $typez "-telnet!*@*"]} {
  969. foreach u [userlist] {
  970. set h [getuser $u hosts]
  971. foreach hs $h {
  972. if {[string match -nocase $hs $typez]} {
  973. set found_it 1
  974. set found_user $u
  975. }
  976. }
  977. }
  978. }
  979. if {$found_it == "1"} {
  980. blacktools:tell $nick $host $hand $chan $chan1 addhost.1 "[split $found_user] $typez"
  981. return
  982. }
  983. setuser $hand HOSTS $typez
  984. blacktools:tell $nick $host $hand $chan $chan1 myset.7 $typez
  985. }
  986. }
  987. delhost {
  988. if {[matchattr $hand mno]} {
  989. set found_it 0
  990. if {$typez == ""} {
  991. switch $type {
  992. 0 {
  993. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  994. }
  995. 1 {
  996. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  997. }
  998. 2 {
  999. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1000. }
  1001. }
  1002. return
  1003. }
  1004. set h [getuser $hand hosts]
  1005. foreach hs $h {
  1006. if {[string match -nocase $hs $typez]} {
  1007. set found_it 1
  1008. }
  1009. }
  1010. if {$found_it == "0"} {
  1011. blacktools:tell $nick $host $hand $chan $chan1 myset.9 $typez
  1012. return
  1013. }
  1014. delhost $hand $typez
  1015. blacktools:tell $nick $host $hand $chan $chan1 myset.8 $typez
  1016. }
  1017. }
  1018. greet {
  1019. if {$typez == ""} {
  1020. switch $type {
  1021. 0 {
  1022. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1023. }
  1024. 1 {
  1025. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1026. }
  1027. 2 {
  1028. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1029. }
  1030. }
  1031. return
  1032. }
  1033. if {[string equal -nocase $typez "show"]} {
  1034. set get [getuser $hand INFO]
  1035. if {$get == ""} { set get "N/A" }
  1036. blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
  1037. return
  1038. }
  1039. if {[string equal -nocase $typez "reset"]} {
  1040. setuser $hand INFO ""
  1041. blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
  1042. return
  1043. }
  1044. setuser $hand INFO $arg
  1045. blacktools:tell $nick $host $hand $chan $chan1 myset.6 $show_greet
  1046. }
  1047. auto {
  1048. if {[matchattr $hand mno|M $chan]} {
  1049. if {[regexp {^[&#]} $chan2]} {
  1050. set actchan $chan2
  1051. } else {
  1052. if {[string equal -nocase $chan2 "global"]} {
  1053. set actchan "global"
  1054. } else {
  1055. set actchan $chan
  1056. }
  1057. }
  1058. if {![regexp {^[+ -]} $typez]} {
  1059. switch $type {
  1060. 0 {
  1061. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1062. }
  1063. 1 {
  1064. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1065. }
  1066. 2 {
  1067. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1068. }
  1069. }
  1070. return
  1071. }
  1072. set verify [string trim $typez {"+","-"}]
  1073. if {![string equal -nocase $verify "o"] && ![string equal -nocase $verify "v"]} {
  1074. if {$type == "0"} {
  1075. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1076. }
  1077. if {$type == "1"} {
  1078. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1079. }
  1080. return
  1081. }
  1082. if {[matchattr $hand mno] && [string equal -nocase "$actchan" "global"]} {
  1083. if {[string match -nocase $typez "+o"]} {
  1084. if {[matchattr $hand g]} {
  1085. chattr $hand -g
  1086. }
  1087. chattr $hand +a
  1088. blacktools:tell $nick $host $hand $actchan $chan1 auto.6 $hand
  1089. }
  1090. if {[string match -nocase $typez "-o"]} {
  1091. chattr $hand -a
  1092. blacktools:tell $nick $host $hand $actchan $chan1 auto.14 $hand
  1093. }
  1094. if {[string match -nocase $typez "+v"]} {
  1095. if {[matchattr $hand a]} {
  1096. chattr $hand -a
  1097. }
  1098. chattr $hand +g
  1099. blacktools:tell $nick $host $hand $actchan $chan1 auto.7 $hand
  1100. }
  1101. if {[string match -nocase $typez "-v"]} {
  1102. chattr $hand -g
  1103. blacktools:tell $nick $host $hand $actchan $chan1 auto.15 $hand
  1104. }
  1105. return
  1106. }
  1107. if {[string match -nocase $typez "+o"]} {
  1108. if {[matchattr $hand -|g $actchan]} {
  1109. chattr $hand -|-g $actchan
  1110. }
  1111. chattr $hand -|a $actchan
  1112. blacktools:tell $nick $host $hand $actchan $chan1 auto.8 $hand
  1113. }
  1114. if {[string match -nocase $typez "-o"]} {
  1115. chattr $hand -|-a $actchan
  1116. blacktools:tell $nick $host $hand $actchan $chan1 auto.16 $hand
  1117. }
  1118. if {[string match -nocase $typez "+v"]} {
  1119. if {[matchattr $hand -|a $actchan]} {
  1120. chattr $hand -|-a $actchan
  1121. }
  1122. chattr $hand -|g $actchan
  1123. blacktools:tell $nick $host $hand $actchan $chan1 auto.9 $hand
  1124. }
  1125. if {[string match -nocase $typez "-v"]} {
  1126. chattr $hand -|-g $actchan
  1127. blacktools:tell $nick $host $hand $actchan $chan1 auto.17 $hand
  1128. }
  1129. }
  1130. }
  1131. handle {
  1132. if {[matchattr $hand mno|M $chan]} {
  1133. if {$typez == ""} {
  1134. switch $type {
  1135. 0 {
  1136. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1137. }
  1138. 1 {
  1139. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1140. }
  1141. 2 {
  1142. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1143. }
  1144. }
  1145. return
  1146. }
  1147. if {[string equal -nocase $typez "show"]} {
  1148. blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $hand"
  1149. return
  1150. }
  1151. if {[validuser $typez]} {
  1152. blacktools:tell $nick $host $hand $chan $chan1 chuser.3 none
  1153. return
  1154. }
  1155. blacktools:tell $nick $host $hand $chan $chan1 myset.4 "$show_typez"
  1156. chhandle $hand $typez
  1157. }
  1158. }
  1159. notes {
  1160. if {$typez == ""} {
  1161. switch $type {
  1162. 0 {
  1163. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1164. }
  1165. 1 {
  1166. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1167. }
  1168. 2 {
  1169. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1170. }
  1171. }
  1172. return
  1173. }
  1174. switch $typez {
  1175. on {
  1176. blacktools:tell $nick $host $hand $chan $chan1 myset.19 "myset"
  1177. setuser $hand XTRA NO_NOTES
  1178. }
  1179. off {
  1180. blacktools:tell $nick $host $hand $chan $chan1 myset.20 "myset"
  1181. setuser $hand XTRA NO_NOTES 1
  1182. }
  1183. show {
  1184. set get [getuser $hand XTRA NO_NOTES]
  1185. if {$get != ""} { set get "OFF" } else { set get "ON" }
  1186. blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
  1187. return
  1188. }
  1189. default {
  1190. switch $type {
  1191. 0 {
  1192. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1193. }
  1194. 1 {
  1195. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1196. }
  1197. 2 {
  1198. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1199. }
  1200. }
  1201. }
  1202. }
  1203. }
  1204. noteexpire {
  1205. if {$typez == ""} {
  1206. switch $type {
  1207. 0 {
  1208. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1209. }
  1210. 1 {
  1211. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1212. }
  1213. 2 {
  1214. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1215. }
  1216. }
  1217. return
  1218. }
  1219. if {[string equal -nocase $typez "reset"]} {
  1220. setuser $hand XTRA NOTE_EXPIRE
  1221. blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
  1222. return
  1223. }
  1224. if {[string equal -nocase $typez "show"]} {
  1225. set get [getuser $hand XTRA NOTE_EXPIRE]
  1226. if {$get == ""} { set get "N/A" }
  1227. blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
  1228. return
  1229. }
  1230. if {![regexp {^[0-9]} $typez]} {
  1231. switch $type {
  1232. 0 {
  1233. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1234. }
  1235. 1 {
  1236. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1237. }
  1238. 2 {
  1239. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1240. }
  1241. }
  1242. return
  1243. }
  1244. set return_time [time_return_minute $typez]
  1245. if {$return_time == "-1"} {
  1246. switch $type {
  1247. 0 {
  1248. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1249. }
  1250. 1 {
  1251. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1252. }
  1253. 2 {
  1254. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1255. }
  1256. }
  1257. return
  1258. }
  1259. setuser $hand XTRA NOTE_EXPIRE [string tolower $typez]
  1260. blacktools:tell $nick $host $hand $chan $chan1 myset.13 $typez
  1261. }
  1262. autoinvite {
  1263. switch [string tolower $typez] {
  1264. show {
  1265. set get [getuser $hand XTRA AUTOINVITE]
  1266. if {$get == ""} { set get "N/A" }
  1267. if {$get == "1"} { set get "on"} else { set get "off" }
  1268. blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
  1269. }
  1270. reset {
  1271. setuser $hand XTRA AUTOINVITE
  1272. blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
  1273. }
  1274. on {
  1275. setuser $hand XTRA AUTOINVITE 1
  1276. blacktools:tell $nick $host $hand $chan $chan1 myset.3 $typez
  1277. }
  1278. off {
  1279. setuser $hand XTRA AUTOINVITE 0
  1280. blacktools:tell $nick $host $hand $chan $chan1 myset.3 $typez
  1281. }
  1282. }
  1283. }
  1284. output {
  1285. switch [string tolower $typez] {
  1286. show {
  1287. set get [getuser $hand XTRA OUTPUT_TYPE]
  1288. if {$get == ""} { set get "N/A" }
  1289. if {$get == "0"} { set get "NOTICE" } elseif {$get == "1"} { set get "CHAN" } elseif {$get == "2"} { set get "MSG" } else { set get "NOTICE"}
  1290. blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
  1291. }
  1292. reset {
  1293. setuser $hand XTRA OUTPUT_TYPE
  1294. blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
  1295. }
  1296. notice {
  1297. setuser $hand XTRA OUTPUT_TYPE 0
  1298. blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
  1299. }
  1300. chan {
  1301. setuser $hand XTRA OUTPUT_TYPE 1
  1302. blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
  1303. }
  1304. msg {
  1305. setuser $hand XTRA OUTPUT_TYPE 2
  1306. blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
  1307. }
  1308. }
  1309. }
  1310. colors {
  1311. if {[matchattr $hand mno|MAOV $chan]} {
  1312. if {$typez == ""} {
  1313. switch $type {
  1314. 0 {
  1315. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1316. }
  1317. 1 {
  1318. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1319. }
  1320. 2 {
  1321. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1322. }
  1323. }
  1324. return
  1325. }
  1326. if {[string equal -nocase $typez "reset"]} {
  1327. setuser $hand XTRA OUTPUT_COLORS
  1328. blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
  1329. return
  1330. }
  1331. if {[string equal -nocase $typez "show"]} {
  1332. set get [getuser $hand XTRA OUTPUT_COLORS]
  1333. if {$get == ""} { set get $black(default_colors) }
  1334. blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
  1335. return
  1336. }
  1337. set validcolors "bold underline red blue green yellow orange cyan grey brown purple pink black"
  1338. set notvalid 0
  1339. if {[llength $arg] > 4 || [llength $arg] < 4} {
  1340. blacktools:tell $nick $host $hand $chan $chan1 myset.14 none
  1341. return
  1342. }
  1343. foreach color $arg {
  1344. if {[lsearch [string tolower $color] $validcolors] < -1} {
  1345. set notvalid 1
  1346. }
  1347. }
  1348. if {$notvalid == "1"} {
  1349. blacktools:tell $nick $host $hand $chan $chan1 myset.15 none
  1350. return
  1351. }
  1352. blacktools:tell $nick $host $hand $chan $chan1 myset.16 $show_greet
  1353. setuser $hand XTRA OUTPUT_COLORS [string tolower $arg]
  1354. }
  1355. }
  1356. mychan {
  1357. if {[matchattr $hand mno|MAOV $chan]} {
  1358. if {$typez == ""} {
  1359. switch $type {
  1360. 0 {
  1361. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1362. }
  1363. 1 {
  1364. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1365. }
  1366. 2 {
  1367. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1368. }
  1369. }
  1370. return
  1371. }
  1372. if {[string equal -nocase $typez "reset"]} {
  1373. setuser $hand XTRA MYCHAN
  1374. blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
  1375. return
  1376. }
  1377. if {[string equal -nocase $typez "show"]} {
  1378. set get [getuser $hand XTRA MYCHAN]
  1379. if {$get == ""} { set get "N/A" }
  1380. blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
  1381. return
  1382. }
  1383. if {![regexp {^[&#]} $typez]} {
  1384. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1385. return
  1386. }
  1387. if {![validchan $typez]} {
  1388. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1389. return
  1390. }
  1391. setuser $hand XTRA MYCHAN [string tolower $typez]
  1392. blacktools:tell $nick $host $hand $chan $chan1 myset.10 $typez
  1393. }
  1394. }
  1395. mychar {
  1396. if {[matchattr $hand mno|MAOV $chan]} {
  1397. if {$typez == ""} {
  1398. switch $type {
  1399. 0 {
  1400. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1401. }
  1402. 1 {
  1403. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1404. }
  1405. 2 {
  1406. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1407. }
  1408. }
  1409. return
  1410. }
  1411. if {[string equal -nocase $typez "reset"]} {
  1412. setuser $hand XTRA MYCHAR
  1413. blacktools:tell $nick $host $hand $chan $chan1 myset.11 $flags
  1414. return
  1415. }
  1416. if {[string equal -nocase $typez "show"]} {
  1417. set get [getuser $hand XTRA MYCHAR]
  1418. if {$get == ""} { set get "N/A" }
  1419. blacktools:tell $nick $host $hand $chan $chan1 myset.12 "$flags $get"
  1420. return
  1421. }
  1422. setuser $hand XTRA MYCHAR [string tolower $typez]
  1423. blacktools:tell $nick $host $hand $chan $chan1 myset.18 $typez
  1424. }
  1425. }
  1426. default {
  1427. switch $type {
  1428. 0 {
  1429. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "myset"
  1430. }
  1431. 1 {
  1432. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "myset"
  1433. }
  1434. 2 {
  1435. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "myset"
  1436. }
  1437. }
  1438. }
  1439. }
  1440. }
  1441. ################################# set #################################
  1442. proc set:process {nick host hand chan chan1 flags type type1} {
  1443. global botnick black
  1444. set cmd_status [btcmd:status $chan $hand "set" 0]
  1445. if {$cmd_status == "1"} {
  1446. return
  1447. }
  1448. set getlang [string tolower [setting:get $chan lang]]
  1449. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  1450. set flags [string tolower $flags]
  1451. if {[matchattr $hand q]} {
  1452. blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  1453. return
  1454. }
  1455. if {[matchattr $hand -|q $chan]} {
  1456. blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1457. return
  1458. }
  1459. set choption [check_option $nick $host $hand $chan $chan1 $flags $type1 "$flags"]
  1460. if {$choption == "0"} { return }
  1461. if {![validchan $chan]} {
  1462. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1463. return
  1464. }
  1465. if {[regexp {^[+-]} $flags]} {
  1466. set black_setting [setting:exists $flags]
  1467. if {$black_setting == "1"} {
  1468. set iflag [string map {"+" ""
  1469. "-" ""} $flags]
  1470. if {![matchattr $hand n]} {
  1471. if {[string equal -nocase "$iflag" "invisible"] || [string equal -nocase "$iflag" "forward"]} {
  1472. blacktools:tell $nick $host $hand $chan $chan1 set.5 $flags
  1473. return
  1474. }
  1475. }
  1476. set status [setting:status $chan $flags ""]
  1477. switch $status {
  1478. 0 {
  1479. if {[regexp {^[-]} $flags]} {
  1480. blacktools:tell $nick $host $hand $chan $chan1 set.4 $flags
  1481. return
  1482. }
  1483. blacktools:tell $nick $host $hand $chan $chan1 set.6 $flags
  1484. }
  1485. 1 {
  1486. if {[regexp {^[+]} $flags]} {
  1487. blacktools:tell $nick $host $hand $chan $chan1 set.4 $flags
  1488. return
  1489. }
  1490. blacktools:tell $nick $host $hand $chan $chan1 set.6 $flags
  1491. }
  1492. }
  1493. if {[string equal -nocase "+xonly" $flags]} {
  1494. if {![info exists black(logged)]} {
  1495. blacktools:tell $nick $host $hand $chan $chan1 login.3 none
  1496. return
  1497. }
  1498. }
  1499. setting:set $chan $flags ""
  1500. if {[string equal -nocase "+anunt" $flags]} {
  1501. if {[setting:get $chan anunt-showtime] != ""} {
  1502. set time [setting:get $chan anunt-showtime]
  1503. } else {
  1504. set time $black(anunttime)
  1505. }
  1506. set scan_time [time_return_minute $time]
  1507. set black(anunt:$chan:timer_start) $scan_time
  1508. }
  1509. if {[string equal -nocase "+topwords" $flags]} {
  1510. set black(topwords:$chan:timer_start) 1
  1511. }
  1512. if {[string equal -nocase "-anunt" $flags]} {
  1513. if {[info exists black(anunt:$chan:timer_start)]} {
  1514. unset black(anunt:$chan:timer_start)
  1515. }
  1516. if {[info exists black(anunt:counter:$chan)]} {
  1517. unset black(anunt:counter:$chan)
  1518. }
  1519. }
  1520. if {[string equal -nocase "-topwords" $flags]} {
  1521. set black(topwords:$chan:timer_start) 1
  1522. if {[info exists black(topwords:$chan:timer_start)]} {
  1523. unset black(topwords:$chan:timer_start)
  1524. }
  1525. if {[info exists black(topwords:counter:$chan)]} {
  1526. unset black(topwords:counter:$chan)
  1527. }
  1528. }
  1529. if {[string equal -nocase "-voiceme"]} {
  1530. if {[info exists black(voiceme:stat:$chan)]} {
  1531. unset black(voiceme:stat:$chan)
  1532. }
  1533. }
  1534. if {[string equal -nocase "-voiceonmsg"]} {
  1535. if {[info exists black(voiceonmsg:stat:$chan)]} {
  1536. unset black(voiceonmsg:stat:$chan)
  1537. }
  1538. }
  1539. if {[string equal -nocase "+quoteofday" $flags]} {
  1540. if {[setting:get $chan quote-showtime] != ""} {
  1541. set time [setting:get $chan quote-showtime]
  1542. } else {
  1543. set time $black(quote:msgtime)
  1544. }
  1545. set scan_time [time_return_minute $time]
  1546. set black(quote:$chan:timer_start) $scan_time
  1547. }
  1548. if {[string equal -nocase "-quoteofday" $flags]} {
  1549. if {[info exists black(quote:$chan:timer_start)]} {
  1550. unset black(quote:$chan:timer_start)
  1551. }
  1552. if {[info exists black(quote:counter:$chan)]} {
  1553. unset black(quote:counter:$chan)
  1554. }
  1555. }
  1556. if {[string equal -nocase "+clonescan" $flags]} {
  1557. if {[setting:get $chan clonescan-scantime] != ""} {
  1558. set time [setting:get $chan clonescan-scantime]
  1559. } else {
  1560. set time $black(clonescantime)
  1561. }
  1562. set scan_time [time_return_minute $time]
  1563. set black(clonescan:$chan:timer_start) $scan_time
  1564. }
  1565. if {[string equal -nocase "-clonescan" $flags]} {
  1566. if {[info exists black(clonescan:$chan:timer_start)]} {
  1567. unset black(clonescan:$chan:timer_start)
  1568. }
  1569. if {[info exists black(clonescan:counter:$chan)]} {
  1570. unset black(clonescan:counter:$chan)
  1571. }
  1572. }
  1573. if {[string equal -nocase "+antibadchan" $flags]} {
  1574. if {[setting:get $chan badchan-scantime] != ""} {
  1575. set time [setting:get $chan badchan-scantime]
  1576. } else {
  1577. set time $black(badchan:scantime)
  1578. }
  1579. set scan_time [time_return_minute $time]
  1580. set black(badchan:$chan:timer_start) $scan_time
  1581. }
  1582. if {[string equal -nocase "+voiceme" $flags]} {
  1583. if {[setting:get $chan voiceme-showtime] != ""} {
  1584. set time [setting:get $chan voiceme-showtime]
  1585. } else {
  1586. set time $black(voiceme:msgtime)
  1587. }
  1588. set scan_time [time_return_minute $time]
  1589. set black(voiceme:$chan:timer_start) $scan_time
  1590. }
  1591. if {[string equal -nocase "-voiceme" $flags]} {
  1592. if {[info exists black(voiceme:$chan:timer_start)]} {
  1593. unset black(voiceme:$chan:timer_start)
  1594. }
  1595. if {[info exists black(voiceme:counter:$chan)]} {
  1596. unset black(voiceme:counter:$chan)
  1597. }
  1598. }
  1599. if {[string equal -nocase "-antibadchan" $flags]} {
  1600. if {[info exists black(badchan:$chan:timer_start)]} {
  1601. unset black(badchan:$chan:timer_start)
  1602. }
  1603. if {[info exists black(badchan:counter:$chan)]} {
  1604. unset black(badchan:counter:$chan)
  1605. }
  1606. }
  1607. if {[string equal -nocase "+xonly" $flags]} {
  1608. if {![info exists black(logged)]} {
  1609. blacktools:tell $nick $host $hand $chan $chan1 gl.noxonly none
  1610. return
  1611. }
  1612. }
  1613. if {[string equal -nocase "+limit" $flags]} {
  1614. set black(limit:$chan:timer_start) 1
  1615. }
  1616. if {[string equal -nocase "+voiceonmsg" $flags]} {
  1617. set black(voiceonmsg:$chan:timer_start) 1
  1618. }
  1619. if {[string equal -nocase "-limit" $flags]} {
  1620. if {[info exists black(limit:$chan:timer_start)]} {
  1621. unset black(limit:$chan:timer_start)
  1622. }
  1623. }
  1624. if {[string equal -nocase "+idleop" $flags] || [string equal -nocase "+idlevoice" $flags] || [string equal -nocase "+idlehalfop" $flags]} {
  1625. antidle:set $chan
  1626. }
  1627. if {[string equal -nocase "-idleop" $flags] || [string equal -nocase "-idlevoice" $flags] || [string equal -nocase "-idlehalfop" $flags]} {
  1628. antidle:unset $chan
  1629. }
  1630. if {[string equal -nocase "+antispam" $flags]} {
  1631. if {[setting:get $chan antispam-scantime] != ""} {
  1632. set time [setting:get $chan antispam-scantime]
  1633. } else {
  1634. set time $black(spamcycle)
  1635. }
  1636. set scan_time [time_return_minute $time]
  1637. set black(antispam:$chan:timer_start) $scan_time
  1638. }
  1639. if {[string equal -nocase "-antispam" $flags]} {
  1640. if {[info exists black(antispam:$chan:timer_start)]} {
  1641. unset black(antispam:$chan:timer_start)
  1642. }
  1643. if {[info exists black(antispam:counter:$chan)]} {
  1644. unset black(antispam:counter:$chan)
  1645. }
  1646. }
  1647. if {[string equal -nocase "+securemode" $flags]} {
  1648. putserv "MODE $chan :+Dm"
  1649. foreach tmr [utimers] {
  1650. if {[string match "*securemode:timer*" [join [lindex $tmr 1]]]} {
  1651. return
  1652. }
  1653. }
  1654. utimer 30 [list securemode:timer]
  1655. }
  1656. if {[string equal -nocase "-securemode" $flags]} {
  1657. set found_list 0
  1658. foreach tmr [utimers] {
  1659. if {[string match "*securemode:timer*" [join [lindex $tmr 1]]]} {
  1660. putserv "MODE $chan :-Dm"
  1661. set replace(%chan%) $chan1
  1662. set text2 [black:color:set "" $black(say.$getlang.securemode.11)]
  1663. set reply2 [join $text2]
  1664. putserv "PRIVMSG $chan1 :[string map [array get replace] $reply2]"
  1665. if {[info exists black(secure:$chan:list)]} {
  1666. set found_list 1
  1667. if {[llength $black(secure:$chan:list)] > 0} {
  1668. foreach entry $black(secure:$chan:list) {
  1669. putserv "MODE $chan +v $entry"
  1670. if {[info exists black(securecode:$entry:$chan)]} {
  1671. unset black(securecode:$entry:$chan)
  1672. }
  1673. }
  1674. }
  1675. }
  1676. }
  1677. }
  1678. if {$found_list == "1"} {
  1679. if {[info exists black(secure:$chan:list)]} {
  1680. unset black(secure:$chan:list)
  1681. }
  1682. }
  1683. }
  1684. return
  1685. }
  1686. set why [catch {channel set $chan $flags} error]
  1687. if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 set.5 $flags
  1688. return
  1689. } else {
  1690. channel set $chan $flags ; blacktools:tell $nick $host $hand $chan $chan1 set.6 $flags
  1691. }
  1692. } else {
  1693. if {[matchattr $hand nm]} {
  1694. set check_eggcmd [egg:setting_check $flags]
  1695. if {$check_eggcmd == "1"} {
  1696. set return [egg:process $nick $host $hand $chan $chan1 $flags $type]
  1697. if {$return == "0"} {
  1698. blacktools:tell $nick $host $hand $chan $chan1 set.2 "$flags $type"
  1699. } elseif {$return == "1"} {
  1700. blacktools:tell $nick $host $hand $chan $chan1 set.1 "$flags $type"
  1701. return
  1702. } else {
  1703. blacktools:tell $nick $host $hand $chan $chan1 set.9 "$flags $type"
  1704. return
  1705. }
  1706. return
  1707. }
  1708. }
  1709. set black_setting [setting:exists $flags]
  1710. set int_set [catch {channel set $chan $flags $type} error]
  1711. if {$black_setting == "0" && $int_set == "1"} {
  1712. blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
  1713. return
  1714. }
  1715. set choption 1
  1716. set checkflags $flags
  1717. if {$choption == "0"} { return }
  1718. if {[string equal -nocase "joinflood" $flags] || [string equal -nocase "antijoinflood-userset" $flags] || [string equal -nocase "antirepeat-setting" $flags] || [string equal -nocase "chanflood" $flags]} {
  1719. if {![regexp {[0-9]:[0-9]} $type]} {
  1720. blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
  1721. return
  1722. }
  1723. }
  1724. if {[string equal -nocase "url" $flags]} {
  1725. if {$type == ""} {
  1726. blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
  1727. return
  1728. }
  1729. }
  1730. if {[string equal -nocase "badchan-bmethod" $flags] || [string equal -nocase "badnick-bmethod" $flags]} {
  1731. if {[regexp {^[0-9]} $type] && [regexp {[a-z]} $type]} {
  1732. blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
  1733. return
  1734. } elseif {![regexp {^[0-9]} $type]} {
  1735. blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
  1736. return
  1737. } elseif {$type < 1 || $type > 2} {
  1738. blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
  1739. return
  1740. }
  1741. }
  1742. if {[string equal -nocase "anunt-showtime" $flags]} {
  1743. if {$type != ""} {
  1744. set scan_time [time_return_minute $type]
  1745. if {$scan_time == "-1"} {
  1746. set time $black(anunttime)
  1747. set scan_time [time_return_minute $time]
  1748. }
  1749. set black(anunt:$chan:timer_start) $scan_time
  1750. if {[info exists black(anunt:counter:$chan)]} {
  1751. set black(anunt:counter:$chan) 0
  1752. }
  1753. }
  1754. }
  1755. if {[string equal -nocase "voiceme-showtime" $flags]} {
  1756. if {$type != ""} {
  1757. set scan_time [time_return_minute $type]
  1758. if {$scan_time == "-1"} {
  1759. set time $black(voiceme:msgtime)
  1760. set scan_time [time_return_minute $time]
  1761. }
  1762. set black(voiceme:$chan:timer_start) $scan_time
  1763. if {[info exists black(voiceme:counter:$chan)]} {
  1764. set black(voiceme:counter:$chan) 0
  1765. }
  1766. }
  1767. }
  1768. if {[string equal -nocase "quote-showtime" $flags]} {
  1769. if {$type != ""} {
  1770. set scan_time [time_return_minute $type]
  1771. if {$scan_time == "-1"} {
  1772. set time $black(quote:msgtime)
  1773. set scan_time [time_return_minute $time]
  1774. }
  1775. set black(quote:$chan:timer_start) $scan_time
  1776. if {[info exists black(quote:counter:$chan)]} {
  1777. set black(quote:counter:$chan) 0
  1778. }
  1779. }
  1780. }
  1781. if {[string equal -nocase "badchan-scantime" $flags]} {
  1782. if {$type != ""} {
  1783. set scan_time [time_return_minute $type]
  1784. if {$scan_time == "-1"} {
  1785. set time $black(badchan:scantime)
  1786. set scan_time [time_return_minute $time]
  1787. }
  1788. set black(badchan:$chan:timer_start) $scan_time
  1789. if {[info exists black(badchan:counter:$chan)]} {
  1790. set black(badchan:counter:$chan) 0
  1791. }
  1792. }
  1793. }
  1794. if {[string equal -nocase "idle-scantime" $flags]} {
  1795. if {$type != ""} {
  1796. set scan_time [time_return_minute $type]
  1797. if {$scan_time == "-1"} {
  1798. set time $black(idleinterval)
  1799. set scan_time [time_return_minute $time]
  1800. }
  1801. set black(idle:$chan:timer_start) $scan_time
  1802. if {[info exists black(idle:counter:$chan)]} {
  1803. set black(idle:counter:$chan) 0
  1804. }
  1805. }
  1806. }
  1807. if {[string equal -nocase "antispam-scantime" $flags]} {
  1808. if {$type != ""} {
  1809. set scan_time [time_return_minute $type]
  1810. if {$scan_time == "-1"} {
  1811. set time $black(spamcycle)
  1812. set scan_time [time_return_minute $time]
  1813. }
  1814. set black(antispam:$chan:timer_start) $scan_time
  1815. if {[info exists black(antispam:counter:$chan)]} {
  1816. set black(antispam:counter:$chan) 0
  1817. }
  1818. }
  1819. }
  1820. if {[string equal -nocase "clonescan-scantime" $flags]} {
  1821. if {$type != ""} {
  1822. set time ""
  1823. set scan_time [time_return_minute $type]
  1824. if {$scan_time == "-1"} {
  1825. set time $black(clonescantime)
  1826. set scan_time [time_return_minute $time]
  1827. }
  1828. set black(clonescan:$chan:timer_start) $scan_time
  1829. if {[info exists black(clonescan:counter:$chan)]} {
  1830. set black(clonescan:counter:$chan) 0
  1831. }
  1832. }
  1833. }
  1834. if {[string equal -nocase "leave-method" $flags]} {
  1835. if {![string equal -nocase "notice" $type] && ![string equal -nocase "privmsg" $type]} {
  1836. set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "leave"]
  1837. if {$choption == "0"} { return }
  1838. }
  1839. }
  1840. if {[string equal -nocase "greet-method" $flags]} {
  1841. if {![string equal -nocase "notice" $type] && ![string equal -nocase "privmsg" $type]} {
  1842. set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "greet"]
  1843. if {$choption == "0"} { return }
  1844. }
  1845. }
  1846. if {[string equal -nocase "guestnick-msgmethod" $flags]} {
  1847. if {![string equal -nocase "notice" $type] && ![string equal -nocase "privmsg" $type] && ![string equal -nocase "chan" $type]} {
  1848. set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "guestnick"]
  1849. if {$choption == "0"} { return }
  1850. }
  1851. }
  1852. if {[string match -nocase "backchan" $flags]} {
  1853. if {![validchan $type]} {
  1854. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1855. return
  1856. }
  1857. }
  1858. if {[string equal -nocase "xbanlevel" $flags]} {
  1859. if {![regexp {^[0-9]} $type]} {
  1860. blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
  1861. return
  1862. }
  1863. if {$type < 75 || $type > 500} {
  1864. blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
  1865. return
  1866. }
  1867. }
  1868. if {[string equal -nocase "vprotect" $flags]} {
  1869. if {![string equal -nocase "on" $type] && ![string equal -nocase "off" $type]} {
  1870. set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "vprotect"]
  1871. if {$choption == "0"} { return }
  1872. }
  1873. }
  1874. if {[string equal -nocase "oprotect" $flags]} {
  1875. if {![string equal -nocase "on" $type] && ![string equal -nocase "off" $type]} {
  1876. set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "oprotect"]
  1877. if {$choption == "0"} { return }
  1878. }
  1879. }
  1880. if {[string equal -nocase "clonescan-action" $flags]} {
  1881. if {![string equal -nocase "message" $type] && ![string equal -nocase "ban" $type]} {
  1882. set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "clonescan"]
  1883. if {$choption == "0"} { return }
  1884. }
  1885. }
  1886. if {[string equal -nocase "lang" $flags]} {
  1887. if {![file exists "$black(dirname)/BlackTools/lang/BlackTools.[string tolower $type].lang.tcl"]} {
  1888. set choption [check_option $nick $host $hand $chan $chan1 $type $type1 "language"]
  1889. if {$choption == "0"} { return }
  1890. }
  1891. }
  1892. set black_setting [setting:exists $flags]
  1893. if {$black_setting == "2"} {
  1894. set status [setting:status $chan $flags $type]
  1895. if {$status != "0"} {
  1896. blacktools:tell $nick $host $hand $chan $chan1 set.3 "$flags $type"
  1897. return
  1898. }
  1899. set split_flags [split $flags "-"]
  1900. set flags_2 [lindex $split_flags 1]
  1901. if {[string equal -nocase $flags_2 "banmethod"] || [string equal -nocase $flags "banmethod"]} {
  1902. set validnum [check:validnum $type "banmethod" $type1 $nick $host $hand $chan $chan1]
  1903. if {$validnum == "0"} { return }
  1904. }
  1905. if {[string equal -nocase $flags_2 "bantime"] || [string equal -nocase $flags "banmethod"]} {
  1906. set return_time [time_return_minute $type]
  1907. if {$return_time == "-1"} {
  1908. blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
  1909. return
  1910. }
  1911. }
  1912. if {[string equal -nocase $flags_2 "banmask"] || [string equal -nocase $flags "banmask"]} {
  1913. set validnum [check:validnum2 $type "banmask" $type1 $nick $host $hand $chan $chan1]
  1914. if {$validnum == "0"} { return }
  1915. }
  1916. set encoded [join [encoding convertto utf-8 $type]]
  1917. setting:set $chan $flags $encoded
  1918. blacktools:tell $nick $host $hand $chan $chan1 set.8 "$flags $type"
  1919. return
  1920. }
  1921. set why [catch {channel set $chan $flags $type} error]
  1922. if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
  1923. return
  1924. } else {
  1925. if {[string equal -nocase $flags "backchan"]} {
  1926. if {![validchan $type]} {
  1927. blacktools:tell $nick $host $hand $chan $chan1 set.12 $type
  1928. return
  1929. }
  1930. }
  1931. channel set $chan $flags $type ; blacktools:tell $nick $host $hand $chan $chan1 set.8 "$flags $type"
  1932. }
  1933. }
  1934. }
  1935. ################################# unset #######################################
  1936. proc unset:process {nick host hand chan chan1 setting type} {
  1937. global black
  1938. set cmd_status [btcmd:status $chan $hand "unset" 0]
  1939. if {$cmd_status == "1"} {
  1940. return
  1941. }
  1942. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  1943. return
  1944. }
  1945. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1946. return
  1947. }
  1948. if {$setting == ""} {
  1949. switch $type {
  1950. 0 {
  1951. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "unset"
  1952. }
  1953. 1 {
  1954. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "unset"
  1955. }
  1956. 2 {
  1957. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "unset"
  1958. }
  1959. }
  1960. return
  1961. }
  1962. if {[string equal -nocase $setting "flag"]} {
  1963. foreach f $black(extra_flag) {
  1964. if {([string equal -nocase $f "invisible"] || [string equal -nocase $f "forward"]) && [matchattr $hand mo|M $chan] && ![matchattr $hand n]} {
  1965. continue
  1966. }
  1967. unset:all $chan $f
  1968. }
  1969. blacktools:tell $nick $host $hand $chan $chan1 unset.4 none
  1970. return
  1971. }
  1972. if {[string equal -nocase $setting "str"]} {
  1973. foreach f $black(extra_str) {
  1974. unset:all $chan $f
  1975. }
  1976. blacktools:tell $nick $host $hand $chan $chan1 unset.5 none
  1977. return
  1978. }
  1979. set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
  1980. set temp "$black(tempdir)/extra_temp.$timestamp"
  1981. set black_setting [setting:exists $setting]
  1982. if {$black_setting != "0"} {
  1983. if {[string equal -nocase $setting "invisible"] || [string equal -nocase $setting "forward"] && ![matchattr $hand n]} {
  1984. blacktools:tell $nick $host $hand $chan $chan1 unset.1 $setting
  1985. return
  1986. }
  1987. set status [setting:get $chan $setting]
  1988. if {$status != "" && $status != "0"} {
  1989. blacktools:tell $nick $host $hand $chan $chan1 unset.2 $setting
  1990. set file [open $black(extra_file) r]
  1991. set tempwrite [open $temp w]
  1992. while {[gets $file line] != -1} {
  1993. set c [lindex [split $line] 0]
  1994. set gettype [lindex [split $line] 1]
  1995. set comp [lindex [split $line] 2]
  1996. if {$black_setting == "1"} {
  1997. set comp [string map {
  1998. "+" ""
  1999. "-" ""} $comp]
  2000. }
  2001. if {[string equal -nocase $c $chan] && [string equal -nocase $gettype "XTRA"] && [string equal -nocase $comp $setting]} {
  2002. continue
  2003. } else {
  2004. puts $tempwrite $line
  2005. }
  2006. }
  2007. close $tempwrite
  2008. close $file
  2009. file rename -force $temp $black(extra_file)
  2010. if {[string equal -nocase $setting "clonescan-scantime"]} {
  2011. if {[info exists black(clonescan:counter:$chan)]} {
  2012. unset black(clonescan:counter:$chan)
  2013. }
  2014. if {[info exists black(clonescan:$chan:timer_start)]} {
  2015. set black(clonescan:$chan:timer_start) 0
  2016. }
  2017. }
  2018. if {[string equal -nocase $setting "anunt-showtime"]} {
  2019. if {[info exists black(anunt:counter:$chan)]} {
  2020. unset black(anunt:counter:$chan)
  2021. }
  2022. if {[info exists black(anunt:$chan:timer_start)]} {
  2023. set black(anunt:$chan:timer_start) 0
  2024. }
  2025. }
  2026. if {[string equal -nocase $setting "quote-showtime"]} {
  2027. if {[info exists black(quote:counter:$chan)]} {
  2028. unset black(quote:counter:$chan)
  2029. }
  2030. if {[info exists black(quote:$chan:timer_start)]} {
  2031. set black(quote:$chan:timer_start) 0
  2032. }
  2033. }
  2034. if {[string equal -nocase $setting "badchan-scantime"]} {
  2035. if {[info exists black(badchan:counter:$chan)]} {
  2036. unset black(badchan:counter:$chan)
  2037. }
  2038. if {[info exists black(badchan:$chan:timer_start)]} {
  2039. set black(badchan:$chan:timer_start) 0
  2040. }
  2041. }
  2042. if {[string equal -nocase $setting "idle-scantime"]} {
  2043. if {[info exists black(idle:counter:$chan)]} {
  2044. unset black(idle:counter:$chan)
  2045. }
  2046. if {[info exists black(idle:$chan:timer_start)]} {
  2047. set black(idle:$chan:timer_start) 0
  2048. }
  2049. }
  2050. } else {
  2051. blacktools:tell $nick $host $hand $chan $chan1 unset.3 $setting
  2052. }
  2053. } else {
  2054. blacktools:tell $nick $host $hand $chan $chan1 unset.1 $setting
  2055. }
  2056. }
  2057. proc unset:all {chan setting} {
  2058. global black
  2059. set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
  2060. set temp "$black(tempdir)/extra_temp.$timestamp"
  2061. set file [open $black(extra_file) r]
  2062. set tempwrite [open $temp w]
  2063. while {[gets $file line] != -1} {
  2064. set c [lindex [split $line] 0]
  2065. set gettype [lindex [split $line] 1]
  2066. set comp [lindex [split $line] 2]
  2067. if {[regexp {^[+-]} $comp]} {
  2068. set comp [string map {
  2069. "+" ""
  2070. "-" ""} $comp]
  2071. }
  2072. if {[string equal -nocase $c $chan] && [string equal -nocase $gettype "XTRA"] && [string equal -nocase $comp $setting]} {
  2073. continue
  2074. } else {
  2075. puts $tempwrite $line
  2076. }
  2077. }
  2078. close $tempwrite
  2079. close $file
  2080. file rename -force $temp $black(extra_file)
  2081. }
  2082. proc check:validnum {num flags type1 nick host hand chan chan1} {
  2083. global black
  2084. if {![regexp {^[0-9]} $num]} {
  2085. if {$type1 == "0"} {
  2086. blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
  2087. }
  2088. if {$type1 == "1"} {
  2089. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
  2090. }
  2091. return 0
  2092. }
  2093. if {($num < 1) || ($num > 7)} {
  2094. if {$type1 == "0"} {
  2095. blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
  2096. }
  2097. if {$type1 == "1"} {
  2098. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
  2099. }
  2100. return 0
  2101. }
  2102. return 1
  2103. }
  2104. proc check:validnum2 {num flags type1 nick host hand chan chan1} {
  2105. global black
  2106. if {![regexp {^[0-9]} $num]} {
  2107. if {$type1 == "0"} {
  2108. blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
  2109. }
  2110. if {$type1 == "1"} {
  2111. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
  2112. }
  2113. return 0
  2114. }
  2115. if {($num < 1) || ($num > 5)} {
  2116. if {$type1 == "0"} {
  2117. blacktools:tell $nick $host $hand $chan $chan1 gl.instr $flags
  2118. }
  2119. if {$type1 == "1"} {
  2120. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick $flags
  2121. }
  2122. return 0
  2123. }
  2124. return 1
  2125. }
  2126. ############################### ignore ######################################
  2127. proc ignore:process {nick host hand chan chan1 what mask time reason type} {
  2128. global botnick black
  2129. set cmd_status [btcmd:status $chan $hand "ignore" 0]
  2130. set show_mask $mask
  2131. if {$cmd_status == "1"} {
  2132. return
  2133. }
  2134. if {[matchattr $hand q]} {
  2135. blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  2136. return
  2137. }
  2138. if {[matchattr $hand -|q $chan]} {
  2139. blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2140. return
  2141. }
  2142. if {$what == ""} {
  2143. switch $type {
  2144. 0 {
  2145. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
  2146. }
  2147. 1 {
  2148. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
  2149. }
  2150. 2 {
  2151. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
  2152. }
  2153. }
  2154. }
  2155. switch -exact -- [string tolower $what] {
  2156. list {
  2157. if {[llength [ignorelist]] == "0"} { blacktools:tell $nick $host $hand $chan $chan1 ignore.3 none
  2158. return
  2159. }
  2160. foreach ig [ignorelist] {
  2161. set hostig [lindex $ig 0]
  2162. set byig [lindex $ig 4]
  2163. set bytime [lindex $ig 2]
  2164. set reasig [lindex $ig 1]
  2165. if {$bytime != "0"} {
  2166. set bytime [clock format $bytime -format %D-%H:%M:%S]
  2167. } else { set bytime "-"}
  2168. blacktools:tell $nick $host $hand $chan $chan1 ignore.4 "$hostig $byig $bytime [join $reasig]"
  2169. }
  2170. }
  2171. add {
  2172. if {$mask == ""} {
  2173. switch $type {
  2174. 0 {
  2175. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
  2176. }
  2177. 1 {
  2178. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
  2179. }
  2180. 2 {
  2181. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
  2182. }
  2183. }
  2184. return
  2185. }
  2186. if {[isignore $mask]} {
  2187. blacktools:tell $nick $host $hand $chan $chan1 ignore.5 $show_mask
  2188. return
  2189. }
  2190. if {![regexp {[!]} $mask]} {
  2191. switch $type {
  2192. 0 {
  2193. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
  2194. }
  2195. 1 {
  2196. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
  2197. }
  2198. 2 {
  2199. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
  2200. }
  2201. }
  2202. return
  2203. }
  2204. set check_ignore [ignore:stop $mask]
  2205. if {$check_ignore != ""} {
  2206. blacktools:tell $nick $host $hand $chan $chan1 gl.validuser $check_ignore
  2207. return
  2208. }
  2209. if {![regexp {^[0-9]} $time]} {
  2210. set time $black(ignore:default_time)
  2211. }
  2212. set ignore_time [time_return_minute $time]
  2213. if {$reason == ""} { set reason "N/A" }
  2214. newignore $mask $hand $reason $ignore_time
  2215. blacktools:tell $nick $host $hand $chan $chan1 ignore.6 "$show_mask $time $reason"
  2216. }
  2217. del {
  2218. if {$mask == ""} {
  2219. switch $type {
  2220. 0 {
  2221. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
  2222. }
  2223. 1 {
  2224. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
  2225. }
  2226. 2 {
  2227. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
  2228. }
  2229. }
  2230. return
  2231. }
  2232. if {[isignore $mask]} {
  2233. killignore $mask
  2234. } else { blacktools:tell $nick $host $hand $chan $chan1 ignore.8 $show_mask
  2235. return
  2236. }
  2237. blacktools:tell $nick $host $hand $chan $chan1 ignore.9 $show_mask
  2238. }
  2239. default {
  2240. switch $type {
  2241. 0 {
  2242. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "ignore"
  2243. }
  2244. 1 {
  2245. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "ignore"
  2246. }
  2247. 2 {
  2248. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "ignore"
  2249. }
  2250. }
  2251. }
  2252. }
  2253. }
  2254. proc ignore:stop {host} {
  2255. global black
  2256. set finduser ""
  2257. if {[userlist] != ""} {
  2258. foreach usr [userlist] {
  2259. set hst [getuser $usr hosts]
  2260. foreach hhost $hst {
  2261. if {[string match -nocase $host $hhost] || [string match -nocase $hhost $host]} {
  2262. set finduser $usr
  2263. }
  2264. }
  2265. }
  2266. }
  2267. return $finduser
  2268. }
  2269. ################################# show ################################
  2270. proc show:process {nick host hand chan chan1 wich type} {
  2271. global black botnick
  2272. set cmd_status [btcmd:status $chan $hand "show" 0]
  2273. if {$cmd_status == "1"} {
  2274. return
  2275. }
  2276. set getlang [string tolower [setting:get $chan lang]]
  2277. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  2278. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  2279. return
  2280. }
  2281. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2282. return
  2283. }
  2284. if {$wich == ""} {
  2285. switch $type {
  2286. 0 {
  2287. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "show"
  2288. }
  2289. 1 {
  2290. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "show"
  2291. }
  2292. 2 {
  2293. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "show"
  2294. }
  2295. }
  2296. return 0
  2297. }
  2298. if {![validchan $chan]} {
  2299. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2300. return
  2301. }
  2302. set setting_exists [setting:exists $wich]
  2303. if {$setting_exists == "0"} {
  2304. set why [catch {channel get $chan $wich} error]
  2305. if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 show.5 $wich
  2306. return
  2307. } else {
  2308. set replyinfo [channel get $chan $wich]
  2309. if {($replyinfo != "") && ($replyinfo == "1")} {
  2310. blacktools:tell $nick $host $hand $chan $chan1 show.7 "$wich"
  2311. return
  2312. }
  2313. if {($replyinfo != "") && ($replyinfo == "0")} {
  2314. blacktools:tell $nick $host $hand $chan $chan1 show.8 "$wich"
  2315. return
  2316. }
  2317. blacktools:tell $nick $host $hand $chan $chan1 show.6 "$wich $replyinfo"
  2318. }
  2319. return
  2320. }
  2321. set replyinfo [setting:get $chan $wich]
  2322. if {$setting_exists == "1"} {
  2323. if {([string equal -nocase $wich "invisible"] || [string equal -nocase $wich "forward"]) && ![matchattr $hand n]} {
  2324. blacktools:tell $nick $host $hand $chan $chan1 show.5 $wich
  2325. return
  2326. }
  2327. if {[regexp {^[1]} $replyinfo]} {
  2328. blacktools:tell $nick $host $hand $chan $chan1 show.7 $wich
  2329. return
  2330. }
  2331. if {[regexp {^[0]} $replyinfo]} {
  2332. blacktools:tell $nick $host $hand $chan $chan1 show.8 $wich
  2333. return
  2334. }
  2335. if {($replyinfo == "") && [string equal -nocase $wich "oprotect"] || [string equal -nocase $wich "vprotect"] || [string equal -nocase $wich "hoprotect"]} {
  2336. blacktools:tell $nick $host $hand $chan $chan1 show.7 $wich
  2337. return
  2338. }
  2339. if {$replyinfo == ""} {
  2340. blacktools:tell $nick $host $hand $chan $chan1 show.8 $wich
  2341. }
  2342. return
  2343. }
  2344. set split_wich [split $wich "-"]
  2345. set name [lindex $split_wich 0]
  2346. if {$replyinfo == ""} {
  2347. switch -exact -- [string tolower $wich] {
  2348. badnick-bmethod {
  2349. set replyinfo $black(badnbanmethod)
  2350. }
  2351. voiceme-showtime {
  2352. set replyinfo $black(voiceme:msgtime)
  2353. }
  2354. quote-showtime {
  2355. set replyinfo $black(quote:msgtime)
  2356. }
  2357. anunt-showtime {
  2358. set replyinfo $black(anunttime)
  2359. }
  2360. quitpartmsgflood-char {
  2361. set replyinfo $black(badquitpartmsgchar)
  2362. }
  2363. repetitivechars-char {
  2364. set replyinfo $black(repetitivechars:num)
  2365. }
  2366. antispam-scantime {
  2367. set replyinfo $black(spamcycle)
  2368. }
  2369. clonescan-scantime {
  2370. set replyinfo $black(clonescantime)
  2371. }
  2372. badchan-scantime {
  2373. set replyinfo $black(badchan:scantime)
  2374. }
  2375. idle-scantime {
  2376. set replyinfo $black(idleinterval)
  2377. }
  2378. lang {
  2379. set replyinfo $black(default_lang)
  2380. }
  2381. greet-method {
  2382. set replyinfo $black(greet:method)
  2383. }
  2384. leave-method {
  2385. set replyinfo $black(leave:method)
  2386. }
  2387. backchan {
  2388. set replyinfo $black(say.ro.gl.noset)
  2389. }
  2390. url {
  2391. set replyinfo $black(say.ro.gl.noset)
  2392. }
  2393. idlehalfopmax {
  2394. set replyinfo $black(idlehalfopmax)
  2395. }
  2396. nickflood-repeat {
  2397. set replyinfo $black(nickfloodrepeats)
  2398. }
  2399. w-message {
  2400. set replyinfo $black(say.$getlang.w.6)
  2401. }
  2402. antilongtextmax {
  2403. set replyinfo $black(longchar)
  2404. }
  2405. joinflood {
  2406. set replyinfo $black(joinflood:protect)
  2407. }
  2408. antijoinflood-userset {
  2409. set replyinfo $black(antijoinflood_user_joins)
  2410. }
  2411. chanflood {
  2412. set replyinfo $black(antichanfloodrepeats)
  2413. }
  2414. idleopmax {
  2415. set replyinfo $black(idleopmax)
  2416. }
  2417. idlevoicemax {
  2418. set replyinfo $black(idlevoicemax)
  2419. }
  2420. expirebans {
  2421. set replyinfo $black(default:bantime)
  2422. }
  2423. antirepeat-setting {
  2424. set replyinfo $black(antirepeat:repeats)
  2425. }
  2426. gag-reason {
  2427. set replyinfo $black(say.$getlang.gag.6)
  2428. }
  2429. w-reason {
  2430. set len [llength $black(say.$getlang.w.5)]
  2431. set random [expr int(rand()*$len)]
  2432. set reply [lindex $black(say.$getlang.w.5) $random]
  2433. set replyinfo $reply
  2434. }
  2435. k-reason {
  2436. set len [llength $black(say.$getlang.k.5)]
  2437. set random [expr int(rand()*$len)]
  2438. set reply [lindex $black(say.$getlang.k.5) $random]
  2439. set replyinfo $reply
  2440. }
  2441. b-reason {
  2442. set len [llength $black(say.$getlang.b.5)]
  2443. set random [expr int(rand()*$len)]
  2444. set reply [lindex $black(say.$getlang.b.5) $random]
  2445. set replyinfo $reply
  2446. }
  2447. badchan-bmethod {
  2448. set replyinfo $black(badcbanmethod)
  2449. }
  2450. d-bantime {
  2451. set replyinfo $black(dbtime)
  2452. }
  2453. antispam-message {
  2454. set replyinfo $black(say.$getlang.antispam.2)
  2455. }
  2456. limit-default {
  2457. set replyinfo $black(limit:default)
  2458. }
  2459. clonescan-maxclone {
  2460. set replyinfo $black(maxclone)
  2461. }
  2462. clonescan-action {
  2463. set replyinfo "message"
  2464. }
  2465. guestnick-message {
  2466. set replyinfo $black(say.$getlang.guestnick.10)
  2467. }
  2468. guestnick-msgmethod {
  2469. set replyinfo $black(guestnick:msgmethod)
  2470. }
  2471. voiceonmsg-idletime {
  2472. set replyinfo $black(voiceonmsg:idletime)
  2473. }
  2474. voiceonmsg-linenum {
  2475. set replyinfo $black(voiceonmsg:linenum)
  2476. }
  2477. xbantime {
  2478. set replyinfo $black(chanserv:bantime)
  2479. }
  2480. xbanlevel {
  2481. set replyinfo $black(chanserv:banlevel)
  2482. }
  2483. default {
  2484. set replyinfo [show:details $wich $name $setting_exists $chan ""]
  2485. }
  2486. }
  2487. } else {
  2488. set replyinfo [show:details $wich $name $setting_exists $chan $replyinfo]
  2489. }
  2490. set remain_timer [show:getscantime:remain $wich $chan]
  2491. if {$remain_timer == "-1"} {
  2492. blacktools:tell $nick $host $hand $chan $chan1 show.6 "$wich [join $replyinfo]"
  2493. } else {
  2494. blacktools:tell $nick $host $hand $chan $chan1 show.4 "$wich [join $replyinfo] $remain_timer"
  2495. }
  2496. }
  2497. proc show:getscantime:remain {setting chan} {
  2498. global black
  2499. set remain ""
  2500. set mod [split $setting "-"]
  2501. set mod [lindex $mod 0]
  2502. if {[info exists black($mod:$chan:timer_start)] && [info exists black($mod:counter:$chan)]} {
  2503. set remain [expr $black($mod:$chan:timer_start) - $black($mod:counter:$chan)]
  2504. }
  2505. if {$remain == ""} {
  2506. return -1
  2507. } else { return $remain }
  2508. }
  2509. proc show:details {wich name setting_exists chan set} {
  2510. global black
  2511. set getlang [string tolower [setting:get $chan lang]]
  2512. set cmds "dr vr troll bot n id spam bw black stick d next badchan spam"
  2513. set replyinfo ""
  2514. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  2515. if {[string equal -nocase $wich "$name-banmethod"]} {
  2516. if {$set == ""} {
  2517. set replyinfo [show:getbanmethod $black($name:banmethod)]
  2518. } else {
  2519. set replyinfo [show:getbanmethod $set]
  2520. }
  2521. }
  2522. if {[string equal -nocase $wich "$name-banmask"]} {
  2523. if {$set == ""} {
  2524. set replyinfo [show:getbanmask $black($name:banmask)]
  2525. } else {
  2526. set replyinfo [show:getbanmask $set]
  2527. }
  2528. }
  2529. if {$setting_exists == "2"} {
  2530. if {[string equal -nocase $wich "$name-bantime"]} {
  2531. if {$set == ""} {
  2532. set replyinfo $black($name:bantime)
  2533. } else {
  2534. set replyinfo $set
  2535. }
  2536. }
  2537. }
  2538. if {$setting_exists == "2"} {
  2539. if {[string equal -nocase $wich "$name-warn"]} {
  2540. if {$set == ""} {
  2541. set replyinfo $black(say.$getlang.$name.2)
  2542. } else {
  2543. set replyinfo $set
  2544. }
  2545. }
  2546. }
  2547. if {$setting_exists == "2"} {
  2548. if {[string equal -nocase $wich "$name-reason"] && [lsearch -exact [string tolower $cmds] [string tolower $name]] > -1} {
  2549. if {$set == ""} {
  2550. set replyinfo $black(say.$getlang.$name.5)
  2551. } else {
  2552. set replyinfo $set
  2553. }
  2554. }
  2555. }
  2556. if {$setting_exists == "2" && $replyinfo == ""} {
  2557. if {[string equal -nocase $wich "$name-reason"]} {
  2558. if {$set == ""} {
  2559. set replyinfo $black(say.$getlang.$name.1)
  2560. } else {
  2561. set replyinfo $set
  2562. }
  2563. }
  2564. }
  2565. if {$replyinfo == ""} {
  2566. set replyinfo $set
  2567. }
  2568. return $replyinfo
  2569. }
  2570. proc show:getbanmask {num} {
  2571. global black
  2572. switch $num {
  2573. 1 {
  2574. return "#1 - *!*@host"
  2575. }
  2576. 2 {
  2577. return "#2 - *!user@host"
  2578. }
  2579. 3 {
  2580. return "#3 - nick!user@host"
  2581. }
  2582. 4 {
  2583. return "#4 - nick!*@*"
  2584. }
  2585. 5 {
  2586. return "#5 - *!user@*"
  2587. }
  2588. }
  2589. }
  2590. proc show:getbanmethod {num} {
  2591. global black
  2592. switch $num {
  2593. 1 {
  2594. return "#1 - warn"
  2595. }
  2596. 2 {
  2597. return "#2 - kick"
  2598. }
  2599. 3 {
  2600. return "#3 - ban"
  2601. }
  2602. 4 {
  2603. return "#4 - warn -> kick"
  2604. }
  2605. 5 {
  2606. return "#5 - warn -> kick -> ban"
  2607. }
  2608. 6 {
  2609. return "#6 - kick -> ban"
  2610. }
  2611. 7 {
  2612. return "#7 - warn -> ban"
  2613. }
  2614. }
  2615. }
  2616. ############################## stats ##################################
  2617. proc stats:process {nick host hand chan chan1 user option type} {
  2618. global botnick black timezone
  2619. set cmd_status [btcmd:status $chan $hand "stats" 0]
  2620. if {$cmd_status == "1"} {
  2621. return
  2622. }
  2623. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  2624. return
  2625. }
  2626. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2627. return
  2628. }
  2629. set handle ""
  2630. set show_user $user
  2631. set validuser 0
  2632. set mask ""
  2633. if {$user == ""} {
  2634. switch $type {
  2635. 0 {
  2636. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "stats"
  2637. }
  2638. 1 {
  2639. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "stats"
  2640. }
  2641. 2 {
  2642. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "stats"
  2643. }
  2644. }
  2645. return
  2646. }
  2647. if {![validchan $chan]} {
  2648. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2649. return
  2650. }
  2651. if {[validuser $user]} {
  2652. set validuser 1
  2653. } else {
  2654. set handle [nick2hand $user]
  2655. if {[validuser $handle]} {
  2656. set user $handle
  2657. set validuser 1
  2658. }
  2659. }
  2660. if {$validuser == "0"} {
  2661. blacktools:tell $nick $host $hand $chan $chan1 gl.usernotexist $user
  2662. return
  2663. }
  2664. switch [string tolower $option] {
  2665. reset {
  2666. if {[matchattr $hand nmo|M]} {
  2667. set reseted 0
  2668. set cmds_today [getuser $user XTRA CMD_STATS_TODAY($chan)]
  2669. set cmds_total [getuser $user XTRA CMD_STATS($chan)]
  2670. if {$cmds_today != ""} {
  2671. set reseted 1
  2672. setuser $user XTRA CMD_STATS_TODAY($chan)
  2673. }
  2674. if {$cmds_total != ""} {
  2675. set reseted 1
  2676. setuser $user XTRA CMD_STATS($chan)
  2677. }
  2678. if {$reseted == "1"} {
  2679. blacktools:tell $nick $host $hand $chan $chan1 stats.5 $user
  2680. } else {
  2681. blacktools:tell $nick $host $hand $chan $chan1 stats.1 $user
  2682. }
  2683. }
  2684. }
  2685. total {
  2686. stats:process:show $nick $host $hand $chan $chan1 $user "CMD_STATS($chan)"
  2687. }
  2688. default {
  2689. stats:process:show $nick $host $hand $chan $chan1 $user "CMD_STATS_TODAY($chan)"
  2690. }
  2691. }
  2692. }
  2693. proc stats:process:show {nick host hand chan chan1 user option} {
  2694. global black lastbind
  2695. set cmds [getuser $user XTRA $option]
  2696. set stats ""
  2697. set total 0
  2698. set total_k 0
  2699. set cmds_gl ""
  2700. if {[matchattr $hand nmo]} {
  2701. set cmds_gl [getuser $user XTRA BANS(GLOBAL)]
  2702. if {$cmds_gl == ""} {set cmds_gl 0 }
  2703. }
  2704. if {$cmds == ""} {
  2705. blacktools:tell $nick $host $hand $chan $chan1 stats.1 $user
  2706. return
  2707. }
  2708. foreach stat $cmds {
  2709. if {$stat != ""} {
  2710. set split_stat [split $stat ":"]
  2711. set cmd [lindex $split_stat 0]
  2712. set num [lindex $split_stat 1]
  2713. if {[string equal -nocase "k" $cmd] || [string equal -nocase "w" $cmd]} {
  2714. set total_k [expr $total_k + $num]
  2715. } else {
  2716. set total [expr $total + $num]
  2717. }
  2718. lappend stats "[black:color "1" $hand $cmd] ([black:color "2" $hand $num])"
  2719. }
  2720. }
  2721. if {[matchattr $hand nmo]} {
  2722. if {[string equal -nocase "CMD_STATS_TODAY($chan)" $option]} {
  2723. blacktools:tell $nick $host $hand $chan $chan1 stats.2 "$user $total $total_k [join $stats " ; "]"
  2724. } else {
  2725. blacktools:tell $nick $host $hand $chan $chan1 stats.4 "$user $total $cmds_gl $total_k [join $stats " ; "]"
  2726. }
  2727. } else {
  2728. if {[string equal -nocase "CMD_STATS_TODAY($chan)" $option]} {
  2729. blacktools:tell $nick $host $hand $chan $chan1 stats.2 "$user $total $total_k [join $stats " ; "]"
  2730. } else {
  2731. blacktools:tell $nick $host $hand $chan $chan1 stats.3 "$user $total $total_k [join $stats " ; "]"
  2732. }
  2733. }
  2734. }
  2735. ################################# r #######################################
  2736. proc topic:refresh {nick host hand chan chan1 arg} {
  2737. global black lastbind botnick
  2738. set cmd_status [btcmd:status $chan $hand "r" 0]
  2739. if {$cmd_status == "1"} {
  2740. return
  2741. }
  2742. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  2743. return
  2744. }
  2745. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2746. return
  2747. }
  2748. if {![validchan $chan]} {
  2749. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2750. return
  2751. }
  2752. if {![onchan $botnick $chan]} {
  2753. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2754. return
  2755. }
  2756. if {![botisop $chan]} {
  2757. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  2758. return
  2759. }
  2760. set chantopic [topic $chan]
  2761. set getlang [string tolower [setting:get $chan lang]]
  2762. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  2763. if {$chantopic != ""} {
  2764. set top "$black(say.$getlang.r.1)"
  2765. set len [llength $top]
  2766. set random [expr int(rand()*$len)]
  2767. set top [lindex $top $random]
  2768. set text [black:color:set "" $top]
  2769. set reply [join $text]
  2770. putserv "TOPIC $chan :$reply"
  2771. putserv "TOPIC $chan :$chantopic"
  2772. } else {
  2773. blacktools:tell $nick $host $hand $chan $chan1 r.2 none
  2774. }
  2775. }
  2776. ############################### omsg ###################################
  2777. proc omsg:process {nick host hand chan chan1 who msg type} {
  2778. global black
  2779. set cmd_status [btcmd:status $chan $hand "omsg" 0]
  2780. if {$cmd_status == "1"} {
  2781. return
  2782. }
  2783. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  2784. return
  2785. }
  2786. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2787. return
  2788. }
  2789. set chans ""
  2790. if {$who == ""} {
  2791. switch $type {
  2792. 0 {
  2793. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "omsg"
  2794. }
  2795. 1 {
  2796. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "omsg"
  2797. }
  2798. 2 {
  2799. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "omsg"
  2800. }
  2801. }
  2802. return
  2803. }
  2804. if {$msg == ""} {
  2805. switch $type {
  2806. 0 {
  2807. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "omsg"
  2808. }
  2809. 1 {
  2810. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "omsg"
  2811. }
  2812. 2 {
  2813. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "omsg"
  2814. }
  2815. }
  2816. return
  2817. }
  2818. if {[string equal -nocase $who "all"]} {
  2819. foreach c [channels] {
  2820. if {![setting:get $c invisible]} {
  2821. if {[matchattr $hand $black(accessflags) $c]} {
  2822. if {[botisop $c]} {
  2823. lappend chans $c
  2824. }
  2825. }
  2826. }
  2827. }
  2828. if {$chans == ""} {
  2829. return
  2830. }
  2831. blacktools:tell $nick $host $hand $chan $chan1 omsg.1 [join $chans ", "]
  2832. omsg:act $hand $chans 0 $msg
  2833. return
  2834. }
  2835. if {![validchan $who]} {
  2836. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2837. return
  2838. }
  2839. if {[matchattr $hand $black(accessflags) $who]} {
  2840. if {![botisop $who]} {
  2841. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  2842. return
  2843. }
  2844. putserv "NOTICE @$who :\[BT\] ($hand) $msg"
  2845. blacktools:tell $nick $host $hand $chan $chan1 omsg.1 $who
  2846. }
  2847. }
  2848. proc omsg:act {hand chans number msg} {
  2849. global black
  2850. set chan [lindex $chans $number]
  2851. putserv "NOTICE @$chan :\[BT\] ($hand) $msg"
  2852. set number [expr $number + 1]
  2853. if {[lindex $chans $number] != ""} {
  2854. utimer 2 [list omsg:act $hand $chans $number $msg]
  2855. }
  2856. }
  2857. ##############
  2858. #########################################################################
  2859. ## END ##
  2860. #########################################################################