BT.AddCmds.tcl 58 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976
  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. s:remove:ondelete $user
  503. blacktools:tell $nick $host $hand $chan $chan1 del.1 $show_user
  504. } else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  505. }
  506. }
  507. }
  508. ################################ addhost #############################
  509. proc addhost:process {nick host hand chan chan1 user hosts type} {
  510. global black botnick
  511. set cmd_status [btcmd:status $chan $hand "addhost" 0]
  512. if {$cmd_status == "1"} {
  513. return
  514. }
  515. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  516. return
  517. }
  518. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  519. return
  520. }
  521. set found_it 0
  522. set found_user ""
  523. set show_user $user
  524. set show_hosts $hosts
  525. if {$user == ""} {
  526. switch $type {
  527. 0 {
  528. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "addhost"
  529. }
  530. 1 {
  531. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "addhost"
  532. }
  533. 2 {
  534. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "addhost"
  535. }
  536. }
  537. return
  538. }
  539. if {$host != "prv"} {
  540. if {[onchan $user $chan] && ![validuser $user]} {
  541. set user [nick2hand $user]
  542. }
  543. }
  544. if {![matchattr $hand mn] && [matchattr $user $black(banflag)]} {
  545. blacktools:tell $nick $host $hand $chan $chan1 gl.banblack none
  546. return
  547. }
  548. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  549. if {$get_status_access == "1"} {
  550. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  551. return
  552. }
  553. if {![string equal -nocase $hosts "-telnet!*@*"]} {
  554. foreach u [userlist] {
  555. set h [getuser $u hosts]
  556. foreach hs $h {
  557. if {[string match -nocase [split $hs] $hosts]} {
  558. set found_it 1
  559. set found_user $u
  560. }
  561. }
  562. }
  563. }
  564. if {[validuser $user]} {
  565. if {$found_it == "1"} {
  566. blacktools:tell $nick $host $hand $chan $chan1 addhost.1 "[split $found_user] $show_hosts"
  567. return
  568. }
  569. setuser $user HOSTS $hosts
  570. if {[matchattr $user B]} {
  571. add:ban $hosts [join [getuser $user XTRA BLACK_REASON]]
  572. }
  573. blacktools:tell $nick $host $hand $chan $chan1 addhost.2 "$show_user $show_hosts"
  574. } else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  575. }
  576. ############################### delhost ############################
  577. proc delhost:process {nick host hand chan chan1 user hosts type} {
  578. global black botnick
  579. set cmd_status [btcmd:status $chan $hand "delhost" 0]
  580. if {$cmd_status == "1"} {
  581. return
  582. }
  583. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  584. return
  585. }
  586. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  587. return
  588. }
  589. set show_user $user
  590. set show_hosts $hosts
  591. if {$user == ""} {
  592. switch $type {
  593. 0 {
  594. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "delhost"
  595. }
  596. 1 {
  597. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "delhost"
  598. }
  599. 2 {
  600. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "delhost"
  601. }
  602. }
  603. return
  604. }
  605. if {$host != "prv"} {
  606. if {[onchan $user $chan] && ![validuser $user]} {
  607. set user [nick2hand $user]
  608. }
  609. }
  610. if {![matchattr $hand mn] && [matchattr $user $black(banflag)]} {
  611. blacktools:tell $nick $host $hand $chan $chan1 gl.banblack none
  612. return
  613. }
  614. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  615. if {$get_status_access == "1"} {
  616. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  617. return
  618. }
  619. if {[validuser $user]} {
  620. set hhost [getuser $user hosts]
  621. foreach hhost $hhost {
  622. if {[string match -nocase [split $hhost] $hosts]} {
  623. set foundhost 1
  624. }
  625. }
  626. if {![info exists foundhost]} {
  627. blacktools:tell $nick $host $hand $chan $chan1 delhost.1 "$show_user $show_hosts"
  628. return
  629. }
  630. delhost $user $hosts
  631. foreach c [channels] {
  632. if {[validchan $c]} {
  633. if {[ischanban $hosts $c]} {
  634. if {[setting:get $c xonly] && [onchan $black(chanserv) $c]} {
  635. putserv "PRIVMSG $black(chanserv) :unban $c $hosts"
  636. } else {
  637. pushmode $c -b $hosts
  638. }
  639. }
  640. }
  641. }
  642. blacktools:tell $nick $host $hand $chan $chan1 delhost.2 "$show_user $show_hosts"
  643. } else {
  644. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  645. }
  646. }
  647. ############################### chuser ############################
  648. proc chuser:process {nick host hand chan chan1 user chandle type} {
  649. global botnick black
  650. set cmd_status [btcmd:status $chan $hand "chuser" 0]
  651. if {$cmd_status == "1"} {
  652. return
  653. }
  654. set owner_user $user
  655. set owner_chandle $chandle
  656. set show_user $user
  657. set show_chandle $chandle
  658. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  659. return
  660. }
  661. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  662. return
  663. }
  664. if {$user == ""} {
  665. switch $type {
  666. 0 {
  667. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "chuser"
  668. }
  669. 1 {
  670. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "chuser"
  671. }
  672. 2 {
  673. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "chuser"
  674. }
  675. }
  676. return
  677. }
  678. if {[onchan $user $chan] && ![validuser $user]} {
  679. set user [nick2hand $user]
  680. }
  681. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  682. if {$get_status_access == "1"} {
  683. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  684. return
  685. }
  686. if {[matchattr $hand -|M $chan] && ![matchattr $user -|ASOV $chan]} {
  687. blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  688. return
  689. }
  690. if {[validuser $chandle]} {
  691. blacktools:tell $nick $host $hand $chan $chan1 chuser.3 none
  692. return
  693. }
  694. if {[validuser $user]} {
  695. chhandle $user $chandle
  696. blacktools:tell $nick $host $hand $chan $chan1 chuser.1 "$show_user $show_chandle"
  697. } else {blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  698. }
  699. ############################ userlist #############################
  700. proc userlist:execute {hand host level chan chan1 nick type} {
  701. global black botnick
  702. set cmd_status [btcmd:status $chan $hand "userlist" 0]
  703. if {$cmd_status == "1"} {
  704. return
  705. }
  706. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  707. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  708. set gl 0
  709. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  710. return
  711. }
  712. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  713. return
  714. }
  715. if {$level == ""} {
  716. switch $type {
  717. 0 {
  718. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "userlist"
  719. }
  720. 1 {
  721. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "userlist"
  722. }
  723. 2 {
  724. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "userlist"
  725. }
  726. }
  727. return
  728. }
  729. if {[string equal -nocase $level [blacktools:getlevelname 3 $hand]]} {
  730. set flags "-|M"
  731. set numar [llength [userlist $flags $chan]]
  732. set list [userlist $flags $chan]
  733. if {$list == ""} { set list "N/A" }
  734. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 3 $hand] $list $gl
  735. } elseif {[string equal -nocase $level [blacktools:getlevelname 4 $hand]]} {
  736. set flags "-|A"
  737. set numar [llength [userlist $flags $chan]]
  738. set list [userlist $flags $chan]
  739. if {$list == ""} { set list "N/A" }
  740. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 4 $hand] $list $gl
  741. } elseif {[string equal -nocase $level [blacktools:getlevelname 7 $hand]]} {
  742. set flags "-|H"
  743. set list [userlist $flags $chan]
  744. set numar [llength [userlist $flags $chan]]
  745. if {$list == ""} { set list "N/A" }
  746. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 7 $hand] $list $gl
  747. } elseif {[string equal -nocase $level [blacktools:getlevelname 5 $hand]]} {
  748. set flags "-|O"
  749. set list [userlist $flags $chan]
  750. set numar [llength [userlist $flags $chan]]
  751. if {$list == ""} { set list "N/A" }
  752. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 5 $hand] $list $gl
  753. } elseif {[string equal -nocase $level [blacktools:getlevelname 9 $hand]] && [matchattr $hand n]} {
  754. set gl 1
  755. set flags "B|-"
  756. set list [userlist $flags $chan]
  757. set numar [llength [userlist $flags $chan]]
  758. if {$list == ""} { set list "N/A" }
  759. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 9 $hand] $list $gl
  760. } elseif {[string equal -nocase $level [blacktools:getlevelname 2 $hand]]} {
  761. if {[matchattr $hand nmo]} {
  762. set gl 1
  763. set bossflags "n|-"
  764. set ownerflags "m|-"
  765. set listbossowner [userlist $bossflags]
  766. set listowner [userlist $ownerflags]
  767. foreach user $listbossowner {
  768. if {[lsearch -exact $listowner $user] > -1} {
  769. set pos [lsearch -exact $listowner $user]
  770. set listowner [lreplace $listowner $pos $pos]
  771. }
  772. }
  773. if {$listowner == ""} { set listowner "N/A" }
  774. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 1 $hand] $listbossowner $gl
  775. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 2 $hand] $listowner $gl
  776. }
  777. } elseif {[string equal -nocase $level [blacktools:getlevelname 8 $hand]]} {
  778. if {[matchattr $hand nmo]} {
  779. set gl 1
  780. set bossflags "n|-"
  781. set ownerflags "m|-"
  782. set masterflags "o|-"
  783. set listbossowner [userlist $bossflags]
  784. set listowner [userlist $ownerflags]
  785. set listmaster [userlist $masterflags]
  786. foreach user $listbossowner {
  787. if {[lsearch -exact $listmaster $user] > -1} {
  788. set pos [lsearch -exact $listmaster $user]
  789. set listmaster [lreplace $listmaster $pos $pos]
  790. }
  791. }
  792. foreach user $listowner {
  793. if {[lsearch -exact $listmaster $user] > -1} {
  794. set pos [lsearch -exact $listmaster $user]
  795. set listmaster [lreplace $listmaster $pos $pos]
  796. }
  797. }
  798. if {$listmaster == ""} { set listmaster "N/A" }
  799. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 8 $hand] $listmaster $gl
  800. }
  801. } elseif {[string equal -nocase $level [blacktools:getlevelname 6 $hand]]} {
  802. set flags "-|V"
  803. set numar [llength [userlist $flags $chan]]
  804. set list [userlist $flags $chan]
  805. if {$list == ""} { set list "N/A" }
  806. userlist:details $nick $host $hand $chan $chan1 [blacktools:getlevelname 6 $hand] $list $gl
  807. } elseif {[string equal -nocase $level "all"]} {
  808. array set flgc [list]
  809. set flags "-|MHAVO"
  810. set list [userlist $flags $chan]
  811. set numar [llength [userlist $flags $chan]]
  812. foreach user $list {
  813. if {[matchattr $user -|M $chan]} {
  814. lappend flgc([blacktools:getlevelname 3 $hand]) $user
  815. } elseif {[matchattr $user -|A $chan]} {
  816. lappend flgc([blacktools:getlevelname 4 $hand]) $user
  817. } elseif {[matchattr $user -|O $chan]} {
  818. lappend flgc([blacktools:getlevelname 5 $hand]) $user
  819. } elseif {[matchattr $user -|V $chan]} {
  820. lappend flgc([blacktools:getlevelname 6 $hand]) $user
  821. } elseif {[matchattr $user -|H $chan]} {
  822. lappend flgc([blacktools:getlevelname 7 $hand]) $user
  823. }
  824. }
  825. blacktools:tell $nick $host $hand $chan $chan1 userlist.2 $numar
  826. foreach flw [array names flgc] {
  827. userlist:details $nick $host $hand $chan $chan1 $flw $flgc($flw) $gl
  828. }
  829. } else {
  830. if {$type == "0"} {
  831. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "userlist"
  832. return
  833. }
  834. if {$type == "1"} {
  835. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "userlist"
  836. return
  837. }
  838. }
  839. }
  840. proc userlist:details {nick host hand chan chan1 access usernames gl} {
  841. global black
  842. if {![info exists onchan]} {
  843. set onchan ""
  844. }
  845. if {![info exists the_usernames]} {
  846. set the_usernames ""
  847. }
  848. foreach user $usernames {
  849. if {$host != "prv"} {
  850. foreach n [chanlist $chan] {
  851. set id [nick2hand $n]
  852. if {[string equal -nocase $id $user]} {
  853. lappend the_usernames "$user/\002$n\002\[[userlist:check_mode $user $chan]\]"
  854. lappend onchan $user
  855. }
  856. }
  857. }
  858. if {[lsearch -exact [string tolower $onchan] [string tolower $user]] == -1} {
  859. lappend the_usernames "$user\[[userlist:check_mode $user $chan]\]"
  860. }
  861. }
  862. if {$usernames == "-"} {
  863. blacktools:tell $nick $host $hand $chan $chan1 userlist.1 "\[\002$access\002\] $usernames"
  864. return
  865. }
  866. foreach user [wordwrap $the_usernames 440] {
  867. blacktools:tell $nick $host $hand $chan $chan1 userlist.1 "\[\002$access\002\] [join $user]"
  868. }
  869. }
  870. proc userlist:check_mode {user chan} {
  871. global black
  872. if {[matchattr $user a]} {
  873. return "+o all"
  874. }
  875. if {[matchattr $user g]} {
  876. return "+v all"
  877. }
  878. if {[matchattr $user -|a $chan]} {
  879. return "+o"
  880. }
  881. if {[matchattr $user -|g $chan]} {
  882. return "+v"
  883. }
  884. }
  885. ############################### info ############################
  886. proc info:process:info_return {nick host hand chan chan1 user} {
  887. global black
  888. set show_user $user
  889. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  890. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  891. blacktools:tell $nick $host $hand $chan $chan1 info.11 "$show_user"
  892. if {[matchattr $hand nmo]} {
  893. foreach c [channels] {
  894. if {[matchattr $user -|H $c]} {
  895. set fl [blacktools:getlevelname 7 $hand]
  896. lappend flg($fl) $c
  897. } elseif {[matchattr $user -|V $c]} {
  898. set fl [blacktools:getlevelname 6 $hand]
  899. lappend flg($fl) $c
  900. } elseif {[matchattr $user -|O $c]} {
  901. set fl [blacktools:getlevelname 5 $hand]
  902. lappend flg($fl) $c
  903. } elseif {[matchattr $user -|A $c]} {
  904. set fl [blacktools:getlevelname 4 $hand]
  905. lappend flg($fl) $c
  906. } elseif {[matchattr $user -|M $c]} {
  907. set fl [blacktools:getlevelname 3 $hand]
  908. lappend flg($fl) $c
  909. }
  910. }
  911. foreach cf [array names flg] {
  912. lappend exit \002[join $flg($cf) ", "]\002 ($cf)
  913. }
  914. }
  915. if {![info exists exit]} { set exit "N/A"}
  916. set lastseen [getuser $user LASTON $chan]
  917. set hosts [getuser $user hosts]
  918. if {$lastseen == ""} {
  919. set lastseen "N/A"
  920. } else {
  921. set lastseen [clock format $lastseen -format %D-%H:%M:%S]
  922. }
  923. if {[matchattr $hand mno]} {
  924. set laston [getuser $user laston]
  925. set lastseen [lindex $laston 0]
  926. set lastchan [lindex $laston 1]
  927. if {$laston == ""} {
  928. set lastseen "N/A"
  929. set lastchan "N/A"
  930. } else {
  931. set lastseen [clock format $lastseen -format %D-%H:%M:%S]
  932. }
  933. blacktools:tell $nick $host $hand $chan $chan1 info.10 "$lastseen $lastchan"
  934. } else {
  935. blacktools:tell $nick $host $hand $chan $chan1 info.5 $lastseen
  936. }
  937. blacktools:tell $nick $host $hand $chan $chan1 info.6 $hosts
  938. if {![matchattr $user nmo|- $chan] && [matchattr $hand nmo|- $chan] && ($exit != "N/A")} {
  939. blacktools:tell $nick $host $hand $chan $chan1 info.8 "[join $exit]"
  940. }
  941. }
  942. proc info:process:chan {nick host hand chan chan1} {
  943. global black botnick
  944. set cmd_status [btcmd:status $chan $hand "info" 0]
  945. if {$cmd_status == "1"} {
  946. return
  947. }
  948. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  949. return
  950. }
  951. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  952. return
  953. }
  954. if {![validchan $chan]} {
  955. blacktools:tell $nick $host $hand $chan $chan1 gl.nocmem $chan
  956. return
  957. }
  958. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  959. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  960. set status "OK"
  961. set modes [channel get $chan chanmode]
  962. set manager [userlist -|M $chan]
  963. if {$manager == ""} { set manager "N/A" }
  964. set topic [join [topic:return $chan]]
  965. set url [join [setting:get $chan url]]
  966. if {[setting:get $chan jointime] == ""} {
  967. set jointime "N/A"
  968. set jointime_2 "N/A"
  969. } else {
  970. set jointime [clock format [setting:get $chan jointime] -format %D-%H:%M:%S]
  971. set jointime_2 [return_time $getlang [expr [unixtime] - [setting:get $chan jointime]]]
  972. }
  973. set joincount [setting:get $chan joincount]
  974. if {$joincount == ""} {set joincount 0}
  975. set nr_user [llength [chanlist $chan]]
  976. set nr_ban [llength [blacktools:banlist $chan]]
  977. set nr_user_ac 0
  978. foreach user [chanlist $chan] {
  979. set handle [nick2hand $user]
  980. if {[matchattr $handle -|OgaAHMNV $chan]} {
  981. set nr_user_ac [expr $nr_user_ac + 1]
  982. }
  983. }
  984. set file [open $black(seen_file) "r"]
  985. set database [read -nonewline $file]
  986. set data [split $database "\n"]
  987. close $file
  988. set nr_seen [llength [lsearch -all [string tolower $data] [string tolower "* $chan *"]]]
  989. blacktools:tell $nick $host $hand $chan $chan1 info.15 "$chan $modes"
  990. blacktools:tell $nick $host $hand $chan $chan1 info.16 "$manager"
  991. if {[channel get $chan inactive]} {
  992. set found_it 1
  993. if {[info exists black(abuse:$chan)]} {
  994. if {$black(abuse:$chan) == "1"} {
  995. set text [black:color:set "" $black(say.$getlang.info.29)]
  996. set status "$text"
  997. } elseif {$black(abuse:$chan) == "3"} {
  998. set text [black:color:set "" $black(say.$getlang.info.27)]
  999. set status "$text"
  1000. } elseif {$black(abuse:$chan) == "2"} {
  1001. set text [black:color:set "" $black(say.$getlang.info.28)]
  1002. set status "$text"
  1003. } elseif {$black(abuse:$chan) == "4"} {
  1004. set text [black:color:set "" $black(say.$getlang.info.26)]
  1005. set status "$text"
  1006. } elseif {$black(abuse:$chan) == "5"} {
  1007. set text [black:color:set "" $black(say.$getlang.info.35)]
  1008. set status "$text"
  1009. }
  1010. } else {
  1011. set text [black:color:set "" $black(say.$getlang.info.22)]
  1012. set status "$text"
  1013. }
  1014. }
  1015. if {![info exist found_it]} {
  1016. if {![onchan $botnick $chan]} {
  1017. set found_it 1
  1018. if {[info exists black(abuse:$chan)]} {
  1019. if {$black(abuse:$chan) == "1"} {
  1020. set text [black:color:set "" $black(say.$getlang.info.33)]
  1021. set status "$text"
  1022. } elseif {$black(abuse:$chan) == "3"} {
  1023. set text [black:color:set "" $black(say.$getlang.info.31)]
  1024. set status "$text"
  1025. } elseif {$black(abuse:$chan) == "2"} {
  1026. set text [black:color:set "" $black(say.$getlang.info.32)]
  1027. set status "$text"
  1028. } elseif {$black(abuse:$chan) == "4"} {
  1029. set text [black:color:set "" $black(say.$getlang.info.30)]
  1030. set status "$text"
  1031. } elseif {$black(abuse:$chan) == "5"} {
  1032. set text [black:color:set "" $black(say.$getlang.info.34)]
  1033. set status "$text"
  1034. }
  1035. } else {
  1036. set text [black:color:set "" $black(say.$getlang.info.23)]
  1037. set status "$text"
  1038. }
  1039. }
  1040. }
  1041. if {![info exist found_it]} {
  1042. if {![botisop $chan]} {
  1043. set text [black:color:set "" $black(say.$getlang.info.24)]
  1044. set status "$text"
  1045. }
  1046. }
  1047. if {$status != "OK"} {
  1048. blacktools:tell $nick $host $hand $chan $chan1 info.19 "$status"
  1049. }
  1050. if {$topic != ""} {
  1051. blacktools:tell $nick $host $hand $chan $chan1 info.17 "$topic"
  1052. }
  1053. if {$url != ""} {
  1054. blacktools:tell $nick $host $hand $chan $chan1 info.18 "$url"
  1055. }
  1056. blacktools:tell $nick $host $hand $chan $chan1 info.20 "$jointime $jointime_2"
  1057. blacktools:tell $nick $host $hand $chan $chan1 info.21 "$joincount $nr_user $nr_user_ac $nr_ban $nr_seen"
  1058. }
  1059. proc info:process:host {nick host hand chan chan1 get_host} {
  1060. global black
  1061. set users ""
  1062. foreach user [userlist] {
  1063. foreach h [getuser $user hosts] {
  1064. if {[string match -nocase $get_host $h]} {
  1065. set found_host 1
  1066. lappend users $user
  1067. }
  1068. }
  1069. }
  1070. set users [lsort -unique $users]
  1071. set user_num [llength $users]
  1072. if {![info exists found_host]} {
  1073. return 0
  1074. }
  1075. if {$user_num == 1} {
  1076. info:process:info_return $nick $host $hand $chan $chan1 [join $users]
  1077. return 1
  1078. }
  1079. if {$user_num > 1 && $user_num < 11} {
  1080. blacktools:tell $nick $host $hand $chan $chan1 info.12 "$user_num $users"
  1081. blacktools:tell $nick $host $hand $chan $chan1 info.14 none
  1082. return 1
  1083. }
  1084. if {$user_num > 10} {
  1085. blacktools:tell $nick $host $hand $chan $chan1 info.13 "$user_num"
  1086. return 1
  1087. }
  1088. }
  1089. proc info:process {nick host hand chan chan1 user type} {
  1090. global botnick black
  1091. set cmd_status [btcmd:status $chan $hand "info" 0]
  1092. if {$cmd_status == "1"} {
  1093. return
  1094. }
  1095. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  1096. return
  1097. }
  1098. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1099. return
  1100. }
  1101. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  1102. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  1103. set show_user $user
  1104. set time [ctime [unixtime]]
  1105. array set flg [list]
  1106. if {$user == ""} {
  1107. switch $type {
  1108. 0 {
  1109. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "info"
  1110. }
  1111. 1 {
  1112. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "info"
  1113. }
  1114. 2 {
  1115. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "info"
  1116. }
  1117. }
  1118. return
  1119. }
  1120. if {[matchattr $hand nmo] && ($host == "prv") && (![regexp {^[&#]} $chan])} {
  1121. foreach chan [channels] {
  1122. if {[onchan $user $chan]} {
  1123. set handle [nick2hand $user]
  1124. }
  1125. }
  1126. } else {
  1127. if {[onchan $user $chan]} {
  1128. set handle [nick2hand $user]
  1129. }
  1130. }
  1131. if {[info exists handle]} {
  1132. if {[validuser $handle]} {
  1133. set user $handle
  1134. }
  1135. }
  1136. if {[regexp {\*} $user]} {
  1137. if {[matchattr $hand nmo]} {
  1138. set check [info:process:host $nick $host $hand $chan $chan1 $user]
  1139. if {$check == "0"} {
  1140. blacktools:tell $nick $host $hand $chan $chan1 gl.hostnotexist $user
  1141. }
  1142. return
  1143. }
  1144. }
  1145. if {![validuser $user]} {
  1146. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  1147. return
  1148. }
  1149. if {(![matchattr $user nmaBgo|OwgaAHSMNV $chan]) && [matchattr $hand mno]} {
  1150. info:process:info_return $nick $host $hand $chan $chan1 $user
  1151. return
  1152. } else {
  1153. if {[matchattr $user B] && ![matchattr $hand n] && [matchattr $hand mo]} {
  1154. info:process:info_return $nick $host $hand $chan $chan1 $user
  1155. return
  1156. }
  1157. if {![matchattr $user nmgao|OwgaAHSMNV $chan]} {
  1158. if {[matchattr $user B] && ![matchattr $hand n]} {
  1159. blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  1160. return
  1161. }
  1162. }
  1163. }
  1164. if {[matchattr $hand nmo|- $chan]} {
  1165. foreach c [channels] {
  1166. if {[matchattr $user -|H $c]} {
  1167. set fl [blacktools:getlevelname 7 $hand]
  1168. lappend flg($fl) $c
  1169. } elseif {[matchattr $user -|V $c]} {
  1170. set fl [blacktools:getlevelname 6 $hand]
  1171. lappend flg($fl) $c
  1172. } elseif {[matchattr $user -|O $c]} {
  1173. set fl [blacktools:getlevelname 5 $hand]
  1174. lappend flg($fl) $c
  1175. } elseif {[matchattr $user -|A $c]} {
  1176. set fl [blacktools:getlevelname 4 $hand]
  1177. lappend flg($fl) $c
  1178. } elseif {[matchattr $user -|M $c]} {
  1179. set fl [blacktools:getlevelname 3 $hand]
  1180. lappend flg($fl) $c
  1181. }
  1182. }
  1183. foreach cf [array names flg] {
  1184. lappend exit \002[join $flg($cf) ", "]\002 ($cf)
  1185. }
  1186. }
  1187. if {![info exists exit]} { set exit "N/A"}
  1188. set cflags [chattr $user | $chan]
  1189. if {[matchattr $user a]} {
  1190. set automode_gl "OP"
  1191. } elseif {[matchattr $user g]} {
  1192. set automode_gl "VOICE"
  1193. } else {
  1194. set automode_gl "N/A"
  1195. }
  1196. 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" }
  1197. 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" }
  1198. if {[matchattr $user -|a $chan]} {
  1199. set automode "OP"
  1200. } elseif {[matchattr $user -|g $chan]} {
  1201. set automode "VOICE"
  1202. } else {
  1203. set automode "N/A"
  1204. }
  1205. if {[matchattr $user -|q $chan]} {
  1206. set suspended 1
  1207. } else {
  1208. set suspended 0
  1209. }
  1210. set getflags [getflags $user $chan]
  1211. if {![string equal -nocase $show_user $user]} {
  1212. blacktools:tell $nick $host $hand $chan $chan1 info.1 "$user\[[black:color 1 $hand $user]\] $flags"
  1213. } else {
  1214. blacktools:tell $nick $host $hand $chan $chan1 info.1 "$user $flags"
  1215. }
  1216. if {![matchattr $user B]} {
  1217. if {$automode_gl != "N/A"} {
  1218. if {[matchattr $user mnaog]} {
  1219. if {$getflags != ""} {
  1220. blacktools:tell $nick $host $hand $chan $chan1 info.25 "* $automode_gl\[all\] $getflags $user"
  1221. } else {
  1222. blacktools:tell $nick $host $hand $chan $chan1 info.2 "* $automode_gl\[all\] $user"
  1223. }
  1224. } else {
  1225. if {$getflags != ""} {
  1226. blacktools:tell $nick $host $hand $chan $chan1 info.25 "$chan $automode_gl\[all\] $getflags $user"
  1227. } else {
  1228. blacktools:tell $nick $host $hand $chan $chan1 info.2 "$chan $automode_gl\[all\] $user"
  1229. }
  1230. }
  1231. } else {
  1232. if {[matchattr $user mno]} {
  1233. if {$getflags != ""} {
  1234. blacktools:tell $nick $host $hand $chan $chan1 info.25 "* $automode $getflags $user"
  1235. } else {
  1236. blacktools:tell $nick $host $hand $chan $chan1 info.2 "* $automode $user"
  1237. }
  1238. } else {
  1239. if {$getflags != ""} {
  1240. blacktools:tell $nick $host $hand $chan $chan1 info.25 "$chan $automode $getflags $user"
  1241. } else {
  1242. blacktools:tell $nick $host $hand $chan $chan1 info.2 "$chan $automode $user"
  1243. }
  1244. }
  1245. }
  1246. }
  1247. if {[matchattr $user B]} {
  1248. set get [getuser $user XTRA BLACK_REASON]
  1249. if {$get != ""} {
  1250. blacktools:tell $nick $host $hand $chan $chan1 info.37 $get
  1251. } else {
  1252. blacktools:tell $nick $host $hand $chan $chan1 info.37 $black(say.$getlang.handleban.1)
  1253. }
  1254. }
  1255. set extra "CHANMODIF($chan)"
  1256. set get_chan $chan
  1257. if {[matchattr $user mno]} {
  1258. set extra "CHANMODIF(GLOBAL)"
  1259. set get_chan "GLOBAL"
  1260. }
  1261. set file [open $black(s_file) "r"]
  1262. set database [read -nonewline $file]
  1263. close $file
  1264. set data [split $database "\n"]
  1265. foreach line $data {
  1266. set read_chan [lindex [split $line] 0]
  1267. set read_user [lindex [split $line] 1]
  1268. if {[string equal -nocase $read_chan $get_chan] && [string equal -nocase $read_user $user]} {
  1269. set read_time [lindex [split $line] 2]
  1270. if {[unixtime] > $read_time} {
  1271. set read_time [expr [unixtime] - $read_time]
  1272. } else {
  1273. set read_time [expr $read_time - [unixtime]]
  1274. }
  1275. set read_time [return_time_2 $getlang $read_time]
  1276. if {$read_time == 0} {
  1277. continue
  1278. }
  1279. set split_readtime [split $read_time " "]
  1280. set days [lindex $split_readtime 0]
  1281. set the_time [lindex $split_readtime 1]
  1282. set read_level [lindex [split $line] 4]
  1283. set read_reason [lrange [split $line] 5 end]
  1284. if {[string equal -nocase $get_chan "GLOBAL"]} {
  1285. blacktools:tell $nick $host $hand $chan $chan1 info.9 "$read_time $read_level $read_reason"
  1286. } else {
  1287. blacktools:tell $nick $host $hand $chan $chan1 info.7 "$read_time $read_level $read_reason"
  1288. }
  1289. }
  1290. }
  1291. if {[getuser $user INFO] != ""} {
  1292. blacktools:tell $nick $host $hand $chan $chan1 info.3 "[getuser $user INFO]"
  1293. }
  1294. set lastmodify [getuser $user XTRA $extra]
  1295. if {$lastmodify != ""} {
  1296. set split_last [split $lastmodify ":"]
  1297. set lastmodif_time [lindex $split_last 0]
  1298. set lastmodif_time [clock format $lastmodif_time -format %D-%H:%M:%S]
  1299. set lastmodif_hand [join [lindex [split $split_last] 1]]
  1300. } else {
  1301. set date [getuser $user XTRA LASTMODIFDATE]
  1302. set last [getuser $user XTRA LASTMODIFBY]
  1303. set lastmodif_time $date
  1304. set lastmodif_hand $last
  1305. }
  1306. if {($lastmodif_time == "") && ($lastmodif_hand == "")} {
  1307. set lastmodif_time "N/A"
  1308. set lastmodif_hand "N/A"
  1309. }
  1310. set lastseen [getuser $user LASTON $chan]
  1311. set hosts [getuser $user hosts]
  1312. if {$lastseen == ""} {
  1313. set lastseen "N/A"
  1314. } else {
  1315. set lastseen [clock format $lastseen -format %D-%H:%M:%S]
  1316. }
  1317. if {![matchattr $user B]} {
  1318. blacktools:tell $nick $host $hand $chan $chan1 info.4 "$lastmodif_hand $lastmodif_time"
  1319. }
  1320. if {[matchattr $hand mno]} {
  1321. set laston [getuser $user laston]
  1322. set lastseen [lindex $laston 0]
  1323. set lastchan [lindex $laston 1]
  1324. if {$laston == ""} {
  1325. set lastseen "N/A"
  1326. set lastchan "N/A"
  1327. } else {
  1328. set lastseen [clock format $lastseen -format %D-%H:%M:%S]
  1329. }
  1330. if {![matchattr $user B]} {
  1331. blacktools:tell $nick $host $hand $chan $chan1 info.10 "$lastseen $lastchan"
  1332. }
  1333. } else {
  1334. blacktools:tell $nick $host $hand $chan $chan1 info.5 $lastseen
  1335. }
  1336. if {[matchattr $hand nmo] || ([matchattr $hand -|MA $chan] && ![matchattr $user nmo]) || [string equal -nocase $user $hand]} {
  1337. foreach h [wordwrap $hosts 440] {
  1338. blacktools:tell $nick $host $hand $chan $chan1 info.6 $h
  1339. }
  1340. }
  1341. if {[matchattr $hand nmo] || ([matchattr $hand -|MA $chan] && ![matchattr $user nmo]) || [string equal -nocase $user $hand]} {
  1342. if {[getsettings $user] != ""} {
  1343. blacktools:tell $nick $host $hand $chan $chan1 info.36 [join [getsettings $user] " ; "]
  1344. }
  1345. }
  1346. if {![matchattr $user nmo|- $chan] && [matchattr $hand nmo|- $chan] && ($exit != "N/A")} {
  1347. blacktools:tell $nick $host $hand $chan $chan1 info.8 "[join $exit]"
  1348. }
  1349. }
  1350. proc getsettings {user} {
  1351. global black
  1352. set output ""
  1353. set settings "OUTPUT_LANG OUTPUT_TYPE autoinvite mychan mychar OUTPUT_COLORS NO_NOTES"
  1354. foreach setting [string toupper $settings] {
  1355. set get [getuser $user XTRA $setting]
  1356. if {$get != ""} {
  1357. if {$setting == "OUTPUT_COLORS"} {
  1358. set setting "COLORS"
  1359. }
  1360. if {$setting == "NO_NOTES"} {
  1361. set setting "NOTES"
  1362. set get "OFF"
  1363. }
  1364. if {$setting == "OUTPUT_TYPE"} {
  1365. set setting "OUTPUT"
  1366. switch $get {
  1367. 0 {
  1368. set get "NOTICE"
  1369. }
  1370. 1 {
  1371. set get "CHAN"
  1372. }
  1373. 2 {
  1374. set get "MSG"
  1375. }
  1376. }
  1377. }
  1378. if {$setting == "OUTPUT_LANG"} {
  1379. set setting "LANG"
  1380. set get [string toupper $get]
  1381. }
  1382. if {$setting == "AUTOINVITE"} {
  1383. switch $get {
  1384. 1 {
  1385. set get "ON"
  1386. }
  1387. 0 {
  1388. set get "OFF"
  1389. }
  1390. }
  1391. }
  1392. lappend output "$setting\[[join $get ","]\]"
  1393. }
  1394. }
  1395. return $output
  1396. }
  1397. proc getflags {user chan} {
  1398. global black
  1399. set flags ""
  1400. if {[matchattr $user -|f $chan]} {
  1401. lappend flags "f"
  1402. }
  1403. if {[matchattr $user -|w $chan]} {
  1404. lappend flags "w"
  1405. }
  1406. if {[matchattr $user -|P $chan]} {
  1407. lappend flags "P"
  1408. }
  1409. return [join $flags ""]
  1410. }
  1411. ################################# s ###############################
  1412. proc s:process {nick host hand chan chan1 user type suspend_time suspend_reason} {
  1413. global botnick black
  1414. set cmd_status [btcmd:status $chan $hand "s" 0]
  1415. if {$cmd_status == "1"} {
  1416. return
  1417. }
  1418. set show_user $user
  1419. set suspend_time $suspend_time
  1420. set show_suspend_reason $suspend_reason
  1421. set flags "-|q"
  1422. set gl_flags "+q"
  1423. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  1424. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  1425. set unixtime [unixtime]
  1426. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  1427. return
  1428. }
  1429. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1430. return
  1431. }
  1432. if {$user == ""} {
  1433. switch $type {
  1434. 0 {
  1435. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "s"
  1436. }
  1437. 1 {
  1438. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "s"
  1439. }
  1440. 2 {
  1441. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "s"
  1442. }
  1443. }
  1444. return
  1445. }
  1446. if {![validchan $chan]} {
  1447. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1448. return
  1449. }
  1450. if {![validuser $user]} {
  1451. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  1452. return
  1453. }
  1454. if {[matchattr $user -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 s.1 $show_user
  1455. return
  1456. }
  1457. if {![matchattr $user nmo|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  1458. return
  1459. }
  1460. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  1461. if {$get_status_access == "1"} {
  1462. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  1463. return
  1464. }
  1465. if {![regexp {^[0-9]} $suspend_time]} {
  1466. set suspend_time $black(s:default_time)
  1467. }
  1468. if {$suspend_reason == ""} {
  1469. set suspend_reason $black(say.$getlang.s.3)
  1470. }
  1471. set get_time [expr [time_return_minute $suspend_time] * 60]
  1472. set get_time [expr $unixtime + $get_time]
  1473. if {[matchattr $hand n] && [matchattr $user m]} {
  1474. chattr $user $gl_flags
  1475. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1476. set current_flags [s:process:getlevel $hand $chan]
  1477. set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
  1478. if {$s_add == "1"} {
  1479. blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
  1480. }
  1481. return
  1482. } elseif {[matchattr $hand n] && [matchattr $user o] && ![matchattr $user m]} {
  1483. chattr $user $gl_flags
  1484. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1485. set current_flags [s:process:getlevel $hand $chan]
  1486. set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
  1487. if {$s_add == "1"} {
  1488. blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
  1489. }
  1490. return
  1491. } elseif {[matchattr $hand m] && [matchattr $user o] && ![matchattr $user m]} {
  1492. chattr $user $gl_flags
  1493. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1494. set current_flags [s:process:getlevel $hand $chan]
  1495. set s_add [s:process:add $nick $hand "GLOBAL" $chan1 $user $get_time $hand $suspend_reason]
  1496. if {$s_add == "1"} {
  1497. blacktools:tell $nick $host $hand $chan $chan1 s.5 $show_user
  1498. if {![info exists black(s:timer_start)]} {
  1499. set black(s:timer_start) 1
  1500. }
  1501. }
  1502. return
  1503. }
  1504. chattr $user $flags $chan
  1505. setuser $user XTRA CHANMODIF($chan) $get_time:$hand
  1506. set current_flags [s:process:getlevel $hand $chan]
  1507. set s_add [s:process:add $nick $hand $chan $chan1 $user $get_time $hand $suspend_reason]
  1508. if {$s_add == "1"} {
  1509. blacktools:tell $nick $host $hand $chan $chan1 s.2 $show_user
  1510. if {![info exists black(s:timer_start)]} {
  1511. set black(s:timer_start) 1
  1512. }
  1513. }
  1514. }
  1515. proc s:process:add {nick hand chan chan1 user suspend_time bywho reason} {
  1516. global black username
  1517. set current_level [s:process:getlevel $bywho $chan]
  1518. set not_allowed 0
  1519. set found_timer 0
  1520. set found_entry 0
  1521. set lin 0
  1522. set file [open $black(s_file) "r"]
  1523. set database [read -nonewline $file]
  1524. close $file
  1525. set data [split $database "\n"]
  1526. foreach line $data {
  1527. set lin [expr $lin + 1]
  1528. set get_channel [lindex [split $line] 0]
  1529. set get_username [lindex [split $line] 1]
  1530. set get_bywho [lindex [split $line] 3]
  1531. if {[string equal -nocase $get_channel $chan] && [string equal -nocase $get_username $user]} {
  1532. set found_entry 1
  1533. set get_level [lindex [split $line] 4]
  1534. set not_allowed [s:process:allow $get_level $current_level]
  1535. }
  1536. }
  1537. if {$not_allowed == "1"} {
  1538. blacktools:tell $nick "" $hand $chan $chan1 s.4 $user
  1539. return 0
  1540. }
  1541. if {$not_allowed == "0" && $found_entry == 1} {
  1542. set file [open $black(s_file) "r"]
  1543. set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
  1544. set temp "$black(tempdir)/s_temp.$timestamp"
  1545. set tempwrite [open $temp w]
  1546. while {[gets $file line] != -1} {
  1547. set get_channel [lindex [split $line] 0]
  1548. set get_username [lindex [split $line] 1]
  1549. if {[string equal -nocase $get_channel $chan] && [string equal -nocase $get_username $user]} {
  1550. continue
  1551. } else {
  1552. puts $tempwrite $line
  1553. }
  1554. }
  1555. close $tempwrite
  1556. close $file
  1557. file rename -force $temp $black(s_file)
  1558. }
  1559. set who "$chan $user $suspend_time $bywho $current_level $reason"
  1560. set file [open $black(s_file) "a"]
  1561. puts $file $who
  1562. close $file
  1563. return 1
  1564. }
  1565. proc s:process:getlevel {hand chan} {
  1566. global black
  1567. if {[matchattr $hand n]} {
  1568. set current_flags "BOSS-OWNER"
  1569. } elseif {[matchattr $hand m]} {
  1570. set current_flags "OWNER"
  1571. } elseif {[matchattr $hand o]} {
  1572. set current_flags "MASTER"
  1573. } elseif {[matchattr $hand -|M $chan]} {
  1574. set current_flags "MANAGER"
  1575. } elseif {[matchattr $hand -|A $chan]} {
  1576. set current_flags "ADMIN"
  1577. }
  1578. return $current_flags
  1579. }
  1580. proc s:process:allow {get_level current_level} {
  1581. global black
  1582. if {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "OWNER"]} {
  1583. return 1
  1584. } elseif {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "MANAGER"]} {
  1585. return 1
  1586. } elseif {[string equal -nocase $get_level "BOSS-OWNER"] && [string equal -nocase $current_level "ADMIN"]} {
  1587. return 1
  1588. } elseif {[string equal -nocase $get_level "OWNER"] && [string equal -nocase $current_level "MANAGER"]} {
  1589. return 1
  1590. } elseif {[string equal -nocase $get_level "OWNER"] && [string equal -nocase $current_level "ADMIN"]} {
  1591. return 1
  1592. } elseif {[string equal -nocase $get_level "MANAGER"] && [string equal -nocase $current_level "ADMIN"]} {
  1593. return 1
  1594. }
  1595. return 0
  1596. }
  1597. ################################## us ################################
  1598. proc us:process {nick host hand chan chan1 user type} {
  1599. global botnick black
  1600. set cmd_status [btcmd:status $chan $hand "us" 0]
  1601. if {$cmd_status == "1"} {
  1602. return
  1603. }
  1604. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  1605. return
  1606. }
  1607. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1608. return
  1609. }
  1610. set show_user $user
  1611. set get_time [unixtime]
  1612. set flags "-|-q"
  1613. set gl_flags "-q"
  1614. if {$user == ""} {
  1615. switch $type {
  1616. 0 {
  1617. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "us"
  1618. }
  1619. 1 {
  1620. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "us"
  1621. }
  1622. 2 {
  1623. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "us"
  1624. }
  1625. }
  1626. return
  1627. }
  1628. if {![validchan $chan]} {
  1629. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1630. return
  1631. }
  1632. if {![validuser $user]} {
  1633. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  1634. return
  1635. }
  1636. if {![matchattr $user nmo|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  1637. return
  1638. }
  1639. if {![matchattr $user q|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 us.1 $show_user
  1640. return
  1641. }
  1642. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  1643. if {$get_status_access == "1"} {
  1644. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  1645. return
  1646. }
  1647. set current_level [s:process:getlevel $hand $chan]
  1648. if {[matchattr $hand n] && [matchattr $user m]} {
  1649. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1650. set type2 "1"
  1651. set inf [us:process:remove $nick $host $hand "GLOBAL" $chan1 $user $type2 $current_level]
  1652. } elseif {[matchattr $hand n] && [matchattr $user o] && ![matchattr $user m]} {
  1653. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1654. set type2 "1"
  1655. set inf [us:process:remove $nick $host $hand "GLOBAL" $chan1 $user $type2 $current_level]
  1656. } elseif {[matchattr $hand m] && [matchattr $user o] && ![matchattr $user m]} {
  1657. setuser $user XTRA CHANMODIF(GLOBAL) $get_time:$hand
  1658. set type2 "1"
  1659. set inf [us:process:remove $nick $host $hand "GLOBAL" $chan1 $user $type2 $current_level]
  1660. } else {
  1661. set type2 "0"
  1662. set inf [us:process:remove $nick $host $hand $chan $chan1 $user $type $current_level]
  1663. setuser $user XTRA CHANMODIF($chan) $get_time:$hand
  1664. }
  1665. if {$inf == "1"} {
  1666. if {$type2 == "1"} {
  1667. blacktools:tell $nick $host $hand $chan $chan1 us.3 $show_user
  1668. } else {
  1669. blacktools:tell $nick $host $hand $chan $chan1 us.2 $show_user
  1670. }
  1671. }
  1672. }
  1673. proc us:process:remove {nick host hand chan chan1 user type level} {
  1674. global black
  1675. set found_it 0
  1676. set not_allowed 0
  1677. set file [open $black(s_file) "r"]
  1678. set database [read -nonewline $file]
  1679. close $file
  1680. set data [split $database "\n"]
  1681. foreach line $data {
  1682. set get_channel [lindex [split $line] 0]
  1683. set get_username [lindex [split $line] 1]
  1684. set get_bywho [lindex [split $line] 3]
  1685. if {[string equal -nocase $get_channel $chan] && [string equal -nocase $get_username $user]} {
  1686. set found_entry 1
  1687. set get_level [lindex [split $line] 4]
  1688. set not_allowed [s:process:allow $get_level $level]
  1689. }
  1690. }
  1691. if {$not_allowed == "1"} {
  1692. blacktools:tell $nick $host $hand $chan $chan1 us.4 $user
  1693. return 0
  1694. }
  1695. set file [open $black(s_file) "r"]
  1696. set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
  1697. set temp "$black(tempdir)/s_temp.$timestamp"
  1698. set tempwrite [open $temp w]
  1699. while {[gets $file line] != -1} {
  1700. set tm [lindex [split $line] 2]
  1701. set suspend_chan [lindex [split $line] 0]
  1702. set suspend_user [lindex [split $line] 1]
  1703. if {[string equal -nocase $user $suspend_user] && [string equal -nocase $suspend_chan $chan]} {
  1704. suspend:delete:action $suspend_user $suspend_chan
  1705. set found_it 1
  1706. continue
  1707. } else {
  1708. puts $tempwrite $line
  1709. }
  1710. }
  1711. close $tempwrite
  1712. close $file
  1713. file rename -force $temp $black(s_file)
  1714. return $found_it
  1715. }
  1716. ############################# auto #################################
  1717. proc auto:join {nick host hand chan} {
  1718. global black
  1719. if {[matchattr $hand a|a $chan]} {
  1720. if {[matchattr $hand q|q $chan]} {
  1721. return
  1722. }
  1723. pushmode $chan +o $nick
  1724. }
  1725. if {[matchattr $hand g|g $chan]} {
  1726. if {[matchattr $hand q|q $chan]} {
  1727. return
  1728. }
  1729. pushmode $chan +v $nick
  1730. }
  1731. }
  1732. proc auto:process {nick host hand chan chan1 user option global type} {
  1733. global black
  1734. set cmd_status [btcmd:status $chan $hand "auto" 0]
  1735. if {$cmd_status == "1"} {
  1736. return
  1737. }
  1738. if {[matchattr $hand q]} { blacktools:tell $nick $host $hand $chan $chan1 gl.glsuspend none
  1739. return
  1740. }
  1741. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1742. return
  1743. }
  1744. set show_user $user
  1745. if {[onchan $user $chan] && ![validuser $user]} {
  1746. set user [nick2hand $user]
  1747. }
  1748. if {$user == "" || ![regexp {^[+ -]} $option]} {
  1749. switch $type {
  1750. 0 {
  1751. blacktools:tell $nick $host $hand $chan $chan1 gl.instr "auto"
  1752. }
  1753. 1 {
  1754. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_nick "auto"
  1755. }
  1756. 2 {
  1757. blacktools:tell $nick $host $hand $chan $chan1 gl.instr_priv "auto"
  1758. }
  1759. }
  1760. return 0
  1761. }
  1762. set verify [string trim $option {"+","-"}]
  1763. if {[string equal -nocase $verify "o"] || [string equal -nocase $verify "v"]} {
  1764. if {[onchan $user $chan] && ![validuser $user]} {
  1765. set user [nick2hand $user]
  1766. }
  1767. if {![validuser $user]} {
  1768. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  1769. return
  1770. }
  1771. set get_status_access [check:access $nick $host $hand $chan $chan1 $user]
  1772. if {$get_status_access == "1"} {
  1773. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  1774. return
  1775. }
  1776. }
  1777. if {[string equal -nocase "$global" "global"] && [matchattr $hand nm]} {
  1778. if {[string equal -nocase $option "+o"]} {
  1779. if {[matchattr $user g]} {
  1780. chattr $user -g
  1781. }
  1782. chattr $user +a
  1783. blacktools:tell $nick $host $hand $chan $chan1 auto.12 $show_user
  1784. }
  1785. if {[string equal -nocase $option "-o"]} {
  1786. chattr $user -a
  1787. blacktools:tell $nick $host $hand $chan $chan1 auto.20 $show_user
  1788. }
  1789. if {[string equal -nocase $option "+v"]} {
  1790. if {[matchattr $user a]} {
  1791. chattr $user -a
  1792. }
  1793. chattr $user +g
  1794. blacktools:tell $nick $host $hand $chan $chan1 auto.13 $show_user
  1795. }
  1796. if {[string equal -nocase $option "-v"]} {
  1797. chattr $user -g
  1798. blacktools:tell $nick $host $hand $chan $chan1 auto.21 $show_user
  1799. }
  1800. return
  1801. }
  1802. if {![matchattr $user -|MAOV $chan]} {
  1803. blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  1804. return
  1805. }
  1806. if {[string equal -nocase $option "+o"]} {
  1807. if {[matchattr $user -|g $chan]} {
  1808. chattr $user -|-g $chan
  1809. }
  1810. chattr $user -|a $chan
  1811. blacktools:tell $nick $host $hand $chan $chan1 auto.10 $show_user
  1812. }
  1813. if {[string equal -nocase $option "-o"]} {
  1814. chattr $user -|-a $chan
  1815. blacktools:tell $nick $host $hand $chan $chan1 auto.18 $show_user
  1816. }
  1817. if {[string equal -nocase $option "+v"]} {
  1818. if {[matchattr $user -|a $chan]} {
  1819. chattr $user -|-a $chan
  1820. }
  1821. chattr $user -|g $chan
  1822. blacktools:tell $nick $host $hand $chan $chan1 auto.11 $show_user
  1823. }
  1824. if {[string equal -nocase $option "-v"]} {
  1825. chattr $user -|-g $chan
  1826. blacktools:tell $nick $host $hand $chan $chan1 auto.19 $show_user
  1827. }
  1828. }
  1829. ##############
  1830. #########################################################################
  1831. ## END ##
  1832. #########################################################################