BT.AddCmds.tcl 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978
  1. #########################################################################
  2. ## BlackTools - The Ultimate Channel Control Script ##
  3. ## One TCL. One smart Eggdrop ##
  4. #########################################################################
  5. ############################ ADDCMDS 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. ########################## add ##################################
  18. proc add:ban {mask reason} {
  19. global black
  20. blacktools:global:ban [channels] 0 $mask "HandleBan" $reason 0 $reason "-1" "1"
  21. }
  22. proc add:process {user uhost handle level hand host chan chan1 nick type cmd reason addban} {
  23. global black botnick
  24. set cmd_status [btcmd:status $chan $hand $cmd 0]
  25. if {$cmd_status == "1"} {
  26. return
  27. }
  28. if {[matchattr $hand q]} {
  29. blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  30. return
  31. }
  32. if {[matchattr $hand -|q $chan]} {
  33. blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  34. return
  35. }
  36. if {[validuser $handle]} {
  37. set user $handle
  38. }
  39. if {$user == ""} {
  40. switch $type {
  41. 0 {
  42. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "$cmd"
  43. }
  44. 1 {
  45. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "$cmd"
  46. }
  47. 2 {
  48. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "$cmd"
  49. }
  50. }
  51. return
  52. }
  53. set show_user $user
  54. set time [unixtime]
  55. set flags "nmo|NMOAVH"
  56. if {![validchan $chan]} {
  57. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  58. return
  59. }
  60. if {$user != ""} {
  61. set user [strip:all $user]
  62. set replace(%user%) $show_user
  63. if {$uhost == ""} {
  64. set uhost [string map [array get replace] $black(hostadd)]
  65. }
  66. if {[userlist] != ""} {
  67. foreach usr [userlist] {
  68. set hst [getuser $usr hosts]
  69. foreach hhost $hst {
  70. if {[string match -nocase $hhost $uhost] && (![string equal -nocase $usr $user])} {
  71. blacktools:tell $nick $host $hand $chan $chan1 add.5 $usr
  72. set user $usr
  73. set show_user $usr
  74. }
  75. }
  76. }
  77. }
  78. if {[matchattr $user $black(banflag)]} {
  79. blacktools:tell $nick $host $hand $chan $chan1 gl.banblack none
  80. return
  81. }
  82. if {[matchattr $hand -|A $chan] && ($level == [string tolower [blacktools:getlevelname 3 $hand]])} {
  83. blacktools:tell $nick $host $hand $chan $chan1 add.6 [blacktools:getlevelname 3 $hand]
  84. return
  85. }
  86. if {[matchattr $hand -|A $chan] && ($level == [string tolower [blacktools:getlevelname 4 $hand]])} {
  87. blacktools:tell $nick $host $hand $chan $chan1 add.7 [blacktools:getlevelname 4 $hand]
  88. return
  89. }
  90. if {[matchattr $hand -|M $chan] && ($level == [string tolower [blacktools:getlevelname 3 $hand]])} {
  91. blacktools:tell $nick $host $hand $chan $chan1 add.8 [blacktools:getlevelname 3 $hand]
  92. return
  93. }
  94. if {[string equal -nocase $level [blacktools:getlevelname 3 $hand]]} {
  95. set flags "-|olM"
  96. if {[validuser $user]} {
  97. set check_global [check:global $user]
  98. if {$check_global != "0"} {
  99. blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$user $check_global"
  100. return
  101. }
  102. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  103. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  104. return
  105. }
  106. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  107. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  108. return
  109. }
  110. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  111. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  112. return
  113. }
  114. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  115. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  116. return
  117. }
  118. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  119. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  120. return
  121. }
  122. if {[matchattr $user o|- $chan] && [matchattr $hand -|M $chan]} {
  123. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  124. return
  125. }
  126. if {[matchattr $user n|- $chan] && [matchattr $hand o|- $chan]} {
  127. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  128. return
  129. }
  130. if {[matchattr $user m|- $chan] && [matchattr $hand o|- $chan]} {
  131. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  132. return
  133. }
  134. if {[matchattr $user o|- $chan] && [matchattr $hand o|- $chan]} {
  135. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  136. return
  137. }
  138. chattr $user -|-qolSOHAMV $chan
  139. chattr $user $flags $chan
  140. setuser $user XTRA CHANMODIF($chan) $time:$hand
  141. blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 3 $hand]"
  142. } else {
  143. adduser $user $uhost
  144. set user [check:handle $user $nick $host $hand $chan $chan1]
  145. chattr $user $flags $chan
  146. setuser $user XTRA CHANMODIF($chan) $time:$hand
  147. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
  148. blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 3 $hand]"
  149. }
  150. } elseif {[string equal -nocase $level [blacktools:getlevelname 4 $hand]]} {
  151. set flags "-|olA"
  152. if {[validuser $user]} {
  153. set check_global [check:global $user]
  154. if {$check_global != "0"} {
  155. blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$user $check_global"
  156. return
  157. }
  158. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  159. if {$get_status_access == "1"} {
  160. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  161. return
  162. }
  163. chattr $user -|-qolSHOAMV $chan
  164. chattr $user $flags $chan
  165. setuser $user XTRA CHANMODIF($chan) $time:$hand
  166. blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 4 $hand]"
  167. } else {
  168. adduser $user $uhost
  169. set user [check:handle $user $nick $host $hand $chan $chan1]
  170. chattr $user $flags $chan
  171. setuser $user XTRA CHANMODIF($chan) $time:$hand
  172. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
  173. blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 4 $hand]"
  174. }
  175. } elseif {[string equal -nocase $level [blacktools:getlevelname 2 $hand]]} {
  176. set flags "m|-"
  177. if {[matchattr $hand n]} {
  178. if {[validuser $user]} {
  179. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  180. if {$get_status_access == "1"} {
  181. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  182. return
  183. }
  184. foreach c [channels] {
  185. if {[matchattr $user $black(exceptflags) $c]} {
  186. chattr $user -|-qgaolSHOAMV $c
  187. }
  188. }
  189. chattr $user -omjlptxq
  190. chattr $user $flags
  191. setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
  192. blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 2 $hand]"
  193. } else {
  194. adduser $user $uhost
  195. set user [check:handle $user $nick $host $hand $chan $chan1]
  196. chattr $user $flags
  197. setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
  198. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
  199. blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 2 $hand]"
  200. }
  201. }
  202. } elseif {[string equal -nocase $level [blacktools:getlevelname 9 $hand]]} {
  203. set flags "B|-"
  204. if {[matchattr $hand n]} {
  205. set userlang [getuser $hand XTRA OUTPUT_LANG]
  206. if {$userlang == ""} { set userlang "[string tolower $black(default_lang)]" }
  207. if {$reason == ""} { set getreason $black(say.$userlang.handleban.1) } else { set getreason $reason }
  208. if {[validuser $user]} {
  209. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  210. if {$get_status_access == "1"} {
  211. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  212. return
  213. }
  214. foreach c [channels] {
  215. if {[matchattr $user $black(exceptflags) $c]} {
  216. chattr $user -|-qgaolSHOAMV $c
  217. }
  218. }
  219. chattr $user -omjlptxq
  220. chattr $user $flags
  221. setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
  222. setuser $user XTRA BLACK_REASON $getreason
  223. blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 9 $hand]"
  224. } else {
  225. adduser $user $uhost
  226. set user [check:handle $user $nick $host $hand $chan $chan1]
  227. chattr $user $flags
  228. setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
  229. setuser $user XTRA BLACK_REASON $getreason
  230. add:ban $uhost $reason
  231. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
  232. blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 9 $hand]"
  233. }
  234. }
  235. } elseif {[string equal -nocase $level [blacktools:getlevelname 8 $hand]]} {
  236. set flags "o|-"
  237. if {[matchattr $hand nm]} {
  238. if {[validuser $user]} {
  239. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  240. if {$get_status_access == "1"} {
  241. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  242. return
  243. }
  244. foreach c [channels] {
  245. if {[matchattr $user $black(exceptflags) $c]} {
  246. chattr $user -|-qgaolSHOAMV $c
  247. }
  248. }
  249. chattr $user -omjlptxq
  250. chattr $user $flags
  251. setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
  252. blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 8 $hand]"
  253. } else {
  254. adduser $user $uhost
  255. set user [check:handle $user $nick $host $hand $chan $chan1]
  256. chattr $user $flags
  257. setuser $user XTRA CHANMODIF(GLOBAL) $time:$hand
  258. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
  259. blacktools:tell $nick $host $hand $chan $chan1 add.20 "$show_user [blacktools:getlevelname 8 $hand]"
  260. }
  261. }
  262. } elseif {[string equal -nocase $level [blacktools:getlevelname 5 $hand]]} {
  263. set flags "-|olO"
  264. if {[validuser $user]} {
  265. set check_global [check:global $user]
  266. if {$check_global != "0"} {
  267. blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$user $check_global"
  268. return
  269. }
  270. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  271. if {$get_status_access == "1"} {
  272. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  273. return
  274. }
  275. chattr $user -|-qolSHOAMV $chan
  276. chattr $user $flags $chan
  277. setuser $user XTRA CHANMODIF($chan) $time:$hand
  278. blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 5 $hand]"
  279. } else {
  280. adduser $user $uhost
  281. set user [check:handle $user $nick $host $hand $chan $chan1]
  282. chattr $user $flags $chan
  283. setuser $user XTRA CHANMODIF($chan) $time:$hand
  284. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
  285. blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 5 $hand]"
  286. }
  287. } elseif {[string equal -nocase $level [blacktools:getlevelname 7 $hand]]} {
  288. set flags "-|H"
  289. if {[validuser $user]} {
  290. set check_global [check:global $user]
  291. if {$check_global != "0"} {
  292. blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$user $check_global"
  293. return
  294. }
  295. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  296. if {$get_status_access == "1"} {
  297. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  298. return
  299. }
  300. chattr $user -|-qHolSOAMV $chan
  301. chattr $user $flags $chan
  302. setuser $user XTRA CHANMODIF($chan) $time:$hand
  303. blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 7 $hand]"
  304. } else {
  305. adduser $user $uhost
  306. set user [check:handle $user $nick $host $hand $chan $chan1]
  307. chattr $user $flags $chan
  308. setuser $user XTRA CHANMODIF($chan) $time:$hand
  309. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
  310. blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 7 $hand]"
  311. }
  312. } elseif {[string equal -nocase $level [blacktools:getlevelname 6 $hand]]} {
  313. set flags "-|olV"
  314. if {[validuser $user]} {
  315. set check_global [check:global $user]
  316. if {$check_global != "0"} {
  317. blacktools:tell $nick $host $hand $chan $chan1 gl.isowner "$user $check_global"
  318. return
  319. }
  320. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  321. if {$get_status_access == "1"} {
  322. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  323. return
  324. }
  325. chattr $user -|-qolSHOAMV $chan
  326. chattr $user $flags $chan
  327. setuser $user XTRA CHANMODIF($chan) $time:$hand
  328. blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 6 $hand]"
  329. } else {
  330. adduser $user $uhost
  331. set user [check:handle $user $nick $host $hand $chan $chan1]
  332. chattr $user $flags $chan
  333. setuser $user XTRA CHANMODIF($chan) $time:$hand
  334. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$show_user $uhost"
  335. blacktools:tell $nick $host $hand $chan $chan1 add.19 "$show_user [blacktools:getlevelname 6 $hand]"
  336. }
  337. } else {
  338. if {$type == "0"} {
  339. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "$cmd"
  340. return
  341. }
  342. if {$type == "1"} {
  343. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "$cmd"
  344. return
  345. }
  346. }
  347. }
  348. }
  349. ############################## delacc ################################
  350. proc delacc:process {nick host hand chan chan1 user type} {
  351. global botnick black
  352. set cmd_status [btcmd:status $chan $hand "delacc" 0]
  353. if {$cmd_status == "1"} {
  354. return
  355. }
  356. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  357. return
  358. }
  359. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  360. return
  361. }
  362. if {$user == ""} {
  363. switch $type {
  364. 0 {
  365. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "delacc"
  366. }
  367. 1 {
  368. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "delacc"
  369. }
  370. 2 {
  371. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "delacc"
  372. }
  373. }
  374. return
  375. }
  376. if {![validchan $chan]} {
  377. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "delacc"
  378. return
  379. }
  380. if {$user != ""} {
  381. set show_user $user
  382. if {[onchan $user $chan] && ![validuser $user]} {
  383. set user [nick2hand $user]
  384. }
  385. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  386. if {$get_status_access == "1"} {
  387. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  388. return
  389. }
  390. if {[matchattr $hand n|- $chan]} {
  391. if {[matchattr $user mo]} {
  392. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  393. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  394. return
  395. }
  396. if {[validuser $user]} {
  397. if {[matchattr $user m]} {
  398. blacktools:tell $nick $host $hand $chan $chan1 delacc.2 $show_user
  399. } elseif {[matchattr $user o]} {
  400. blacktools:tell $nick $host $hand $chan $chan1 delacc.4 $show_user
  401. }
  402. chattr $user -moagjlptxq
  403. } else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  404. return
  405. }
  406. } elseif {[matchattr $hand m]} {
  407. if {[matchattr $user o]} {
  408. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan]} {
  409. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  410. return
  411. }
  412. if {[validuser $user]} {
  413. chattr $user -oagjlptxq
  414. blacktools:tell $nick $host $hand $chan $chan1 delacc.4 $show_user
  415. } else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  416. return
  417. }
  418. }
  419. if {![matchattr $user -|OAMVH $chan]} {
  420. blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  421. return
  422. }
  423. if {[validuser $user]} {
  424. chattr $user -|-qolSgaOAMVHf $chan
  425. blacktools:tell $nick $host $hand $chan $chan1 delacc.1 $show_user
  426. } else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  427. }
  428. }
  429. ############################## del #####################################
  430. proc del:process {nick host hand chan chan1 args type} {
  431. global botnick black
  432. set cmd_status [btcmd:status $chan $hand "del" 0]
  433. if {$cmd_status == "1"} {
  434. return
  435. }
  436. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  437. return
  438. }
  439. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  440. return
  441. }
  442. if {$args == ""} {
  443. switch $type {
  444. 0 {
  445. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "del"
  446. }
  447. 1 {
  448. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "del"
  449. }
  450. 2 {
  451. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "del"
  452. }
  453. }
  454. return
  455. }
  456. foreach user $args {
  457. set show_user $user
  458. if {$user != ""} {
  459. if {$host != "prv"} {
  460. if {[onchan $user $chan] && ![validuser $user]} {
  461. set user [nick2hand $user]
  462. }
  463. }
  464. if {![matchattr $hand n] && [matchattr $user $black(banflag)]} {
  465. blacktools:tell $nick $host $hand $chan $chan1 gl.banblack none
  466. return
  467. }
  468. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  469. if {$get_status_access == "1"} {
  470. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  471. continue
  472. }
  473. if {[validuser $user]} {
  474. if {[matchattr $hand -|MA $chan]} {
  475. foreach c [channels] {
  476. if {![string equal -nocase $c $chan]} {
  477. if {[matchattr $user nmo|HAMOVSo $c]} {
  478. blacktools:tell $nick $host $hand $chan $chan1 del.2 $show_user
  479. continue
  480. }
  481. }
  482. }
  483. }
  484. if {[matchattr $user B]} {
  485. set gethost [getuser $user hosts]
  486. foreach h $gethost {
  487. foreach c [channels] {
  488. if {[validchan $c]} {
  489. if {[ischanban $h $c]} {
  490. if {[setting:get $c xonly] && [onchan $black(chanserv) $c]} {
  491. putserv "PRIVMSG $black(chanserv) :unban $c $h"
  492. } else {
  493. pushmode $c -b $h
  494. }
  495. }
  496. }
  497. }
  498. }
  499. }
  500. deluser $user
  501. notes:remove:ondelete $user
  502. alias:remove:ondelete $user
  503. s:remove:ondelete $user
  504. blacktools:tell $nick $host $hand $chan $chan1 del.1 $show_user
  505. } else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  506. }
  507. }
  508. }
  509. ################################ addhost #############################
  510. proc addhost:process {nick host hand chan chan1 user hosts type} {
  511. global black botnick
  512. set cmd_status [btcmd:status $chan $hand "addhost" 0]
  513. if {$cmd_status == "1"} {
  514. return
  515. }
  516. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  517. return
  518. }
  519. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  520. return
  521. }
  522. set found_it 0
  523. set found_user ""
  524. set show_user $user
  525. set show_hosts $hosts
  526. if {$user == ""} {
  527. switch $type {
  528. 0 {
  529. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "addhost"
  530. }
  531. 1 {
  532. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "addhost"
  533. }
  534. 2 {
  535. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "addhost"
  536. }
  537. }
  538. return
  539. }
  540. if {$host != "prv"} {
  541. if {[onchan $user $chan] && ![validuser $user]} {
  542. set user [nick2hand $user]
  543. }
  544. }
  545. if {![matchattr $hand mn] && [matchattr $user $black(banflag)]} {
  546. blacktools:tell $nick $host $hand $chan $chan1 gl.banblack none
  547. return
  548. }
  549. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  550. if {$get_status_access == "1"} {
  551. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  552. return
  553. }
  554. if {![string equal -nocase $hosts "-telnet!*@*"]} {
  555. foreach u [userlist] {
  556. set h [getuser $u hosts]
  557. foreach hs $h {
  558. if {[string match -nocase [split $hs] $hosts]} {
  559. set found_it 1
  560. set found_user $u
  561. }
  562. }
  563. }
  564. }
  565. if {[validuser $user]} {
  566. if {$found_it == "1"} {
  567. blacktools:tell $nick $host $hand $chan $chan1 addhost.1 "[split $found_user] $show_hosts"
  568. return
  569. }
  570. setuser $user HOSTS $hosts
  571. if {[matchattr $user B]} {
  572. add:ban $hosts [join [getuser $user XTRA BLACK_REASON]]
  573. }
  574. blacktools:tell $nick $host $hand $chan $chan1 addhost.2 "$show_user $show_hosts"
  575. } else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  576. }
  577. ############################### delhost ############################
  578. proc delhost:process {nick host hand chan chan1 user hosts type} {
  579. global black botnick
  580. set cmd_status [btcmd:status $chan $hand "delhost" 0]
  581. if {$cmd_status == "1"} {
  582. return
  583. }
  584. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  585. return
  586. }
  587. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  588. return
  589. }
  590. set show_user $user
  591. set show_hosts $hosts
  592. if {$user == ""} {
  593. switch $type {
  594. 0 {
  595. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "delhost"
  596. }
  597. 1 {
  598. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "delhost"
  599. }
  600. 2 {
  601. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "delhost"
  602. }
  603. }
  604. return
  605. }
  606. if {$host != "prv"} {
  607. if {[onchan $user $chan] && ![validuser $user]} {
  608. set user [nick2hand $user]
  609. }
  610. }
  611. if {![matchattr $hand mn] && [matchattr $user $black(banflag)]} {
  612. blacktools:tell $nick $host $hand $chan $chan1 gl.banblack none
  613. return
  614. }
  615. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  616. if {$get_status_access == "1"} {
  617. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  618. return
  619. }
  620. if {[validuser $user]} {
  621. set hhost [getuser $user hosts]
  622. foreach hhost $hhost {
  623. if {[string match -nocase [split $hhost] $hosts]} {
  624. set foundhost 1
  625. }
  626. }
  627. if {![info exists foundhost]} {
  628. blacktools:tell $nick $host $hand $chan $chan1 delhost.1 "$show_user $show_hosts"
  629. return
  630. }
  631. delhost $user $hosts
  632. foreach c [channels] {
  633. if {[validchan $c]} {
  634. if {[ischanban $hosts $c]} {
  635. if {[setting:get $c xonly] && [onchan $black(chanserv) $c]} {
  636. putserv "PRIVMSG $black(chanserv) :unban $c $hosts"
  637. } else {
  638. pushmode $c -b $hosts
  639. }
  640. }
  641. }
  642. }
  643. blacktools:tell $nick $host $hand $chan $chan1 delhost.2 "$show_user $show_hosts"
  644. } else {
  645. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  646. }
  647. }
  648. ############################### chuser ############################
  649. proc chuser:process {nick host hand chan chan1 user chandle type} {
  650. global botnick black
  651. set cmd_status [btcmd:status $chan $hand "chuser" 0]
  652. if {$cmd_status == "1"} {
  653. return
  654. }
  655. set owner_user $user
  656. set owner_chandle $chandle
  657. set show_user $user
  658. set show_chandle $chandle
  659. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  660. return
  661. }
  662. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  663. return
  664. }
  665. if {$user == ""} {
  666. switch $type {
  667. 0 {
  668. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "chuser"
  669. }
  670. 1 {
  671. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "chuser"
  672. }
  673. 2 {
  674. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "chuser"
  675. }
  676. }
  677. return
  678. }
  679. if {[onchan $user $chan] && ![validuser $user]} {
  680. set user [nick2hand $user]
  681. }
  682. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  683. if {$get_status_access == "1"} {
  684. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  685. return
  686. }
  687. if {[matchattr $hand -|M $chan] && ![matchattr $user -|ASOV $chan]} {
  688. blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  689. return
  690. }
  691. if {[validuser $chandle]} {
  692. blacktools:tell $nick $host $hand $chan $chan1 chuser.3 none
  693. return
  694. }
  695. if {[validuser $user]} {
  696. chhandle $user $chandle
  697. alias:change:update $user $chandle
  698. blacktools:tell $nick $host $hand $chan $chan1 chuser.1 "$show_user $show_chandle"
  699. } else {blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  700. }
  701. ############################ userlist #############################
  702. proc userlist:execute {hand host level chan chan1 nick type} {
  703. global black botnick
  704. set cmd_status [btcmd:status $chan $hand "userlist" 0]
  705. if {$cmd_status == "1"} {
  706. return
  707. }
  708. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  709. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  710. set gl 0
  711. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  712. return
  713. }
  714. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  715. return
  716. }
  717. if {$level == ""} {
  718. switch $type {
  719. 0 {
  720. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "userlist"
  721. }
  722. 1 {
  723. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "userlist"
  724. }
  725. 2 {
  726. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "userlist"
  727. }
  728. }
  729. return
  730. }
  731. if {[string equal -nocase $level [blacktools:getlevelname 3 $hand]]} {
  732. set flags "-|M"
  733. set numar [llength [userlist $flags $chan]]
  734. set list [userlist $flags $chan]
  735. if {$list == ""} { set list "N/A" }
  736. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 3 $hand] $list $gl
  737. } elseif {[string equal -nocase $level [blacktools:getlevelname 4 $hand]]} {
  738. set flags "-|A"
  739. set numar [llength [userlist $flags $chan]]
  740. set list [userlist $flags $chan]
  741. if {$list == ""} { set list "N/A" }
  742. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 4 $hand] $list $gl
  743. } elseif {[string equal -nocase $level [blacktools:getlevelname 7 $hand]]} {
  744. set flags "-|H"
  745. set list [userlist $flags $chan]
  746. set numar [llength [userlist $flags $chan]]
  747. if {$list == ""} { set list "N/A" }
  748. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 7 $hand] $list $gl
  749. } elseif {[string equal -nocase $level [blacktools:getlevelname 5 $hand]]} {
  750. set flags "-|O"
  751. set list [userlist $flags $chan]
  752. set numar [llength [userlist $flags $chan]]
  753. if {$list == ""} { set list "N/A" }
  754. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 5 $hand] $list $gl
  755. } elseif {[string equal -nocase $level [blacktools:getlevelname 9 $hand]] && [matchattr $hand n]} {
  756. set gl 1
  757. set flags "B|-"
  758. set list [userlist $flags $chan]
  759. set numar [llength [userlist $flags $chan]]
  760. if {$list == ""} { set list "N/A" }
  761. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 9 $hand] $list $gl
  762. } elseif {[string equal -nocase $level [blacktools:getlevelname 2 $hand]]} {
  763. if {[matchattr $hand nmo]} {
  764. set gl 1
  765. set bossflags "n|-"
  766. set ownerflags "m|-"
  767. set listbossowner [userlist $bossflags]
  768. set listowner [userlist $ownerflags]
  769. foreach user $listbossowner {
  770. if {[lsearch -exact $listowner $user] > -1} {
  771. set pos [lsearch -exact $listowner $user]
  772. set listowner [lreplace $listowner $pos $pos]
  773. }
  774. }
  775. if {$listowner == ""} { set listowner "N/A" }
  776. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 1 $hand] $listbossowner $gl
  777. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 2 $hand] $listowner $gl
  778. }
  779. } elseif {[string equal -nocase $level [blacktools:getlevelname 8 $hand]]} {
  780. if {[matchattr $hand nmo]} {
  781. set gl 1
  782. set bossflags "n|-"
  783. set ownerflags "m|-"
  784. set masterflags "o|-"
  785. set listbossowner [userlist $bossflags]
  786. set listowner [userlist $ownerflags]
  787. set listmaster [userlist $masterflags]
  788. foreach user $listbossowner {
  789. if {[lsearch -exact $listmaster $user] > -1} {
  790. set pos [lsearch -exact $listmaster $user]
  791. set listmaster [lreplace $listmaster $pos $pos]
  792. }
  793. }
  794. foreach user $listowner {
  795. if {[lsearch -exact $listmaster $user] > -1} {
  796. set pos [lsearch -exact $listmaster $user]
  797. set listmaster [lreplace $listmaster $pos $pos]
  798. }
  799. }
  800. if {$listmaster == ""} { set listmaster "N/A" }
  801. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 8 $hand] $listmaster $gl
  802. }
  803. } elseif {[string equal -nocase $level [blacktools:getlevelname 6 $hand]]} {
  804. set flags "-|V"
  805. set numar [llength [userlist $flags $chan]]
  806. set list [userlist $flags $chan]
  807. if {$list == ""} { set list "N/A" }
  808. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 6 $hand] $list $gl
  809. } elseif {[string equal -nocase $level "all"]} {
  810. array set flgc [list]
  811. set flags "-|MHAVO"
  812. set list [userlist $flags $chan]
  813. set numar [llength [userlist $flags $chan]]
  814. foreach user $list {
  815. if {[matchattr $user -|M $chan]} {
  816. lappend flgc([blacktools:getlevelname 3 $hand]) $user
  817. } elseif {[matchattr $user -|A $chan]} {
  818. lappend flgc([blacktools:getlevelname 4 $hand]) $user
  819. } elseif {[matchattr $user -|O $chan]} {
  820. lappend flgc([blacktools:getlevelname 5 $hand]) $user
  821. } elseif {[matchattr $user -|V $chan]} {
  822. lappend flgc([blacktools:getlevelname 6 $hand]) $user
  823. } elseif {[matchattr $user -|H $chan]} {
  824. lappend flgc([blacktools:getlevelname 7 $hand]) $user
  825. }
  826. }
  827. blacktools:tell $nick $host $hand $chan $chan1 userlist.2 $numar
  828. foreach flw [array names flgc] {
  829. userlist:details $nick $host $hand $chan $chan1 $flw $flgc($flw) $gl
  830. }
  831. } else {
  832. if {$type == "0"} {
  833. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "userlist"
  834. return
  835. }
  836. if {$type == "1"} {
  837. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "userlist"
  838. return
  839. }
  840. }
  841. }
  842. proc userlist:details {nick host hand chan chan1 access usernames gl} {
  843. global black
  844. if {![info exists onchan]} {
  845. set onchan ""
  846. }
  847. if {![info exists the_usernames]} {
  848. set the_usernames ""
  849. }
  850. foreach user $usernames {
  851. if {$host != "prv"} {
  852. foreach n [chanlist $chan] {
  853. set id [nick2hand $n]
  854. if {[string equal -nocase $id $user]} {
  855. lappend the_usernames "$user/\002$n\002\[[userlist:check_mode $user $chan]\]"
  856. lappend onchan $user
  857. }
  858. }
  859. }
  860. if {[lsearch -exact [string tolower $onchan] [string tolower $user]] == -1} {
  861. lappend the_usernames "$user\[[userlist:check_mode $user $chan]\]"
  862. }
  863. }
  864. if {$usernames == "-"} {
  865. blacktools:tell $nick $host $hand $chan $chan1 userlist.1 "\[\002$access\002\] $usernames"
  866. return
  867. }
  868. foreach user [wordwrap $the_usernames 440] {
  869. blacktools:tell $nick $host $hand $chan $chan1 userlist.1 "\[\002$access\002\] [join $user]"
  870. }
  871. }
  872. proc userlist:check_mode {user chan} {
  873. global black
  874. if {[matchattr $user a]} {
  875. return "+o all"
  876. }
  877. if {[matchattr $user g]} {
  878. return "+v all"
  879. }
  880. if {[matchattr $user -|a $chan]} {
  881. return "+o"
  882. }
  883. if {[matchattr $user -|g $chan]} {
  884. return "+v"
  885. }
  886. }
  887. ############################### info ############################
  888. proc info:process:info_return {nick host hand chan chan1 user} {
  889. global black
  890. set show_user $user
  891. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  892. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  893. blacktools:tell $nick $host $hand $chan $chan1 info.11 "$show_user"
  894. if {[matchattr $hand nmo]} {
  895. foreach c [channels] {
  896. if {[matchattr $user -|H $c]} {
  897. set fl [blacktools:getlevelname 7 $hand]
  898. lappend flg($fl) $c
  899. } elseif {[matchattr $user -|V $c]} {
  900. set fl [blacktools:getlevelname 6 $hand]
  901. lappend flg($fl) $c
  902. } elseif {[matchattr $user -|O $c]} {
  903. set fl [blacktools:getlevelname 5 $hand]
  904. lappend flg($fl) $c
  905. } elseif {[matchattr $user -|A $c]} {
  906. set fl [blacktools:getlevelname 4 $hand]
  907. lappend flg($fl) $c
  908. } elseif {[matchattr $user -|M $c]} {
  909. set fl [blacktools:getlevelname 3 $hand]
  910. lappend flg($fl) $c
  911. }
  912. }
  913. foreach cf [array names flg] {
  914. lappend exit \002[join $flg($cf) ", "]\002 ($cf)
  915. }
  916. }
  917. if {![info exists exit]} { set exit "N/A"}
  918. set lastseen [getuser $user LASTON $chan]
  919. set hosts [getuser $user hosts]
  920. if {$lastseen == ""} {
  921. set lastseen "N/A"
  922. } else {
  923. set lastseen [clock format $lastseen -format %D-%H:%M:%S]
  924. }
  925. if {[matchattr $hand mno]} {
  926. set laston [getuser $user laston]
  927. set lastseen [lindex $laston 0]
  928. set lastchan [lindex $laston 1]
  929. if {$laston == ""} {
  930. set lastseen "N/A"
  931. set lastchan "N/A"
  932. } else {
  933. set lastseen [clock format $lastseen -format %D-%H:%M:%S]
  934. }
  935. blacktools:tell $nick $host $hand $chan $chan1 info.10 "$lastseen $lastchan"
  936. } else {
  937. blacktools:tell $nick $host $hand $chan $chan1 info.5 $lastseen
  938. }
  939. blacktools:tell $nick $host $hand $chan $chan1 info.6 $hosts
  940. if {![matchattr $user nmo|- $chan] && [matchattr $hand nmo|- $chan] && ($exit != "N/A")} {
  941. blacktools:tell $nick $host $hand $chan $chan1 info.8 "[join $exit]"
  942. }
  943. }
  944. proc info:process:chan {nick host hand chan chan1} {
  945. global black botnick
  946. set cmd_status [btcmd:status $chan $hand "info" 0]
  947. if {$cmd_status == "1"} {
  948. return
  949. }
  950. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  951. return
  952. }
  953. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  954. return
  955. }
  956. if {![validchan $chan]} {
  957. blacktools:tell $nick $host $hand $chan $chan1 gl.nocmem $chan
  958. return
  959. }
  960. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  961. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  962. set status "OK"
  963. set modes [channel get $chan chanmode]
  964. set manager [userlist -|M $chan]
  965. if {$manager == ""} { set manager "N/A" }
  966. set topic [join [topic:return $chan]]
  967. set url [join [setting:get $chan url]]
  968. if {[setting:get $chan jointime] == ""} {
  969. set jointime "N/A"
  970. set jointime_2 "N/A"
  971. } else {
  972. set jointime [clock format [setting:get $chan jointime] -format %D-%H:%M:%S]
  973. set jointime_2 [return_time $getlang [expr [unixtime] - [setting:get $chan jointime]]]
  974. }
  975. set joincount [setting:get $chan joincount]
  976. if {$joincount == ""} {set joincount 0}
  977. set nr_user [llength [chanlist $chan]]
  978. set nr_ban [llength [blacktools:banlist $chan]]
  979. set nr_user_ac 0
  980. foreach user [chanlist $chan] {
  981. set handle [nick2hand $user]
  982. if {[matchattr $handle -|OgaAHMNV $chan]} {
  983. set nr_user_ac [expr $nr_user_ac + 1]
  984. }
  985. }
  986. set file [open $black(seen_file) "r"]
  987. set database [read -nonewline $file]
  988. set data [split $database "\n"]
  989. close $file
  990. set nr_seen [llength [lsearch -all [string tolower $data] [string tolower "* $chan *"]]]
  991. blacktools:tell $nick $host $hand $chan $chan1 info.15 "$chan $modes"
  992. blacktools:tell $nick $host $hand $chan $chan1 info.16 "$manager"
  993. if {[channel get $chan inactive]} {
  994. set found_it 1
  995. if {[info exists black(abuse:$chan)]} {
  996. if {$black(abuse:$chan) == "1"} {
  997. set text [black:color:set "" $black(say.$getlang.info.29)]
  998. set status "$text"
  999. } elseif {$black(abuse:$chan) == "3"} {
  1000. set text [black:color:set "" $black(say.$getlang.info.27)]
  1001. set status "$text"
  1002. } elseif {$black(abuse:$chan) == "2"} {
  1003. set text [black:color:set "" $black(say.$getlang.info.28)]
  1004. set status "$text"
  1005. } elseif {$black(abuse:$chan) == "4"} {
  1006. set text [black:color:set "" $black(say.$getlang.info.26)]
  1007. set status "$text"
  1008. } elseif {$black(abuse:$chan) == "5"} {
  1009. set text [black:color:set "" $black(say.$getlang.info.35)]
  1010. set status "$text"
  1011. }
  1012. } else {
  1013. set text [black:color:set "" $black(say.$getlang.info.22)]
  1014. set status "$text"
  1015. }
  1016. }
  1017. if {![info exist found_it]} {
  1018. if {![onchan $botnick $chan]} {
  1019. set found_it 1
  1020. if {[info exists black(abuse:$chan)]} {
  1021. if {$black(abuse:$chan) == "1"} {
  1022. set text [black:color:set "" $black(say.$getlang.info.33)]
  1023. set status "$text"
  1024. } elseif {$black(abuse:$chan) == "3"} {
  1025. set text [black:color:set "" $black(say.$getlang.info.31)]
  1026. set status "$text"
  1027. } elseif {$black(abuse:$chan) == "2"} {
  1028. set text [black:color:set "" $black(say.$getlang.info.32)]
  1029. set status "$text"
  1030. } elseif {$black(abuse:$chan) == "4"} {
  1031. set text [black:color:set "" $black(say.$getlang.info.30)]
  1032. set status "$text"
  1033. } elseif {$black(abuse:$chan) == "5"} {
  1034. set text [black:color:set "" $black(say.$getlang.info.34)]
  1035. set status "$text"
  1036. }
  1037. } else {
  1038. set text [black:color:set "" $black(say.$getlang.info.23)]
  1039. set status "$text"
  1040. }
  1041. }
  1042. }
  1043. if {![info exist found_it]} {
  1044. if {![botisop $chan]} {
  1045. set text [black:color:set "" $black(say.$getlang.info.24)]
  1046. set status "$text"
  1047. }
  1048. }
  1049. if {$status != "OK"} {
  1050. blacktools:tell $nick $host $hand $chan $chan1 info.19 "$status"
  1051. }
  1052. if {$topic != ""} {
  1053. blacktools:tell $nick $host $hand $chan $chan1 info.17 "$topic"
  1054. }
  1055. if {$url != ""} {
  1056. blacktools:tell $nick $host $hand $chan $chan1 info.18 "$url"
  1057. }
  1058. blacktools:tell $nick $host $hand $chan $chan1 info.20 "$jointime $jointime_2"
  1059. blacktools:tell $nick $host $hand $chan $chan1 info.21 "$joincount $nr_user $nr_user_ac $nr_ban $nr_seen"
  1060. }
  1061. proc info:process:host {nick host hand chan chan1 get_host} {
  1062. global black
  1063. set users ""
  1064. foreach user [userlist] {
  1065. foreach h [getuser $user hosts] {
  1066. if {[string match -nocase $get_host $h]} {
  1067. set found_host 1
  1068. lappend users $user
  1069. }
  1070. }
  1071. }
  1072. set users [lsort -unique $users]
  1073. set user_num [llength $users]
  1074. if {![info exists found_host]} {
  1075. return 0
  1076. }
  1077. if {$user_num == 1} {
  1078. info:process:info_return $nick $host $hand $chan $chan1 [join $users]
  1079. return 1
  1080. }
  1081. if {$user_num > 1 && $user_num < 11} {
  1082. blacktools:tell $nick $host $hand $chan $chan1 info.12 "$user_num $users"
  1083. blacktools:tell $nick $host $hand $chan $chan1 info.14 none
  1084. return 1
  1085. }
  1086. if {$user_num > 10} {
  1087. blacktools:tell $nick $host $hand $chan $chan1 info.13 "$user_num"
  1088. return 1
  1089. }
  1090. }
  1091. proc info:process {nick host hand chan chan1 user type} {
  1092. global botnick black
  1093. set cmd_status [btcmd:status $chan $hand "info" 0]
  1094. if {$cmd_status == "1"} {
  1095. return
  1096. }
  1097. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  1098. return
  1099. }
  1100. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1101. return
  1102. }
  1103. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  1104. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  1105. set show_user $user
  1106. set time [ctime [unixtime]]
  1107. array set flg [list]
  1108. if {$user == ""} {
  1109. switch $type {
  1110. 0 {
  1111. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "info"
  1112. }
  1113. 1 {
  1114. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "info"
  1115. }
  1116. 2 {
  1117. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "info"
  1118. }
  1119. }
  1120. return
  1121. }
  1122. if {[matchattr $hand nmo] && ($host == "prv") && (![regexp {^[&#]} $chan])} {
  1123. foreach chan [channels] {
  1124. if {[onchan $user $chan]} {
  1125. set handle [nick2hand $user]
  1126. }
  1127. }
  1128. } else {
  1129. if {[onchan $user $chan]} {
  1130. set handle [nick2hand $user]
  1131. }
  1132. }
  1133. if {[info exists handle]} {
  1134. if {[validuser $handle]} {
  1135. set user $handle
  1136. }
  1137. }
  1138. if {[regexp {\*} $user]} {
  1139. if {[matchattr $hand nmo]} {
  1140. set check [info:process:host $nick $host $hand $chan $chan1 $user]
  1141. if {$check == "0"} {
  1142. blacktools:tell $nick $host $hand $chan $chan1 gl.hostnotexist $user
  1143. }
  1144. return
  1145. }
  1146. }
  1147. if {![validuser $user]} {
  1148. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  1149. return
  1150. }
  1151. if {(![matchattr $user nmaBgo|OwgaAHSMNV $chan]) && [matchattr $hand mno]} {
  1152. info:process:info_return $nick $host $hand $chan $chan1 $user
  1153. return
  1154. } else {
  1155. if {[matchattr $user B] && ![matchattr $hand n] && [matchattr $hand mo]} {
  1156. info:process:info_return $nick $host $hand $chan $chan1 $user
  1157. return
  1158. }
  1159. if {![matchattr $user nmgao|OwgaAHSMNV $chan]} {
  1160. if {[matchattr $user B] && ![matchattr $hand n]} {
  1161. blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  1162. return
  1163. }
  1164. }
  1165. }
  1166. if {[matchattr $hand nmo|- $chan]} {
  1167. foreach c [channels] {
  1168. if {[matchattr $user -|H $c]} {
  1169. set fl [blacktools:getlevelname 7 $hand]
  1170. lappend flg($fl) $c
  1171. } elseif {[matchattr $user -|V $c]} {
  1172. set fl [blacktools:getlevelname 6 $hand]
  1173. lappend flg($fl) $c
  1174. } elseif {[matchattr $user -|O $c]} {
  1175. set fl [blacktools:getlevelname 5 $hand]
  1176. lappend flg($fl) $c
  1177. } elseif {[matchattr $user -|A $c]} {
  1178. set fl [blacktools:getlevelname 4 $hand]
  1179. lappend flg($fl) $c
  1180. } elseif {[matchattr $user -|M $c]} {
  1181. set fl [blacktools:getlevelname 3 $hand]
  1182. lappend flg($fl) $c
  1183. }
  1184. }
  1185. foreach cf [array names flg] {
  1186. lappend exit \002[join $flg($cf) ", "]\002 ($cf)
  1187. }
  1188. }
  1189. if {![info exists exit]} { set exit "N/A"}
  1190. set cflags [chattr $user | $chan]
  1191. if {[matchattr $user a]} {
  1192. set automode_gl "OP"
  1193. } elseif {[matchattr $user g]} {
  1194. set automode_gl "VOICE"
  1195. } else {
  1196. set automode_gl "N/A"
  1197. }
  1198. if {[matchattr $user -|V $chan]} { set flags [blacktools:getlevelname 6 $hand] } elseif {[matchattr $user -|O $chan]} { set flags [blacktools:getlevelname 5 $hand] } elseif {[matchattr $user -|A $chan]} { set flags [blacktools:getlevelname 4 $hand] } elseif {[matchattr $user -|H $chan]} { set flags [blacktools:getlevelname 7 $hand] } else { set flags "\002N/A\002" }
  1199. if {[matchattr $user n|- $chan]} { set flags [blacktools:getlevelname 1 $hand] } elseif {[matchattr $user m|- $chan]} { set flags [blacktools:getlevelname 2 $hand] } elseif {[matchattr $user o|- $chan]} { set flags [blacktools:getlevelname 8 $hand]} elseif {[matchattr $user B|- $chan]} { set flags [blacktools:getlevelname 9 $hand]} elseif {[matchattr $user -|M $chan]} { set flags [blacktools:getlevelname 3 $hand] } elseif {$cflags == "-|-"} { blacktools:tell $nick $host $hand $chan $chan1 info.18 "NONE" }
  1200. if {[matchattr $user -|a $chan]} {
  1201. set automode "OP"
  1202. } elseif {[matchattr $user -|g $chan]} {
  1203. set automode "VOICE"
  1204. } else {
  1205. set automode "N/A"
  1206. }
  1207. if {[matchattr $user -|q $chan]} {
  1208. set suspended 1
  1209. } else {
  1210. set suspended 0
  1211. }
  1212. set getflags [getflags $user $chan]
  1213. if {![string equal -nocase $show_user $user]} {
  1214. blacktools:tell $nick $host $hand $chan $chan1 info.1 "$user\[[black:color 1 $hand $user]\] $flags"
  1215. } else {
  1216. blacktools:tell $nick $host $hand $chan $chan1 info.1 "$user $flags"
  1217. }
  1218. if {![matchattr $user B]} {
  1219. if {$automode_gl != "N/A"} {
  1220. if {[matchattr $user mnaog]} {
  1221. if {$getflags != ""} {
  1222. blacktools:tell $nick $host $hand $chan $chan1 info.25 "* $automode_gl\[all\] $getflags $user"
  1223. } else {
  1224. blacktools:tell $nick $host $hand $chan $chan1 info.2 "* $automode_gl\[all\] $user"
  1225. }
  1226. } else {
  1227. if {$getflags != ""} {
  1228. blacktools:tell $nick $host $hand $chan $chan1 info.25 "$chan $automode_gl\[all\] $getflags $user"
  1229. } else {
  1230. blacktools:tell $nick $host $hand $chan $chan1 info.2 "$chan $automode_gl\[all\] $user"
  1231. }
  1232. }
  1233. } else {
  1234. if {[matchattr $user mno]} {
  1235. if {$getflags != ""} {
  1236. blacktools:tell $nick $host $hand $chan $chan1 info.25 "* $automode $getflags $user"
  1237. } else {
  1238. blacktools:tell $nick $host $hand $chan $chan1 info.2 "* $automode $user"
  1239. }
  1240. } else {
  1241. if {$getflags != ""} {
  1242. blacktools:tell $nick $host $hand $chan $chan1 info.25 "$chan $automode $getflags $user"
  1243. } else {
  1244. blacktools:tell $nick $host $hand $chan $chan1 info.2 "$chan $automode $user"
  1245. }
  1246. }
  1247. }
  1248. }
  1249. if {[matchattr $user B]} {
  1250. set get [getuser $user XTRA BLACK_REASON]
  1251. if {$get != ""} {
  1252. blacktools:tell $nick $host $hand $chan $chan1 info.37 $get
  1253. } else {
  1254. blacktools:tell $nick $host $hand $chan $chan1 info.37 $black(say.$getlang.handleban.1)
  1255. }
  1256. }
  1257. set extra "CHANMODIF($chan)"
  1258. set get_chan $chan
  1259. if {[matchattr $user mno]} {
  1260. set extra "CHANMODIF(GLOBAL)"
  1261. set get_chan "GLOBAL"
  1262. }
  1263. set file [open $black(s_file) "r"]
  1264. set database [read -nonewline $file]
  1265. close $file
  1266. set data [split $database "\n"]
  1267. foreach line $data {
  1268. set read_chan [lindex [split $line] 0]
  1269. set read_user [lindex [split $line] 1]
  1270. if {[string equal -nocase $read_chan $get_chan] && [string equal -nocase $read_user $user]} {
  1271. set read_time [lindex [split $line] 2]
  1272. if {[unixtime] > $read_time} {
  1273. set read_time [expr [unixtime] - $read_time]
  1274. } else {
  1275. set read_time [expr $read_time - [unixtime]]
  1276. }
  1277. set read_time [return_time_2 $getlang $read_time]
  1278. if {$read_time == 0} {
  1279. continue
  1280. }
  1281. set split_readtime [split $read_time " "]
  1282. set days [lindex $split_readtime 0]
  1283. set the_time [lindex $split_readtime 1]
  1284. set read_level [lindex [split $line] 4]
  1285. set read_reason [lrange [split $line] 5 end]
  1286. if {[string equal -nocase $get_chan "GLOBAL"]} {
  1287. blacktools:tell $nick $host $hand $chan $chan1 info.9 "$read_time $read_level $read_reason"
  1288. } else {
  1289. blacktools:tell $nick $host $hand $chan $chan1 info.7 "$read_time $read_level $read_reason"
  1290. }
  1291. }
  1292. }
  1293. if {[getuser $user INFO] != ""} {
  1294. blacktools:tell $nick $host $hand $chan $chan1 info.3 "[getuser $user INFO]"
  1295. }
  1296. set lastmodify [getuser $user XTRA $extra]
  1297. if {$lastmodify != ""} {
  1298. set split_last [split $lastmodify ":"]
  1299. set lastmodif_time [lindex $split_last 0]
  1300. set lastmodif_time [clock format $lastmodif_time -format %D-%H:%M:%S]
  1301. set lastmodif_hand [join [lindex [split $split_last] 1]]
  1302. } else {
  1303. set date [getuser $user XTRA LASTMODIFDATE]
  1304. set last [getuser $user XTRA LASTMODIFBY]
  1305. set lastmodif_time $date
  1306. set lastmodif_hand $last
  1307. }
  1308. if {($lastmodif_time == "") && ($lastmodif_hand == "")} {
  1309. set lastmodif_time "N/A"
  1310. set lastmodif_hand "N/A"
  1311. }
  1312. set lastseen [getuser $user LASTON $chan]
  1313. set hosts [getuser $user hosts]
  1314. if {$lastseen == ""} {
  1315. set lastseen "N/A"
  1316. } else {
  1317. set lastseen [clock format $lastseen -format %D-%H:%M:%S]
  1318. }
  1319. if {![matchattr $user B]} {
  1320. blacktools:tell $nick $host $hand $chan $chan1 info.4 "$lastmodif_hand $lastmodif_time"
  1321. }
  1322. if {[matchattr $hand mno]} {
  1323. set laston [getuser $user laston]
  1324. set lastseen [lindex $laston 0]
  1325. set lastchan [lindex $laston 1]
  1326. if {$laston == ""} {
  1327. set lastseen "N/A"
  1328. set lastchan "N/A"
  1329. } else {
  1330. set lastseen [clock format $lastseen -format %D-%H:%M:%S]
  1331. }
  1332. if {![matchattr $user B]} {
  1333. blacktools:tell $nick $host $hand $chan $chan1 info.10 "$lastseen $lastchan"
  1334. }
  1335. } else {
  1336. blacktools:tell $nick $host $hand $chan $chan1 info.5 $lastseen
  1337. }
  1338. if {[matchattr $hand nmo] || ([matchattr $hand -|MA $chan] && ![matchattr $user nmo]) || [string equal -nocase $user $hand]} {
  1339. foreach h [wordwrap $hosts 440] {
  1340. blacktools:tell $nick $host $hand $chan $chan1 info.6 $h
  1341. }
  1342. }
  1343. if {[matchattr $hand nmo] || ([matchattr $hand -|MA $chan] && ![matchattr $user nmo]) || [string equal -nocase $user $hand]} {
  1344. if {[getsettings $user] != ""} {
  1345. blacktools:tell $nick $host $hand $chan $chan1 info.36 [join [getsettings $user] " ; "]
  1346. }
  1347. }
  1348. if {![matchattr $user nmo|- $chan] && [matchattr $hand nmo|- $chan] && ($exit != "N/A")} {
  1349. blacktools:tell $nick $host $hand $chan $chan1 info.8 "[join $exit]"
  1350. }
  1351. }
  1352. proc getsettings {user} {
  1353. global black
  1354. set output ""
  1355. set settings "OUTPUT_LANG OUTPUT_TYPE autoinvite mychan mychar OUTPUT_COLORS NO_NOTES"
  1356. foreach setting [string toupper $settings] {
  1357. set get [getuser $user XTRA $setting]
  1358. if {$get != ""} {
  1359. if {$setting == "OUTPUT_COLORS"} {
  1360. set setting "COLORS"
  1361. }
  1362. if {$setting == "NO_NOTES"} {
  1363. set setting "NOTES"
  1364. set get "OFF"
  1365. }
  1366. if {$setting == "OUTPUT_TYPE"} {
  1367. set setting "OUTPUT"
  1368. switch $get {
  1369. 0 {
  1370. set get "NOTICE"
  1371. }
  1372. 1 {
  1373. set get "CHAN"
  1374. }
  1375. 2 {
  1376. set get "MSG"
  1377. }
  1378. }
  1379. }
  1380. if {$setting == "OUTPUT_LANG"} {
  1381. set setting "LANG"
  1382. set get [string toupper $get]
  1383. }
  1384. if {$setting == "AUTOINVITE"} {
  1385. switch $get {
  1386. 1 {
  1387. set get "ON"
  1388. }
  1389. 0 {
  1390. set get "OFF"
  1391. }
  1392. }
  1393. }
  1394. lappend output "$setting\[[join $get ","]\]"
  1395. }
  1396. }
  1397. return $output
  1398. }
  1399. proc getflags {user chan} {
  1400. global black
  1401. set flags ""
  1402. if {[matchattr $user -|f $chan]} {
  1403. lappend flags "f"
  1404. }
  1405. if {[matchattr $user -|w $chan]} {
  1406. lappend flags "w"
  1407. }
  1408. if {[matchattr $user -|P $chan]} {
  1409. lappend flags "P"
  1410. }
  1411. return [join $flags ""]
  1412. }
  1413. ################################# s ###############################
  1414. proc s:process {nick host hand chan chan1 user type suspend_time suspend_reason} {
  1415. global botnick black
  1416. set cmd_status [btcmd:status $chan $hand "s" 0]
  1417. if {$cmd_status == "1"} {
  1418. return
  1419. }
  1420. set show_user $user
  1421. set suspend_time $suspend_time
  1422. set show_suspend_reason $suspend_reason
  1423. set flags "-|q"
  1424. set gl_flags "+q"
  1425. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  1426. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  1427. set unixtime [unixtime]
  1428. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  1429. return
  1430. }
  1431. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1432. return
  1433. }
  1434. if {$user == ""} {
  1435. switch $type {
  1436. 0 {
  1437. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "s"
  1438. }
  1439. 1 {
  1440. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "s"
  1441. }
  1442. 2 {
  1443. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "s"
  1444. }
  1445. }
  1446. return
  1447. }
  1448. if {![validchan $chan]} {
  1449. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1450. return
  1451. }
  1452. if {![validuser $user]} {
  1453. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  1454. return
  1455. }
  1456. if {[matchattr $user -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 s.1 $show_user
  1457. return
  1458. }
  1459. if {![matchattr $user nmo|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  1460. return
  1461. }
  1462. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  1463. if {$get_status_access == "1"} {
  1464. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  1465. return
  1466. }
  1467. if {![regexp {^[0-9]} $suspend_time]} {
  1468. set suspend_time $black(s:default_time)
  1469. }
  1470. if {$suspend_reason == ""} {
  1471. set suspend_reason $black(say.$getlang.s.3)
  1472. }
  1473. set get_time [expr [time_return_minute $suspend_time] * 60]
  1474. set get_time [expr $unixtime + $get_time]
  1475. if {[matchattr $hand n] && [matchattr $user m]} {
  1476. chattr $user $gl_flags
  1477. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1478. set current_flags [s:process:getlevel $hand $chan]
  1479. set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
  1480. if {$s_add == "1"} {
  1481. blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
  1482. }
  1483. return
  1484. } elseif {[matchattr $hand n] && [matchattr $user o] && ![matchattr $user m]} {
  1485. chattr $user $gl_flags
  1486. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1487. set current_flags [s:process:getlevel $hand $chan]
  1488. set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
  1489. if {$s_add == "1"} {
  1490. blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
  1491. }
  1492. return
  1493. } elseif {[matchattr $hand m] && [matchattr $user o] && ![matchattr $user m]} {
  1494. chattr $user $gl_flags
  1495. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1496. set current_flags [s:process:getlevel $hand $chan]
  1497. set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
  1498. if {$s_add == "1"} {
  1499. blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
  1500. if {![info exists black(s:timer_start)]} {
  1501. set black(s:timer_start) 1
  1502. }
  1503. }
  1504. return
  1505. }
  1506. chattr $user $flags $chan
  1507. setuser $user XTRA CHANMODIF($chan) $get_time:$hand
  1508. set current_flags [s:process:getlevel $hand $chan]
  1509. set s_add [s:process:add $nick $hand $chan $chan1 $user $get_time $hand $suspend_reason]
  1510. if {$s_add == "1"} {
  1511. blacktools:tell $nick $host $hand $chan $chan1 s.2 $show_user
  1512. if {![info exists black(s:timer_start)]} {
  1513. set black(s:timer_start) 1
  1514. }
  1515. }
  1516. }
  1517. proc s:process:add {nick hand chan chan1 user suspend_time bywho reason} {
  1518. global black username
  1519. set current_level [s:process:getlevel $bywho $chan]
  1520. set not_allowed 0
  1521. set found_timer 0
  1522. set found_entry 0
  1523. set lin 0
  1524. set file [open $black(s_file) "r"]
  1525. set database [read -nonewline $file]
  1526. close $file
  1527. set data [split $database "\n"]
  1528. foreach line $data {
  1529. set lin [expr $lin + 1]
  1530. set get_channel [lindex [split $line] 0]
  1531. set get_username [lindex [split $line] 1]
  1532. set get_bywho [lindex [split $line] 3]
  1533. if {[string equal -nocase $get_channel $chan] && [string equal -nocase $get_username $user]} {
  1534. set found_entry 1
  1535. set get_level [lindex [split $line] 4]
  1536. set not_allowed [s:process:allow $get_level $current_level]
  1537. }
  1538. }
  1539. if {$not_allowed == "1"} {
  1540. blacktools:tell $nick "" $hand $chan $chan1 s.4 $user
  1541. return 0
  1542. }
  1543. if {$not_allowed == "0" && $found_entry == 1} {
  1544. set file [open $black(s_file) "r"]
  1545. set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
  1546. set temp "$black(tempdir)/s_temp.$timestamp"
  1547. set tempwrite [open $temp w]
  1548. while {[gets $file line] != -1} {
  1549. set get_channel [lindex [split $line] 0]
  1550. set get_username [lindex [split $line] 1]
  1551. if {[string equal -nocase $get_channel $chan] && [string equal -nocase $get_username $user]} {
  1552. continue
  1553. } else {
  1554. puts $tempwrite $line
  1555. }
  1556. }
  1557. close $tempwrite
  1558. close $file
  1559. file rename -force $temp $black(s_file)
  1560. }
  1561. set who "$chan $user $suspend_time $bywho $current_level $reason"
  1562. set file [open $black(s_file) "a"]
  1563. puts $file $who
  1564. close $file
  1565. return 1
  1566. }
  1567. proc s:process:getlevel {hand chan} {
  1568. global black
  1569. if {[matchattr $hand n]} {
  1570. set current_flags "BOSS-OWNER"
  1571. } elseif {[matchattr $hand m]} {
  1572. set current_flags "OWNER"
  1573. } elseif {[matchattr $hand o]} {
  1574. set current_flags "MASTER"
  1575. } elseif {[matchattr $hand -|M $chan]} {
  1576. set current_flags "MANAGER"
  1577. } elseif {[matchattr $hand -|A $chan]} {
  1578. set current_flags "ADMIN"
  1579. }
  1580. return $current_flags
  1581. }
  1582. proc s:process:allow {get_level current_level} {
  1583. global black
  1584. if {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "OWNER"]} {
  1585. return 1
  1586. } elseif {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "MANAGER"]} {
  1587. return 1
  1588. } elseif {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "ADMIN"]} {
  1589. return 1
  1590. } elseif {[string equal -nocase $get_level "OWNER"] && [string equal -nocase $current_level "MANAGER"]} {
  1591. return 1
  1592. } elseif {[string equal -nocase $get_level "OWNER"] && [string equal -nocase $current_level "ADMIN"]} {
  1593. return 1
  1594. } elseif {[string equal -nocase $get_level "MANAGER"] && [string equal -nocase $current_level "ADMIN"]} {
  1595. return 1
  1596. }
  1597. return 0
  1598. }
  1599. ################################## us ################################
  1600. proc us:process {nick host hand chan chan1 user type} {
  1601. global botnick black
  1602. set cmd_status [btcmd:status $chan $hand "us" 0]
  1603. if {$cmd_status == "1"} {
  1604. return
  1605. }
  1606. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  1607. return
  1608. }
  1609. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1610. return
  1611. }
  1612. set show_user $user
  1613. set get_time [unixtime]
  1614. set flags "-|-q"
  1615. set gl_flags "-q"
  1616. if {$user == ""} {
  1617. switch $type {
  1618. 0 {
  1619. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "us"
  1620. }
  1621. 1 {
  1622. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "us"
  1623. }
  1624. 2 {
  1625. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "us"
  1626. }
  1627. }
  1628. return
  1629. }
  1630. if {![validchan $chan]} {
  1631. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1632. return
  1633. }
  1634. if {![validuser $user]} {
  1635. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  1636. return
  1637. }
  1638. if {![matchattr $user nmo|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  1639. return
  1640. }
  1641. if {![matchattr $user q|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 us.1 $show_user
  1642. return
  1643. }
  1644. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  1645. if {$get_status_access == "1"} {
  1646. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  1647. return
  1648. }
  1649. set current_level [s:process:getlevel $hand $chan]
  1650. if {[matchattr $hand n] && [matchattr $user m]} {
  1651. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1652. set type2 "1"
  1653. set inf [us:process:remove $nick $host $hand "GLOBAL" $chan1 $user $type2 $current_level]
  1654. } elseif {[matchattr $hand n] && [matchattr $user o] && ![matchattr $user m]} {
  1655. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1656. set type2 "1"
  1657. set inf [us:process:remove $nick $host $hand "GLOBAL" $chan1 $user $type2 $current_level]
  1658. } elseif {[matchattr $hand m] && [matchattr $user o] && ![matchattr $user m]} {
  1659. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1660. set type2 "1"
  1661. set inf [us:process:remove $nick $host $hand "GLOBAL" $chan1 $user $type2 $current_level]
  1662. } else {
  1663. set type2 "0"
  1664. set inf [us:process:remove $nick $host $hand $chan $chan1 $user $type $current_level]
  1665. setuser $user XTRA CHANMODIF($chan) $get_time:$hand
  1666. }
  1667. if {$inf == "1"} {
  1668. if {$type2 == "1"} {
  1669. blacktools:tell $nick $host $hand $chan $chan1 us.3 $show_user
  1670. } else {
  1671. blacktools:tell $nick $host $hand $chan $chan1 us.2 $show_user
  1672. }
  1673. }
  1674. }
  1675. proc us:process:remove {nick host hand chan chan1 user type level} {
  1676. global black
  1677. set found_it 0
  1678. set not_allowed 0
  1679. set file [open $black(s_file) "r"]
  1680. set database [read -nonewline $file]
  1681. close $file
  1682. set data [split $database "\n"]
  1683. foreach line $data {
  1684. set get_channel [lindex [split $line] 0]
  1685. set get_username [lindex [split $line] 1]
  1686. set get_bywho [lindex [split $line] 3]
  1687. if {[string equal -nocase $get_channel $chan] && [string equal -nocase $get_username $user]} {
  1688. set found_entry 1
  1689. set get_level [lindex [split $line] 4]
  1690. set not_allowed [s:process:allow $get_level $level]
  1691. }
  1692. }
  1693. if {$not_allowed == "1"} {
  1694. blacktools:tell $nick $host $hand $chan $chan1 us.4 $user
  1695. return 0
  1696. }
  1697. set file [open $black(s_file) "r"]
  1698. set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
  1699. set temp "$black(tempdir)/s_temp.$timestamp"
  1700. set tempwrite [open $temp w]
  1701. while {[gets $file line] != -1} {
  1702. set tm [lindex [split $line] 2]
  1703. set suspend_chan [lindex [split $line] 0]
  1704. set suspend_user [lindex [split $line] 1]
  1705. if {[string equal -nocase $user $suspend_user] && [string equal -nocase $suspend_chan $chan]} {
  1706. suspend:delete:action $suspend_user $suspend_chan
  1707. set found_it 1
  1708. continue
  1709. } else {
  1710. puts $tempwrite $line
  1711. }
  1712. }
  1713. close $tempwrite
  1714. close $file
  1715. file rename -force $temp $black(s_file)
  1716. return $found_it
  1717. }
  1718. ############################# auto #################################
  1719. proc auto:join {nick host hand chan} {
  1720. global black
  1721. if {[matchattr $hand a|a $chan]} {
  1722. if {[matchattr $hand q|q $chan]} {
  1723. return
  1724. }
  1725. pushmode $chan +o $nick
  1726. }
  1727. if {[matchattr $hand g|g $chan]} {
  1728. if {[matchattr $hand q|q $chan]} {
  1729. return
  1730. }
  1731. pushmode $chan +v $nick
  1732. }
  1733. }
  1734. proc auto:process {nick host hand chan chan1 user option global type} {
  1735. global black
  1736. set cmd_status [btcmd:status $chan $hand "auto" 0]
  1737. if {$cmd_status == "1"} {
  1738. return
  1739. }
  1740. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  1741. return
  1742. }
  1743. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1744. return
  1745. }
  1746. set show_user $user
  1747. if {[onchan $user $chan] && ![validuser $user]} {
  1748. set user [nick2hand $user]
  1749. }
  1750. if {$user == "" || ![regexp {^[+ -]} $option]} {
  1751. switch $type {
  1752. 0 {
  1753. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "auto"
  1754. }
  1755. 1 {
  1756. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "auto"
  1757. }
  1758. 2 {
  1759. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "auto"
  1760. }
  1761. }
  1762. return 0
  1763. }
  1764. set verify [string trim $option {"+","-"}]
  1765. if {[string equal -nocase $verify "o"] || [string equal -nocase $verify "v"]} {
  1766. if {[onchan $user $chan] && ![validuser $user]} {
  1767. set user [nick2hand $user]
  1768. }
  1769. if {![validuser $user]} {
  1770. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  1771. return
  1772. }
  1773. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  1774. if {$get_status_access == "1"} {
  1775. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  1776. return
  1777. }
  1778. }
  1779. if {[string equal -nocase "$global" "global"] && [matchattr $hand nm]} {
  1780. if {[string equal -nocase $option "+o"]} {
  1781. if {[matchattr $user g]} {
  1782. chattr $user -g
  1783. }
  1784. chattr $user +a
  1785. blacktools:tell $nick $host $hand $chan $chan1 auto.12 $show_user
  1786. }
  1787. if {[string equal -nocase $option "-o"]} {
  1788. chattr $user -a
  1789. blacktools:tell $nick $host $hand $chan $chan1 auto.20 $show_user
  1790. }
  1791. if {[string equal -nocase $option "+v"]} {
  1792. if {[matchattr $user a]} {
  1793. chattr $user -a
  1794. }
  1795. chattr $user +g
  1796. blacktools:tell $nick $host $hand $chan $chan1 auto.13 $show_user
  1797. }
  1798. if {[string equal -nocase $option "-v"]} {
  1799. chattr $user -g
  1800. blacktools:tell $nick $host $hand $chan $chan1 auto.21 $show_user
  1801. }
  1802. return
  1803. }
  1804. if {![matchattr $user -|MAOV $chan]} {
  1805. blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  1806. return
  1807. }
  1808. if {[string equal -nocase $option "+o"]} {
  1809. if {[matchattr $user -|g $chan]} {
  1810. chattr $user -|-g $chan
  1811. }
  1812. chattr $user -|a $chan
  1813. blacktools:tell $nick $host $hand $chan $chan1 auto.10 $show_user
  1814. }
  1815. if {[string equal -nocase $option "-o"]} {
  1816. chattr $user -|-a $chan
  1817. blacktools:tell $nick $host $hand $chan $chan1 auto.18 $show_user
  1818. }
  1819. if {[string equal -nocase $option "+v"]} {
  1820. if {[matchattr $user -|a $chan]} {
  1821. chattr $user -|-a $chan
  1822. }
  1823. chattr $user -|g $chan
  1824. blacktools:tell $nick $host $hand $chan $chan1 auto.11 $show_user
  1825. }
  1826. if {[string equal -nocase $option "-v"]} {
  1827. chattr $user -|-g $chan
  1828. blacktools:tell $nick $host $hand $chan $chan1 auto.19 $show_user
  1829. }
  1830. }
  1831. ##############
  1832. #########################################################################
  1833. ## END ##
  1834. #########################################################################