BT.LocalCmds.tcl 77 KB

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