BT.Commands.tcl 333 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484
  1. ##########################################################
  2. #
  3. # BLackToolS
  4. # Commands TCL
  5. #
  6. # BLaCkShaDoW ProductionS
  7. ##########################################################
  8. proc blacktools:banner:3 {mask hand chan reason bantime type} {
  9. global black botnick
  10. if {[channel get $chan xban]} {
  11. set getcount [channel get $chan kickcount]
  12. set getxtime [channel get $chan xbantime]
  13. if {$getxtime == "0"} { set getxtime "1" }
  14. set getxlevel [channel get $chan xbanlevel]
  15. if {$getxlevel == "0"} { set getxlevel "100"}
  16. set getcount [channel get $chan kickcount]
  17. set kcount [expr $getcount +1]
  18. channel set $chan kickcount $kcount
  19. set countz [getuser $hand XTRA $type]
  20. if {$countz == ""} { set countz 0 }
  21. set counts [expr $countz + 1]
  22. setuser $hand XTRA $type $counts
  23. if {[channel get $chan showcount]} {
  24. set reason "$reason - $kcount -"
  25. } else {
  26. set reason "$reason"
  27. }
  28. putquick "PRIVMSG $black(chanserv) :ban $chan $mask $getxtime $getxlevel $reason"
  29. utimer 1 [list newchanban $chan $mask $hand $reason $bantime]
  30. putquick "MODE $chan +b $mask"
  31. if {![channel get $chan chanreport]} {
  32. return
  33. }
  34. set backchan [channel get $chan backchan]
  35. if {$backchan == ""} {
  36. return
  37. }
  38. if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
  39. return
  40. }
  41. set getlang [string tolower [channel get $chan lang]]
  42. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  43. set replace(%banmask%) $mask
  44. set replace(%bantime%) $bantime
  45. set replace(%reason%) $reason
  46. set replace(%chan%) $chan
  47. set replace(%nick%) $hand
  48. puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan.1)]"
  49. } else {
  50. set getcount [channel get $chan kickcount]
  51. set kcount [expr $getcount +1]
  52. channel set $chan kickcount $kcount
  53. set countz [getuser $hand XTRA $type]
  54. if {$countz == ""} { set countz 0 }
  55. set counts [expr $countz + 1]
  56. setuser $hand XTRA $type $counts
  57. if {[channel get $chan showcount]} {
  58. set reason "$reason - $kcount -" } else {
  59. set reason "$reason"
  60. }
  61. newchanban $chan $mask $hand $reason $bantime
  62. putquick "MODE $chan +b $mask"
  63. if {![channel get $chan chanreport]} {
  64. return
  65. }
  66. set backchan [channel get $chan backchan]
  67. if {$backchan == ""} {
  68. return
  69. }
  70. if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
  71. return
  72. }
  73. set getlang [string tolower [channel get $chan lang]]
  74. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  75. set replace(%banmask%) $mask
  76. set replace(%bantime%) $bantime
  77. set replace(%reason%) $reason
  78. set replace(%chan%) $chan
  79. set replace(%nick%) $hand
  80. puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan.1)]"
  81. }
  82. }
  83. proc blacktools:banner:4 {mask hand chan reason bantime type} {
  84. global black botnick
  85. if {[channel get $chan xban]} {
  86. set getcount [channel get $chan kickcount]
  87. set getxtime [channel get $chan xbantime]
  88. if {$getxtime == "0"} { set getxtime "1" }
  89. set getxlevel [channel get $chan xbanlevel]
  90. if {$getxlevel == "0"} { set getxlevel "100"}
  91. set getcount [channel get $chan kickcount]
  92. set kcount [expr $getcount +1]
  93. channel set $chan kickcount $kcount
  94. set countz [getuser $hand XTRA $type]
  95. if {$countz == ""} { set countz 0 }
  96. set counts [expr $countz + 1]
  97. setuser $hand XTRA $type $counts
  98. if {[channel get $chan showcount]} {
  99. set reason "$reason - $kcount -"
  100. } else {
  101. set reason "$reason"
  102. }
  103. putquick "PRIVMSG $black(chanserv) :ban $chan $mask $getxtime $getxlevel $reason"
  104. utimer 1 [list newchanban $chan $mask $hand $reason $bantime sticky]
  105. putquick "MODE $chan +b $mask"
  106. if {![channel get $chan chanreport]} {
  107. return
  108. }
  109. set backchan [channel get $chan backchan]
  110. if {$backchan == ""} {
  111. return
  112. }
  113. if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
  114. return
  115. }
  116. set getlang [string tolower [channel get $chan lang]]
  117. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  118. set replace(%banmask%) $mask
  119. set replace(%bantime%) $bantime
  120. set replace(%reason%) $reason
  121. set replace(%chan%) $chan
  122. set replace(%nick%) $hand
  123. puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan.1)]"
  124. } else {
  125. set getcount [channel get $chan kickcount]
  126. set kcount [expr $getcount +1]
  127. channel set $chan kickcount $kcount
  128. set countz [getuser $hand XTRA $type]
  129. if {$countz == ""} { set countz 0 }
  130. set counts [expr $countz + 1]
  131. setuser $hand XTRA $type $counts
  132. if {[channel get $chan showcount]} {
  133. set reason "$reason - $kcount -" } else {
  134. set reason "$reason"
  135. }
  136. newchanban $chan $mask $hand $reason $bantime sticky
  137. putquick "MODE $chan +b $mask"
  138. if {![channel get $chan chanreport]} {
  139. return
  140. }
  141. set backchan [channel get $chan backchan]
  142. if {$backchan == ""} {
  143. return
  144. }
  145. if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
  146. return
  147. }
  148. set getlang [string tolower [channel get $chan lang]]
  149. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  150. set replace(%banmask%) $mask
  151. set replace(%bantime%) $bantime
  152. set replace(%reason%) $reason
  153. set replace(%chan%) $chan
  154. set replace(%nick%) $hand
  155. puthelp "PRIVMSG $backchan :[string map [array get replace] $black(say.$getlang.reportchan.1)]"
  156. }
  157. }
  158. ######################################## Commands #####################################
  159. proc drpublic {nick host hand chan arg} {
  160. global botnick black
  161. set drone [lindex [split $arg] 0]
  162. set chan1 "$chan"
  163. set mask [lindex [split $arg] 0]
  164. set type "0"
  165. foreach c [channels] {
  166. set backchan [channel get $c backchan]
  167. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  168. set chan "$c"
  169. }
  170. }
  171. if {[regexp {^[&#]} $drone] && [matchattr $hand nm|MASO $chan]} {
  172. set chan "$drone"
  173. set drone [lindex [split $arg] 1]
  174. set mask [lindex [split $arg] 1]
  175. }
  176. set split_text [split $drone ","]
  177. foreach txt $split_text {
  178. dr:process $txt $txt $nick $hand $host $chan $chan1 $type
  179. }
  180. if {$drone == ""} {
  181. dr:process $drone $drone $nick $hand $host $chan $chan1 $type
  182. }
  183. }
  184. proc dr:process {drone mask nick hand host chan chan1 type} {
  185. global botnick black
  186. set char(p) [lindex $black(cmdchar) 0]
  187. if {[string equal -nocase "none" "$char(p)"]} {
  188. set char(p) ""
  189. }
  190. set handle [nick2hand $drone]
  191. if {![validchan $chan]} {
  192. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  193. return
  194. }
  195. if {![onchan $botnick $chan]} {
  196. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  197. return
  198. }
  199. set list [userlist $black(exceptflags) $chan]
  200. set getreason [channel get $chan dr-reason]
  201. if {$getreason == ""} {
  202. set getlang [string tolower [channel get $chan lang]]
  203. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  204. set getreason $black(say.$getlang.dr.5)
  205. }
  206. if {[channel get $chan showhandle]} {
  207. set reason "($hand) $getreason"
  208. } else { set reason "$getreason" }
  209. set getbantime [channel get $chan dr-bantime]
  210. if {$getbantime == "0"} { set getbantime $black(drtime) }
  211. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  212. return
  213. }
  214. foreach user $list {
  215. set hosts [getuser $user hosts]
  216. foreach host $hosts {
  217. if {[string match -nocase $mask $host]} {
  218. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  219. return
  220. }
  221. }
  222. }
  223. if {[matchattr $handle $black(exceptflags) $chan]} {
  224. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  225. return
  226. }
  227. if {$mask == "*!*@*"} {
  228. return
  229. }
  230. if {[isbotnick $drone]} {
  231. return
  232. }
  233. if {![botisop $chan]} {
  234. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  235. return
  236. }
  237. if {[onchan $drone $chan]} {
  238. set mask *!*@[lindex [split [getchanhost $drone $chan] "@"] 1]
  239. }
  240. if {[matchattr $hand nm|- $chan]} {
  241. if {($drone == "") && ($type == "0")} {
  242. blacktools:tell $nick $host $hand $chan $chan1 dr.1 none
  243. return
  244. }
  245. if {($drone == "") && ($type == "1")} {
  246. blacktools:tell $nick $host $hand $chan $chan1 dr.2 none
  247. return
  248. }
  249. }
  250. if {($drone == "") && ($type == "0")} {
  251. blacktools:tell $nick $host $hand $chan $chan1 dr.3 none
  252. return
  253. }
  254. if {($drone == "") && ($type == "1")} {
  255. blacktools:tell $nick $host $hand $chan $chan1 dr.4 none
  256. return
  257. }
  258. blacktools:banner:3 $mask $hand $chan $reason $getbantime DR($chan)
  259. }
  260. proc botpublic {nick host hand chan arg} {
  261. global botnick black
  262. set bot [lindex [split $arg] 0]
  263. set mask [lindex [split $arg] 0]
  264. set type 0
  265. set chan1 "$chan"
  266. foreach c [channels] {
  267. set backchan [channel get $c backchan]
  268. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  269. set chan "$c"
  270. }
  271. }
  272. if {[regexp {^[&#]} $bot] && [matchattr $hand nm|- $chan]} {
  273. set chan "$bot"
  274. set bot [lindex [split $arg] 1]
  275. set mask [lindex [split $arg] 1]
  276. }
  277. set split_text [split $bot ","]
  278. foreach txt $split_text {
  279. bot:process $txt $txt $nick $hand $host $chan $chan1 $type
  280. }
  281. if {$bot == ""} {
  282. bot:process $bot $bot $nick $hand $host $chan $chan1 $type
  283. }
  284. }
  285. proc bot:process {bot mask nick hand host chan chan1 type} {
  286. global black botnick
  287. set handle [nick2hand $bot]
  288. set char(p) [lindex $black(cmdchar) 0]
  289. if {[string match -nocase "none" "$char(p)"]} {
  290. set char(p) ""
  291. }
  292. if {![validchan $chan]} {
  293. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  294. return
  295. }
  296. if {![onchan $botnick $chan]} {
  297. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  298. return
  299. }
  300. set list [userlist $black(exceptflags) $chan]
  301. set getreason [channel get $chan bot-reason]
  302. if {$getreason == ""} {
  303. set getlang [string tolower [channel get $chan lang]]
  304. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  305. set getreason $black(say.$getlang.bot.5)
  306. }
  307. if {[channel get $chan showhandle]} {
  308. set reason "($hand) $getreason"
  309. } else { set reason "$getreason"
  310. }
  311. set getbantime [channel get $chan bot-bantime]
  312. if {$getbantime == "0"} { set getbantime $black(bottime) }
  313. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  314. return
  315. }
  316. foreach user $list {
  317. set hosts [getuser $user hosts]
  318. foreach host $hosts {
  319. if {[string match -nocase $mask $host]} {
  320. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  321. return
  322. }
  323. }
  324. }
  325. if {[matchattr $handle $black(exceptflags) $chan]} {
  326. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  327. return
  328. }
  329. if {$mask == "*!*@*"} {
  330. return
  331. }
  332. if {[isbotnick $bot]} {
  333. return
  334. }
  335. if {![botisop $chan]} {
  336. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  337. return
  338. }
  339. if {[onchan $bot $chan]} {
  340. set mask *!*@[lindex [split [getchanhost $bot $chan] "@"] 1]
  341. }
  342. if {[matchattr $hand nm|- $chan]} {
  343. if {($bot == "") && ($type == "0")} {
  344. blacktools:tell $nick $host $hand $chan $chan1 bot.1 none
  345. return
  346. }
  347. if {($bot == "") && ($type == "1")} {
  348. blacktools:tell $nick $host $hand $chan $chan1 bot.2 none
  349. return
  350. }
  351. }
  352. if {($bot == "") && ($type == "0")} {
  353. blacktools:tell $nick $host $hand $chan $chan1 bot.3 none
  354. return
  355. }
  356. if {($bot == "") && ($type == "1")} {
  357. blacktools:tell $nick $host $hand $chan $chan1 bot.4 none
  358. return
  359. }
  360. blacktools:banner:3 $mask $hand $chan $reason $getbantime bot($chan)
  361. }
  362. proc b:local {bnick mask time nick reason hand host chan chan1 type} {
  363. global botnick black
  364. set handle [nick2hand $bnick]
  365. set char(p) [lindex $black(cmdchar) 0]
  366. if {[string match -nocase "none" "$char(p)"]} {
  367. set char(p) ""
  368. }
  369. if {![validchan $chan]} {
  370. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  371. return
  372. }
  373. if {![onchan $botnick $chan]} {
  374. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  375. return
  376. }
  377. set list [userlist $black(exceptflags) $chan]
  378. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  379. return
  380. }
  381. foreach user $list {
  382. set hosts [getuser $user hosts]
  383. foreach host $hosts {
  384. if {[string match -nocase $mask $host]} {
  385. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  386. return
  387. }
  388. }
  389. }
  390. if {[matchattr $handle $black(exceptflags) $chan]} {
  391. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  392. return
  393. }
  394. if {$time == "" || (![regexp {^[0-9]} $time])} {
  395. if {[channel get $chan b-bantime] != "0"} {
  396. set time [channel get $chan b-bantime]
  397. } else { set time "$black(btime)" }
  398. }
  399. if {$reason == ""} {
  400. if {[channel get $chan b-reason] != ""} {
  401. set reason [channel get $chan b-reason]
  402. }
  403. }
  404. if {$reason == ""} {
  405. set getlang [string tolower [channel get $chan lang]]
  406. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  407. set reason1 $black(say.$getlang.b.9)
  408. } else { set reason1 "$reason" }
  409. if {[channel get $chan showhandle]} {
  410. set reason "($hand) $reason1"
  411. } else { set reason "$reason1"
  412. }
  413. if {[isbotnick $bnick]} {
  414. return
  415. }
  416. if {![botisop $chan]} {
  417. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  418. return
  419. }
  420. if {$mask == "*!*@*"} {
  421. return
  422. }
  423. if {[onchan $bnick $chan]} {
  424. set mask *!*@[lindex [split [getchanhost $bnick $chan] "@"] 1]
  425. }
  426. if {[matchattr $hand nm|- $chan]} {
  427. if {($bnick == "") && ($type == "0")} {
  428. blacktools:tell $nick $host $hand $chan $chan1 b.1 none
  429. blacktools:tell $nick $host $hand $chan $chan1 b.2 none
  430. return
  431. }
  432. if {($bnick == "") && ($type == "1")} {
  433. blacktools:tell $nick $host $hand $chan $chan1 b.3 none
  434. blacktools:tell $nick $host $hand $chan $chan1 b.4 none
  435. return
  436. }
  437. }
  438. if {($bnick == "") && ($type == "0")} {
  439. blacktools:tell $nick $host $hand $chan $chan1 b.5 none
  440. return
  441. }
  442. if {($bnick == "") && ($type == "1")} {
  443. blacktools:tell $nick $host $hand $chan $chan1 b.6 none
  444. return
  445. }
  446. if {[matchattr $hand -|O $chan]} {
  447. if {$time == 0 || $time > 10160} {
  448. blacktools:tell $nick $host $hand $chan $chan1 b.10 none
  449. return
  450. }
  451. }
  452. blacktools:banner:3 $mask $hand $chan $reason $time b($chan)
  453. if {$time == "0"} { set reply "Permanent" } else { set reply "$time minute" }
  454. blacktools:tell $nick $host $hand $chan $chan1 b.7 "$mask $reply"
  455. }
  456. proc b:global {bnick mask time nick reason hand host chan chan1 type1 type2} {
  457. global botnick black
  458. set handle [nick2hand $bnick]
  459. set char(p) [lindex $black(cmdchar) 0]
  460. set list [userlist nm|-]
  461. foreach user $list {
  462. set hosts [getuser $user hosts]
  463. foreach host $hosts {
  464. if {[string match $mask $host]} {
  465. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  466. return
  467. }
  468. }
  469. }
  470. if {[matchattr $handle nm|- $chan]} {
  471. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  472. return
  473. }
  474. if {$reason == ""} {set reason1 "(GLOBAL) $black(dfreason)"
  475. } else { set reason1 "(GLOBAL) $reason" }
  476. if {[channel get $chan showhandle]} {
  477. set reason "($hand) $reason1"
  478. } else { set reason "$reason1"
  479. }
  480. if {[isbotnick $bnick]} {
  481. return
  482. }
  483. if {![botisop $chan]} {
  484. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  485. return
  486. }
  487. if {$mask == "*!*@*"} {
  488. return
  489. }
  490. if {[onchan $bnick $chan]} {
  491. set mask *!*@[lindex [split [getchanhost $bnick $chan] "@"] 1]
  492. }
  493. newban $mask $hand $reason $time
  494. if {$time == "0"} { set reply "Permanent" } else { set reply "$time" }
  495. blacktools:tell $nick $host $hand $chan $chan1 b.8 "$mask $reply"
  496. }
  497. proc bpublic {nick host hand chan arg} {
  498. global botnick black
  499. set bnick [lindex [split $arg] 0]
  500. set char(p) [lindex $black(cmdchar) 0]
  501. if {[string match -nocase "none" "$char(p)"]} {
  502. set char(p) ""
  503. }
  504. set type 0
  505. set chan1 "$chan"
  506. set mask [lindex [split $arg] 0]
  507. set time [lindex [split $arg] 1]
  508. set type1 [lindex [split $arg] 1]
  509. set type2 [lindex [split $arg] 2]
  510. set reason [join [lrange [split $arg] 2 end]]
  511. set handle [nick2hand $bnick]
  512. if {[string match -nocase "global" $type1] || [string match -nocase "global" $type2] && [matchattr $hand nm|- $chan]} {
  513. if {[string match -nocase $type1 "global"]} {
  514. set reason [join [lrange [split $arg] 2 end]]
  515. }
  516. if {[string match -nocase $type2 "global"]} {
  517. set reason [join [lrange [split $arg] 3 end]]
  518. }
  519. if {![regexp {^[0-9]} $time]} {
  520. set reason [join [lrange [split $arg] 2 end]]
  521. }
  522. set split_text [split $bnick ","]
  523. foreach txt $split_text {
  524. b:global $txt $txt $time $nick $reason $hand $host $chan $chan1 $type1 $type2
  525. }
  526. return
  527. }
  528. foreach c [channels] {
  529. set backchan [channel get $c backchan]
  530. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  531. set chan "$c"
  532. }
  533. }
  534. if {[regexp {^[&#]} $bnick] && [matchattr $hand nm|- $chan]} {
  535. set chan "$bnick"
  536. set bnick [lindex [split $arg] 1]
  537. set mask [lindex [split $arg] 1]
  538. set time [lindex [split $arg] 2]
  539. set reason [join [lrange [split $arg] 3 end]]
  540. if {![regexp {^[0-9]} $time]} {
  541. set reason [join [lrange [split $arg] 2 end]]
  542. }
  543. }
  544. if {![regexp {^[0-9]} $time]} {
  545. set reason [join [lrange [split $arg] 1 end]]
  546. }
  547. set split_text [split $bnick ","]
  548. foreach txt $split_text {
  549. b:local $txt $txt $time $nick $reason $hand $host $chan $chan1 $type
  550. }
  551. if {$bnick == ""} {
  552. b:local $bnick $bnick $time $nick $reason $hand $host $chan $chan1 $type
  553. }
  554. }
  555. ################################### n #################################
  556. proc n:process {bnick nick hand host chan chan1 type} {
  557. global botnick black
  558. set char(p) [lindex $black(cmdchar) 0]
  559. if {[string match -nocase "none" "$char(p)"]} {
  560. set char(p) ""
  561. }
  562. set handle [nick2hand $bnick]
  563. if {![validchan $chan]} {
  564. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  565. return
  566. }
  567. if {![onchan $botnick $chan]} {
  568. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  569. return
  570. }
  571. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  572. return
  573. }
  574. if {[matchattr $handle $black(exceptflags) $chan]} {
  575. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  576. return
  577. }
  578. set getreason [channel get $chan n-reason]
  579. if {$getreason == ""} {
  580. set getlang [string tolower [channel get $chan lang]]
  581. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  582. set getreason $black(say.$getlang.n.5)
  583. }
  584. if {[channel get $chan showhandle]} {
  585. set reason "($hand) $getreason"
  586. } else { set reason "$getreason"
  587. }
  588. set getbantime [channel get $chan n-bantime]
  589. if {$getbantime == "0"} { set getbantime $black(ntime) }
  590. if {[isbotnick $bnick]} {
  591. return
  592. }
  593. if {![botisop $chan]} {
  594. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  595. return
  596. }
  597. if {[matchattr $hand nm|- $chan]} {
  598. if {($bnick == "") && ($type == "0")} {
  599. blacktools:tell $nick $host $hand $chan $chan1 n.1 none
  600. return
  601. }
  602. if {($bnick == "") && ($type == "1")} {
  603. blacktools:tell $nick $host $hand $chan $chan1 n.2 none
  604. return
  605. }
  606. }
  607. if {($bnick == "") && ($type == "0")} {
  608. blacktools:tell $nick $host $hand $chan $chan1 n.3 none
  609. return
  610. }
  611. if {($bnick == "") && ($type == "1")} {
  612. blacktools:tell $nick $host $hand $chan $chan1 n.4 none
  613. return
  614. }
  615. if {[regexp {\*} $bnick]} {
  616. blacktools:tell $nick $host $hand $chan $chan1 n.6 none
  617. return
  618. }
  619. set mask "$bnick!*@*"
  620. blacktools:banner:3 $mask $hand $chan $reason $getbantime n($chan)
  621. }
  622. proc npublic {nick host hand chan arg} {
  623. global botnick black
  624. set bnick [lindex [split $arg] 0]
  625. set type 0
  626. set handle [nick2hand $bnick]
  627. set chan1 "$chan"
  628. foreach c [channels] {
  629. set backchan [channel get $c backchan]
  630. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  631. set chan "$c"
  632. }
  633. }
  634. if {[regexp {^[&#]} $bnick] && [matchattr $hand nm|- $chan]} {
  635. set chan "$bnick"
  636. set bnick [lindex [split $arg] 1]
  637. }
  638. set split_text [split $bnick ","]
  639. if {$split_text != ""} {
  640. foreach txt $split_text {
  641. n:process $txt $nick $hand $host $chan $chan1 $type
  642. }
  643. } else { n:process $bnick $nick $hand $host $chan $chan1 $type }
  644. }
  645. ################################## id #################################
  646. proc idpublic {nick host hand chan arg} {
  647. global botnick black
  648. set idnick [lindex [split $arg] 0]
  649. set char(p) [lindex $black(cmdchar) 0]
  650. if {[string match -nocase "none" "$char(p)"]} {
  651. set char(p) ""
  652. }
  653. set handle [nick2hand $idnick]
  654. set type 0
  655. set chan1 "$chan"
  656. foreach c [channels] {
  657. set backchan [channel get $c backchan]
  658. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  659. set chan "$c"
  660. }
  661. }
  662. if {[regexp {^[&#]} $idnick] && [matchattr $hand nm|- $chan]} {
  663. set chan "$idnick"
  664. set idnick [lindex [split $arg] 1]
  665. }
  666. set split_text [split $idnick ","]
  667. if {$split_text != ""} {
  668. foreach txt $split_text {
  669. id:process $txt $nick $hand $host $chan $chan1 $type
  670. }
  671. } else { id:process $idnick $nick $hand $host $chan $chan1 $type }
  672. }
  673. proc id:process {idnick nick hand host chan chan1 type} {
  674. global botnick black
  675. set handle [nick2hand $idnick]
  676. set char(p) [lindex $black(cmdchar) 0]
  677. if {[string match -nocase "none" "$char(p)"]} {
  678. set char(p) ""
  679. }
  680. if {![validchan $chan]} {
  681. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  682. return
  683. }
  684. if {![onchan $botnick $chan]} {
  685. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  686. return
  687. }
  688. set uhost [getchanhost $idnick $chan]
  689. set ident "[string tolower [lindex [split $uhost "@"] 0]]"
  690. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  691. return
  692. }
  693. if {[matchattr $handle $black(exceptflags) $chan]} {
  694. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  695. return
  696. }
  697. set getreason [channel get $chan id-reason]
  698. if {$getreason == ""} {
  699. set getlang [string tolower [channel get $chan lang]]
  700. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  701. set getreason $black(say.$getlang.id.5)
  702. }
  703. if {[channel get $chan showhandle]} {
  704. set reason "($hand) $getreason"
  705. } else { set reason "$getreason"
  706. }
  707. set getbantime [channel get $chan id-bantime]
  708. if {$getbantime == "0"} { set getbantime $black(idtime) }
  709. if {[isbotnick $idnick]} {
  710. return
  711. }
  712. if {![botisop $chan]} {
  713. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  714. return
  715. }
  716. if {[matchattr $hand nm|- $chan]} {
  717. if {($idnick == "") && ($type == "0")} {
  718. blacktools:tell $nick $host $hand $chan $chan1 id.1 none
  719. return
  720. }
  721. if {($idnick == "") && ($type == "1")} {
  722. blacktools:tell $nick $host $hand $chan $chan1 id.2 none
  723. return
  724. }
  725. }
  726. if {($idnick == "") && ($type == "0")} {
  727. blacktools:tell $nick $host $hand $chan $chan1 id.3 none
  728. return
  729. }
  730. if {($idnick == "") && ($type == "1")} {
  731. blacktools:tell $nick $host $hand $chan $chan1 id.4 none
  732. return
  733. }
  734. if {[regexp {\*} $idnick]} {
  735. blacktools:tell $nick $host $hand $chan $chan1 id.6 none
  736. return
  737. }
  738. if {[onchan $idnick $chan]} {
  739. set mask "*!$ident@*"
  740. } else {
  741. set mask "*!$idnick@*"
  742. }
  743. blacktools:banner:3 $mask $hand $chan $getreason $getbantime id($chan)
  744. }
  745. ############################### black #################################
  746. proc black:process {blnick nick mask hand host chan chan1 reason type} {
  747. global botnick black
  748. set char(p) [lindex $black(cmdchar) 0]
  749. if {[string match -nocase "none" "$char(p)"]} {
  750. set char(p) ""
  751. }
  752. set handle [nick2hand $blnick]
  753. if {![validchan $chan]} {
  754. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  755. return
  756. }
  757. if {![onchan $botnick $chan]} {
  758. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  759. return
  760. }
  761. set list [userlist $black(exceptflags) $chan]
  762. if {[matchattr $hand -|q $chan]} {
  763. blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  764. return
  765. }
  766. foreach user $list {
  767. set hosts [getuser $user hosts]
  768. foreach host $hosts {
  769. if {[string match -nocase $mask $host]} {
  770. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  771. return
  772. }
  773. }
  774. }
  775. if {[matchattr $handle $black(exceptflags) $chan]} {
  776. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  777. return
  778. }
  779. if {$reason == ""} {
  780. if {[channel get $chan black-reason] != ""} {
  781. set reason [channel get $chan black-reason]
  782. }
  783. }
  784. if {$reason == ""} {
  785. set getlang [string tolower [channel get $chan lang]]
  786. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  787. set reason1 "BlackListed: $black(say.$getlang.black.5)"
  788. } else { set reason1 "BlackListed: $reason" }
  789. if {[channel get $chan showhandle]} {
  790. set reason "($hand) $reason1"
  791. } else { set reason "$reason1"
  792. }
  793. if {[isbotnick $blnick]} {
  794. return
  795. }
  796. if {![botisop $chan]} {
  797. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  798. return
  799. }
  800. if {$mask == "*!*@*"} {
  801. return
  802. }
  803. if {[onchan $blnick $chan]} {
  804. set mask *!*@[lindex [split [getchanhost $blnick $chan] "@"] 1]
  805. }
  806. if {[matchattr $hand nm|- $chan]} {
  807. if {($blnick == "") && ($type == "0")} {
  808. blacktools:tell $nick $host $hand $chan $chan1 black.1 none
  809. return
  810. }
  811. if {($blnick == "") && ($type == "1")} {
  812. blacktools:tell $nick $host $hand $chan $chan1 black.2 none
  813. return
  814. }
  815. }
  816. if {($blnick == "") && ($type == "0")} {
  817. blacktools:tell $nick $host $hand $chan $chan1 black.3 none
  818. return
  819. }
  820. if {($blnick == "") && ($type == "1")} {
  821. blacktools:tell $nick $host $hand $chan $chan1 black.4 none
  822. return
  823. }
  824. blacktools:banner:3 $mask $hand $chan $reason 0 Black($chan)
  825. }
  826. proc blackpublic {nick host hand chan arg} {
  827. global botnick black
  828. set blnick [lindex [split $arg] 0]
  829. set mask [lindex [split $arg] 0]
  830. set type 0
  831. set reason [join [lrange [split $arg] 1 end]]
  832. set handle [nick2hand $blnick]
  833. set chan1 "$chan"
  834. foreach c [channels] {
  835. set backchan [channel get $c backchan]
  836. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  837. set chan "$c"
  838. }
  839. }
  840. if {[regexp {^[&#]} $blnick] && [matchattr $hand nm|- $chan]} {
  841. set chan "$blnick"
  842. set blnick [lindex [split $arg] 1]
  843. set mask [lindex [split $arg] 1]
  844. set reason [join [lrange [split $arg] 2 end]]
  845. }
  846. set split_text [split $blnick ","]
  847. if {$split_text != ""} {
  848. foreach txt $split_text {
  849. black:process $txt $nick $txt $hand $host $chan $chan1 $reason $type
  850. }
  851. } else { black:process $blnick $nick $mask $hand $host $chan $chan1 $reason $type }
  852. }
  853. ################################ w ####################################
  854. proc wpublic {nick host hand chan arg} {
  855. global botnick black
  856. set wnick [lindex [split $arg] 0]
  857. set type 0
  858. set handle [nick2hand $wnick]
  859. set chan1 "$chan"
  860. foreach c [channels] {
  861. set backchan [channel get $c backchan]
  862. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  863. set chan "$c"
  864. }
  865. }
  866. if {[regexp {^[&#]} $wnick] && [matchattr $hand nm|- $chan]} {
  867. set chan "$wnick"
  868. set wnick [lindex [split $arg] 1]
  869. }
  870. set split_text [split $wnick ","]
  871. if {$split_text != ""} {
  872. foreach txt $split_text {
  873. w:process $txt $nick $hand $host $chan $chan1 $type
  874. }
  875. } else { w:process $wnick $nick $hand $host $chan $chan1 $type }
  876. }
  877. proc w:process {wnick nick hand host chan chan1 type} {
  878. global botnick black
  879. set handle [nick2hand $wnick]
  880. set char(p) [lindex $black(cmdchar) 0]
  881. if {[string match -nocase "none" "$char(p)"]} {
  882. set char(p) ""
  883. }
  884. if {![validchan $chan]} {
  885. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  886. return
  887. }
  888. if {![onchan $wnick $chan]} {
  889. return
  890. }
  891. if {![onchan $botnick $chan]} {
  892. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  893. return
  894. }
  895. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  896. return
  897. }
  898. if {[isbotnick $wnick]} {
  899. return
  900. }
  901. if {[matchattr $handle $black(exceptflags) $chan]} {
  902. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  903. return
  904. }
  905. set getreason [channel get $chan w-reason]
  906. if {$getreason == ""} {
  907. set getlang [string tolower [channel get $chan lang]]
  908. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  909. set getreason $black(say.$getlang.w.5)
  910. }
  911. if {[channel get $chan showhandle]} {
  912. set reason "($hand) $getreason"
  913. } else { set reason "$getreason"
  914. }
  915. if {![botisop $chan]} {
  916. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  917. return
  918. }
  919. if {[matchattr $hand nm|- $chan]} {
  920. if {($wnick == "") && ($type == "0")} {
  921. blacktools:tell $nick $host $hand $chan $chan1 w.1 none
  922. return
  923. }
  924. if {($wnick == "") && ($type == "1")} {
  925. blacktools:tell $nick $host $hand $chan $chan1 w.2 none
  926. return
  927. }
  928. }
  929. if {($wnick == "") && ($type == "0")} {
  930. blacktools:tell $nick $host $hand $chan $chan1 w.3 none
  931. return
  932. }
  933. if {($wnick == "") && ($type == "1")} {
  934. blacktools:tell $nick $host $hand $chan $chan1 w.4 none
  935. return
  936. }
  937. set getcount [channel get $chan kickcount]
  938. set kcount [expr $getcount +1]
  939. channel set $chan kickcount $kcount
  940. set countz [getuser $hand XTRA w($chan)]
  941. if {$countz == ""} { set countz 0 }
  942. set counts [expr $countz + 1]
  943. setuser $hand XTRA w($chan) $counts
  944. if {[channel get $chan showcount]} {
  945. set reason "$reason - $kcount -"
  946. } else {
  947. set reason "$reason"
  948. }
  949. putquick "KICK $chan $wnick :$reason"
  950. set getlang [string tolower [channel get $chan lang]]
  951. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  952. puthelp "PRIVMSG $wnick :$black(say.$getlang.w.6)"
  953. }
  954. ############################### spam ##################################
  955. proc spam:process {spammer mask nick hand host chan chan1 type} {
  956. global botnick black
  957. set handle [nick2hand $spammer]
  958. set char(p) [lindex $black(cmdchar) 0]
  959. if {[string match -nocase "none" "$char(p)"]} {
  960. set char(p) ""
  961. }
  962. if {![validchan $chan]} {
  963. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  964. return
  965. }
  966. if {![onchan $botnick $chan]} {
  967. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  968. return
  969. }
  970. set list [userlist $black(exceptflags) $chan]
  971. set getreason [channel get $chan spam-reason]
  972. if {$getreason == ""} {
  973. set getlang [string tolower [channel get $chan lang]]
  974. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  975. set getreason $black(say.$getlang.spam.5)
  976. }
  977. if {[channel get $chan showhandle]} {
  978. set reason "($hand) $getreason"
  979. } else { set reason "$getreason"
  980. }
  981. set getbantime [channel get $chan spam-bantime]
  982. if {$getbantime == "0"} { set getbantime $black(spamtime) }
  983. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  984. return
  985. }
  986. foreach user $list {
  987. set hosts [getuser $user hosts]
  988. foreach host $hosts {
  989. if {[string match -nocase $mask $host]} {
  990. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  991. return
  992. }
  993. }
  994. }
  995. if {[matchattr $handle $black(exceptflags) $chan]} {
  996. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  997. return
  998. }
  999. if {$mask == "*!*@*"} {
  1000. return
  1001. }
  1002. if {[isbotnick $spammer]} {
  1003. return
  1004. }
  1005. if {![botisop $chan]} {
  1006. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  1007. return
  1008. }
  1009. if {[onchan $spammer $chan]} {
  1010. set mask *!*@[lindex [split [getchanhost $spammer $chan] "@"] 1]
  1011. }
  1012. if {[matchattr $hand nm|- $chan]} {
  1013. if {($spammer == "") && ($type == "0")} {
  1014. blacktools:tell $nick $host $hand $chan $chan1 spam.1 none
  1015. return
  1016. }
  1017. if {($spammer == "") && ($type == "1")} {
  1018. blacktools:tell $nick $host $hand $chan $chan1 spam.2 none
  1019. return
  1020. }
  1021. }
  1022. if {($spammer == "") && ($type == "0")} {
  1023. blacktools:tell $nick $host $hand $chan $chan1 spam.3 none
  1024. return
  1025. }
  1026. if {($spammer == "") && ($type == "1")} {
  1027. blacktools:tell $nick $host $hand $chan $chan1 spam.4 none
  1028. return
  1029. }
  1030. blacktools:banner:3 $mask $hand $chan $reason $getbantime spam($chan)
  1031. }
  1032. proc spampublic {nick host hand chan arg} {
  1033. global botnick black
  1034. set spammer [lindex [split $arg] 0]
  1035. set chan1 "$chan"
  1036. set type 0
  1037. set mask [lindex [split $arg] 0]
  1038. set handle [nick2hand $spammer]
  1039. foreach c [channels] {
  1040. set backchan [channel get $c backchan]
  1041. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  1042. set chan "$c"
  1043. }
  1044. }
  1045. if {[regexp {^[&#]} $spammer] && [matchattr $hand nm|- $chan]} {
  1046. set chan "$spammer"
  1047. set spammer [lindex [split $arg] 1]
  1048. set mask [lindex [split $arg] 1]
  1049. }
  1050. set split_text [split $spammer ","]
  1051. if {$split_text != ""} {
  1052. foreach txt $split_text {
  1053. spam:process $txt $txt $nick $hand $host $chan $chan1 $type
  1054. }
  1055. } else { spam:process $spammer $mask $nick $hand $host $chan $chan1 $type }
  1056. }
  1057. ################################### k #################################
  1058. proc k:process {knick nick hand host reason chan chan1 type} {
  1059. global botnick black
  1060. set char(p) [lindex $black(cmdchar) 0]
  1061. if {[string match -nocase "none" "$char(p)"]} {
  1062. set char(p) ""
  1063. }
  1064. set handle [nick2hand $knick]
  1065. if {![validchan $chan]} {
  1066. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1067. return
  1068. }
  1069. if {![onchan $botnick $chan]} {
  1070. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  1071. return
  1072. }
  1073. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1074. return
  1075. }
  1076. if {[isbotnick $knick]} {
  1077. return
  1078. }
  1079. if {[matchattr $handle $black(exceptflags) $chan] && ($black(kaccess) == "1")} {
  1080. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  1081. return
  1082. }
  1083. if {$reason == ""} {
  1084. if {[channel get $chan k-reason] != ""} {
  1085. set reason [channel get $chan k-reason]
  1086. }
  1087. }
  1088. if {$reason == ""} {
  1089. set getlang [string tolower [channel get $chan lang]]
  1090. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  1091. set reason1 "$black(say.$getlang.k.5)"
  1092. } else { set reason1 "$reason" }
  1093. if {[channel get $chan showhandle]} {
  1094. set reason "($hand) $reason1"
  1095. } else { set reason "$reason1"
  1096. }
  1097. if {![botisop $chan]} {
  1098. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  1099. return
  1100. }
  1101. if {[matchattr $hand nm|- $chan]} {
  1102. if {($knick == "") && ($type == "0")} {
  1103. blacktools:tell $nick $host $hand $chan $chan1 k.1 none
  1104. return
  1105. }
  1106. if {($knick == "") && ($type == "1")} {
  1107. blacktools:tell $nick $host $hand $chan $chan1 k.2 none
  1108. return
  1109. }
  1110. }
  1111. if {($knick == "") && ($type == "0")} {
  1112. blacktools:tell $nick $host $hand $chan $chan1 k.3 none
  1113. return
  1114. }
  1115. if {($knick == "") && ($type == "1")} {
  1116. blacktools:tell $nick $host $hand $chan $chan1 k.4 none
  1117. return
  1118. }
  1119. if {![onchan $knick $chan]} {
  1120. blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan "$knick"
  1121. return
  1122. }
  1123. set getcount [channel get $chan kickcount]
  1124. set kcount [expr $getcount +1]
  1125. channel set $chan kickcount $kcount
  1126. set countz [getuser $hand XTRA k($chan)]
  1127. if {$countz == ""} { set countz 0 }
  1128. set counts [expr $countz + 1]
  1129. setuser $hand XTRA k($chan) $counts
  1130. if {[channel get $chan showcount]} {
  1131. set reason "$reason - $kcount -"
  1132. } else {
  1133. set reason "$reason"
  1134. }
  1135. putquick "KICK $chan $knick :$reason"
  1136. }
  1137. proc kpublic {nick host hand chan arg} {
  1138. global botnick black
  1139. set knick [lindex [split $arg] 0]
  1140. set type 0
  1141. set reason [join [lrange [split $arg] 1 end]]
  1142. set handle [nick2hand $knick]
  1143. set chan1 "$chan"
  1144. foreach c [channels] {
  1145. set backchan [channel get $c backchan]
  1146. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  1147. set chan "$c"
  1148. }
  1149. }
  1150. if {[regexp {^[&#]} $knick] && [matchattr $hand nm|- $chan]} {
  1151. set chan "$knick"
  1152. set knick [lindex [split $arg] 1]
  1153. set reason [join [lrange [split $arg] 2 end]]
  1154. }
  1155. set split_text [split $knick ","]
  1156. if {$split_text != ""} {
  1157. foreach txt $split_text {
  1158. k:process $txt $nick $hand $host $reason $chan $chan1 $type
  1159. }
  1160. } else {k:process $knick $nick $hand $host $reason $chan $chan1 $type}
  1161. }
  1162. ################################# find #################################
  1163. proc findpublic {nick host hand chan arg} {
  1164. global black
  1165. set info [lindex [split $arg] 0]
  1166. set type 0
  1167. set chan1 "$chan"
  1168. find:process $info $nick $hand $host $chan $chan1 $type
  1169. }
  1170. proc find:process {text nick hand host chan chan1 type} {
  1171. global black
  1172. set found_user 0
  1173. set found_host 0
  1174. set counter 0
  1175. set found_global 0
  1176. set found_boss_owner 0
  1177. set found_owner 0
  1178. set found_it 0
  1179. if {($text == "") && ($type == "0")} {
  1180. blacktools:tell $nick $host $hand $chan $chan1 find.1 none
  1181. return
  1182. }
  1183. if {($text == "") && ($type == "1")} {
  1184. blacktools:tell $nick $host $hand $chan $chan1 find.2 none
  1185. return
  1186. }
  1187. foreach user [userlist] {
  1188. if {[string match -nocase $text $user]} {
  1189. set counter [expr $counter + 1]
  1190. set found_user 1
  1191. set found_it 1
  1192. blacktools:tell $nick $host $hand $chan $chan1 find.3 "$counter $user"
  1193. blacktools:tell $nick $host $hand $chan $chan1 find.4 "$counter [getuser $user hosts]"
  1194. if {[matchattr $user n|- $chan]} {
  1195. set found_global 1
  1196. set found_boss_owner 1
  1197. }
  1198. if {[matchattr $user m|- $chan] && ($found_boss_owner != 1)} {
  1199. set found_global 1
  1200. set found_owner 1
  1201. }
  1202. if {$found_global == 0} {
  1203. foreach chan [channels] {
  1204. if {[matchattr $user "-|HAMOVSo" $chan]} {
  1205. lappend channels [split $chan]
  1206. }
  1207. }
  1208. if {![info exists channels]} {
  1209. blacktools:tell $nick $host $hand $chan $chan1 find.5 "$counter"
  1210. } else { blacktools:tell $nick $host $hand $chan $chan1 find.6 "$counter [join $channels ", "]" ; unset channels }
  1211. } else {
  1212. if {$found_boss_owner == 1} {
  1213. blacktools:tell $nick $host $hand $chan $chan1 find.7 "$counter"
  1214. set found_global 0
  1215. set found_boss_owner 0
  1216. }
  1217. if {$found_owner == 1} {
  1218. blacktools:tell $nick $host $hand $chan $chan1 find.8 "$counter"
  1219. set found_owner 0
  1220. set found_global 0
  1221. }
  1222. }
  1223. set laston [getuser $user laston]
  1224. if {$laston == ""} {
  1225. blacktools:tell $nick $host $hand $chan $chan1 find.9 "$counter"
  1226. } else {
  1227. set time [lindex $laston 0]
  1228. set channel [lindex $laston 1]
  1229. set time [clock format $time -format %D-%H:%M:%S]
  1230. blacktools:tell $nick $host $hand $chan $chan1 find.10 "$counter $time $channel"
  1231. }
  1232. }
  1233. }
  1234. if {$found_user == 0} {
  1235. foreach user [userlist] {
  1236. foreach h [getuser $user hosts] {
  1237. if {[string match -nocase $text $h]} {
  1238. set found_host 1
  1239. set found_it 1
  1240. }
  1241. }
  1242. if {$found_host == 1} {
  1243. set counter [expr $counter + 1]
  1244. blacktools:tell $nick $host $hand $chan $chan1 find.3 "$counter $user"
  1245. blacktools:tell $nick $host $hand $chan $chan1 find.4 "$counter [getuser $user hosts]"
  1246. if {[matchattr $user n|- $chan]} {
  1247. set found_global 1
  1248. set found_boss_owner 1
  1249. }
  1250. if {[matchattr $user m|- $chan] && ($found_boss_owner != 1)} {
  1251. set found_global 1
  1252. set found_owner 1
  1253. }
  1254. if {$found_global == 0} {
  1255. foreach chan [channels] {
  1256. if {[matchattr $user "-|HAMOVSo" $chan]} {
  1257. lappend channels [split $chan]
  1258. }
  1259. }
  1260. if {![info exists channels]} {
  1261. blacktools:tell $nick $host $hand $chan $chan1 find.5 "$counter"
  1262. } else { blacktools:tell $nick $host $hand $chan $chan1 find.6 "$counter [join $channels ", "]" ; unset channels }
  1263. } else {
  1264. if {$found_boss_owner == 1} {
  1265. blacktools:tell $nick $host $hand $chan $chan1 find.7 "$counter"
  1266. set found_global 0
  1267. set found_boss_owner 0
  1268. }
  1269. if {$found_owner == 1} {
  1270. blacktools:tell $nick $host $hand $chan $chan1 find.8 "$counter"
  1271. set found_owner 0
  1272. set found_global 0
  1273. }
  1274. }
  1275. set laston [getuser $user laston]
  1276. if {$laston == ""} {
  1277. blacktools:tell $nick $host $hand $chan $chan1 find.9 "$counter"
  1278. } else {
  1279. set time [lindex $laston 0]
  1280. set channel [lindex $laston 1]
  1281. set time [clock format $time -format %D-%H:%M:%S]
  1282. blacktools:tell $nick $host $hand $chan $chan1 find.10 "$counter $time $channel"
  1283. }
  1284. set found_host 0
  1285. }
  1286. }
  1287. }
  1288. if {$found_it == 0} {
  1289. blacktools:tell $nick $host $hand $chan $chan1 find.12 "$text"
  1290. }
  1291. }
  1292. ################################## bw #################################
  1293. proc bw:process {abuser mask nick hand host chan chan1 type} {
  1294. global botnick black
  1295. set char(p) [lindex $black(cmdchar) 0]
  1296. if {[string match -nocase "none" "$char(p)"]} {
  1297. set char(p) ""
  1298. }
  1299. set handle [nick2hand $abuser]
  1300. if {![validchan $chan]} {
  1301. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1302. return
  1303. }
  1304. if {![onchan $botnick $chan]} {
  1305. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  1306. return
  1307. }
  1308. set list [userlist $black(exceptflags) $chan]
  1309. set getreason [channel get $chan bw-reason]
  1310. if {$getreason == ""} {
  1311. set getlang [string tolower [channel get $chan lang]]
  1312. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  1313. set getreason $black(say.$getlang.bw.5)
  1314. }
  1315. if {[channel get $chan showhandle]} {
  1316. set reason "($hand) $getreason"
  1317. } else { set reason "$getreason"
  1318. }
  1319. set getbantime [channel get $chan bw-bantime]
  1320. if {$getbantime == "0"} { set getbantime $black(bwtime) }
  1321. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1322. return
  1323. }
  1324. foreach user $list {
  1325. set hosts [getuser $user hosts]
  1326. foreach host $hosts {
  1327. if {[string match -nocase $mask $host]} {
  1328. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  1329. return
  1330. }
  1331. }
  1332. }
  1333. if {[matchattr $handle $black(exceptflags) $chan]} {
  1334. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  1335. return
  1336. }
  1337. if {$mask == "*!*@*"} {
  1338. return
  1339. }
  1340. if {[isbotnick $abuser]} {
  1341. return
  1342. }
  1343. if {![botisop $chan]} {
  1344. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  1345. return
  1346. }
  1347. if {[onchan $abuser $chan]} {
  1348. set mask *!*@[lindex [split [getchanhost $abuser $chan] "@"] 1]
  1349. }
  1350. if {[matchattr $hand nm|- $chan]} {
  1351. if {($abuser == "") && ($type == "0")} {
  1352. blacktools:tell $nick $host $hand $chan $chan1 bw.1 none
  1353. return
  1354. }
  1355. if {($abuser == "") && ($type == "1")} {
  1356. blacktools:tell $nick $host $hand $chan $chan1 bw.2 none
  1357. return
  1358. }
  1359. }
  1360. if {($abuser == "") && ($type == "0")} {
  1361. blacktools:tell $nick $host $hand $chan $chan1 bw.3 none
  1362. return
  1363. }
  1364. if {($abuser == "") && ($type == "1")} {
  1365. blacktools:tell $nick $host $hand $chan $chan1 bw.4 none
  1366. return
  1367. }
  1368. blacktools:banner:3 $mask $hand $chan $reason $getbantime bw($chan)
  1369. }
  1370. proc bwpublic {nick host hand chan arg} {
  1371. global botnick black
  1372. set abuser [lindex [split $arg] 0]
  1373. set mask [lindex [split $arg] 0]
  1374. set type 0
  1375. set handle [nick2hand $abuser]
  1376. set chan1 "$chan"
  1377. foreach c [channels] {
  1378. set backchan [channel get $c backchan]
  1379. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  1380. set chan "$c"
  1381. }
  1382. }
  1383. if {[regexp {^[&#]} $abuser] && [matchattr $hand nm|- $chan]} {
  1384. set chan "$abuser"
  1385. set abuser [lindex [split $arg] 1]
  1386. set mask [lindex [split $arg] 1]
  1387. }
  1388. set split_text [split $abuser ","]
  1389. if {$split_text != ""} {
  1390. foreach txt $split_text {
  1391. bw:process $txt $txt $nick $hand $host $chan $chan1 $type
  1392. }
  1393. } else { bw:process $abuser $mask $nick $hand $host $chan $chan1 $type}
  1394. }
  1395. ################################ ub ###################################
  1396. proc ub:get:host { from keyword arguments } {
  1397. global black
  1398. set nickname [lindex [split $arguments] 1]
  1399. set ident [lindex [split $arguments] 2]
  1400. set mask [lindex [split $arguments] 3]
  1401. set ban "$nickname!$ident@$mask"
  1402. set nick $::getnick
  1403. set hand $::hand
  1404. set host $::host
  1405. set chan $::chan
  1406. set chan1 $::chan1
  1407. set type $::type
  1408. set why $::why
  1409. ub:process $ban $why $nick $hand $host $chan $chan1 $type
  1410. check:if:bind "ub:get:host" "311"
  1411. }
  1412. proc ub:process {ban why nick hand host chan chan1 type} {
  1413. global botnick black
  1414. set char(p) [lindex $black(cmdchar) 0]
  1415. set found_it 0
  1416. set count 0
  1417. if {[string match -nocase "none" "$char(p)"]} {
  1418. set char(p) ""
  1419. }
  1420. if {![validchan $chan]} {
  1421. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1422. return
  1423. }
  1424. if {![onchan $botnick $chan]} {
  1425. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  1426. return
  1427. }
  1428. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1429. return
  1430. }
  1431. if {[matchattr $hand nm|- $chan]} {
  1432. if {($ban == "") && ($type == "0")} {
  1433. blacktools:tell $nick $host $hand $chan $chan1 ub.1 none
  1434. return
  1435. }
  1436. if {($ban == "") && ($type == "1")} {
  1437. blacktools:tell $nick $host $hand $chan $chan1 ub.2 none
  1438. return
  1439. }
  1440. }
  1441. if {($ban == "") && ($type == "0")} {
  1442. blacktools:tell $nick $host $hand $chan $chan1 ub.3 none
  1443. return
  1444. }
  1445. if {($ban == "") && ($type == "1")} {
  1446. blacktools:tell $nick $host $hand $chan $chan1 ub.4 none
  1447. return
  1448. }
  1449. if {$ban == "*!*@*"} {
  1450. return
  1451. }
  1452. if {![botisop $chan]} {
  1453. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  1454. return
  1455. }
  1456. if {[ispermban $ban $chan] && [matchattr $hand -|O $chan]} {
  1457. blacktools:tell $nick $host $hand $chan $chan1 ub.5 none
  1458. return
  1459. }
  1460. if {($why == "global") && [matchattr $hand nm|- $chan]} {
  1461. foreach b [banlist] {
  1462. if {[string match -nocase [string tolower [lindex $b 0]] $ban]} {
  1463. set found_it 1
  1464. set count [expr $count + 1]
  1465. killban [lindex $b 0]
  1466. }
  1467. }
  1468. if {$found_it == "1"} {
  1469. blacktools:tell $nick $host $hand $chan $chan1 ub.6 "$count $ban"
  1470. return
  1471. } else { blacktools:tell $nick $host $hand $chan $chan1 ub.7 none
  1472. return
  1473. }
  1474. }
  1475. foreach b [banlist $chan] {
  1476. if {[string match -nocase [lindex $b 0] $ban] || [string equal -nocase [lindex $b 0] $ban]} {
  1477. set found_it 1
  1478. set count [expr $count + 1]
  1479. if {[string equal -nocase [lindex $b 5] "ANTIPUB"] || [string equal -nocase [lindex $b 5] "BADWORD"] || [string equal -nocase [lindex $b 5] "BADCHAN"] } {
  1480. bad:del:word $chan [lindex $b 0]
  1481. }
  1482. killchanban $chan [lindex $b 0]
  1483. if {[onchan "X" $chan]} {
  1484. putquick "PRIVMSG $black(chanserv) :unban $chan [lindex $b 0]"
  1485. }
  1486. putquick "MODE $chan -b [lindex $b 0]"
  1487. }
  1488. }
  1489. if {$found_it == "1"} {
  1490. blacktools:tell $nick $host $hand $chan $chan1 ub.8 "$count $ban"
  1491. } else {
  1492. if {[onchan "X" $chan]} {
  1493. putquick "PRIVMSG $black(chanserv) :unban $chan $ban"
  1494. }
  1495. blacktools:tell $nick $host $hand $chan $chan1 ub.9 none
  1496. return
  1497. }
  1498. if {[channel get $chan chanreport]} {
  1499. set backchan [channel get $chan backchan]
  1500. if {$backchan == ""} {
  1501. return
  1502. }
  1503. if {!([validchan $backchan]) || !([onchan $botnick $backchan])} {
  1504. return
  1505. }
  1506. blacktools:tell $nick $host $hand $chan $backchan ub.10 "$hand $count $ban"
  1507. }
  1508. }
  1509. proc ubpublic {nick host hand chan arg} {
  1510. global botnick black
  1511. set ban [lindex [split $arg] 0]
  1512. set why [lindex [split $arg] 1]
  1513. set type 0
  1514. set chan1 "$chan"
  1515. foreach c [channels] {
  1516. set backchan [channel get $c backchan]
  1517. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  1518. set chan "$c"
  1519. }
  1520. }
  1521. if {[regexp {^[&#]} $ban] && [matchattr $hand nm|- $chan]} {
  1522. set chan "$ban"
  1523. set ban [lindex [split $arg] 1]
  1524. }
  1525. if {$ban != ""} {
  1526. if {(![regexp {\*} $ban]) && ![onchan $ban $chan]} {
  1527. if {[onchan $ban $chan]} {
  1528. set ban "$nick![getchanhost $ban $chan]"
  1529. ub:process $ban $why $nick $hand $host $chan $chan1 $type
  1530. return
  1531. }
  1532. putquick "WHOIS $ban $ban"
  1533. set ::ban $ban
  1534. set ::getnick $nick
  1535. set ::hand $hand
  1536. set ::host $host
  1537. set ::chan $chan
  1538. set ::chan1 $chan1
  1539. set ::type $type
  1540. set ::why $why
  1541. bind RAW - 311 ub:get:host
  1542. }
  1543. if {[regexp {\*} $ban]} {
  1544. ub:process $ban $why $nick $hand $host $chan $chan1 $type
  1545. }
  1546. } else { ub:process $ban $why $nick $hand $host $chan $chan1 $type }
  1547. utimer 1 [list check:if:bind "ub:get:host" "311"]
  1548. }
  1549. ################################ sb ###################################
  1550. proc sb:get:host { from keyword arguments } {
  1551. global black
  1552. set nickname [lindex [split $arguments] 1]
  1553. set ident [lindex [split $arguments] 2]
  1554. set mask [lindex [split $arguments] 3]
  1555. set bhost "$nickname!$ident@$mask"
  1556. set nick $::getnick
  1557. set hand $::hand
  1558. set host $::host
  1559. set chan $::chan
  1560. set chan1 $::chan1
  1561. set type $::type
  1562. set what $::what
  1563. sb:process $bhost $what $nick $hand $host $chan $chan1 $type
  1564. check:if:bind "sb:get:host" "311"
  1565. }
  1566. proc sb:process {bhost what nick hand host chan chan1 type} {
  1567. global botnick black
  1568. set char(p) [lindex $black(cmdchar) 0]
  1569. set foundban 0
  1570. if {[string match -nocase "none" "$char(p)"]} {
  1571. set char(p) ""
  1572. }
  1573. if {![validchan $chan]} {
  1574. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1575. return
  1576. }
  1577. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1578. return
  1579. }
  1580. if {[matchattr $hand nm|- $chan]} {
  1581. if {($bhost == "") && ($type == "0")} {
  1582. blacktools:tell $nick $host $hand $chan $chan1 sb.1 none
  1583. return
  1584. }
  1585. if {($bhost == "") && ($type == "1")} {
  1586. blacktools:tell $nick $host $hand $chan $chan1 sb.2 none
  1587. return
  1588. }
  1589. }
  1590. if {($bhost == "") && ($type == "0")} {
  1591. blacktools:tell $nick $host $hand $chan $chan1 sb.3 none
  1592. return
  1593. }
  1594. if {($bhost == "") && ($type == "1")} {
  1595. blacktools:tell $nick $host $hand $chan $chan1 sb.4 none
  1596. return
  1597. }
  1598. if {[string match -nocase $what "global"] && [matchattr $hand mn|- $chan]} {
  1599. foreach ban [banlist] {
  1600. set expire [clock format [lindex $ban 2] -format %D-%H:%M:%S]
  1601. set created [clock format [lindex $ban 3] -format %D-%H:%M:%S]
  1602. set fban [lindex $ban 0]
  1603. set freason [lindex $ban 1]
  1604. set fbywho [lindex $ban 5]
  1605. if {[string match -nocase [lindex $ban 0] $bhost] || [string equal -nocase [lindex $ban 0] $bhost]} {
  1606. set foundban 1
  1607. if {[lindex $ban 2] == 0} {
  1608. if {[isbansticky [lindex $ban 0]]} {
  1609. blacktools:tell $nick $host $hand $chan $chan1 sb.5 "$fban $fbywho $created 0 $freason"
  1610. } else {
  1611. blacktools:tell $nick $host $hand $chan $chan1 sb.6 "$fban $fbywho $created 0 $freason"
  1612. }
  1613. } else {
  1614. if {[isbansticky [lindex $ban 0]]} {
  1615. blacktools:tell $nick $host $hand $chan $chan1 sb.7 "$fban $fbywho $created $expire $freason"
  1616. } else {
  1617. blacktools:tell $nick $host $hand $chan $chan1 sb.8 "$fban $fbywho $created $expire $freason"
  1618. }
  1619. }
  1620. }
  1621. }
  1622. if {$foundban == 0} {
  1623. blacktools:tell $nick $host $hand $chan $chan1 sb.13 none
  1624. }
  1625. return
  1626. }
  1627. #local ban
  1628. foreach ban [banlist $chan] {
  1629. if {[string match -nocase [lindex $ban 0] $bhost] || [string equal -nocase [lindex $ban 0] $bhost]} {
  1630. set expire [clock format [lindex $ban 2] -format %D-%H:%M:%S]
  1631. set created [clock format [lindex $ban 3] -format %D-%H:%M:%S]
  1632. set fban [lindex $ban 0]
  1633. set freason [lindex $ban 1]
  1634. set fbywho [lindex $ban 5]
  1635. set foundban 1
  1636. if {[lindex $ban 2] == 0} {
  1637. if {[isbansticky [lindex $ban 0] $chan]} {
  1638. blacktools:tell $nick $host $hand $chan $chan1 sb.9 "$fban $fbywho $created $expire $freason"
  1639. } else {
  1640. blacktools:tell $nick $host $hand $chan $chan1 sb.10 "$fban $fbywho $created 0 $freason"
  1641. }
  1642. } else {
  1643. if {[isbansticky [lindex $ban 0] $chan]} {
  1644. blacktools:tell $nick $host $hand $chan $chan1 sb.11 "$fban $fbywho $created $expire $freason"
  1645. } else {
  1646. blacktools:tell $nick $host $hand $chan $chan1 sb.12 "$fban $fbywho $created $expire $freason"
  1647. }
  1648. }
  1649. if {[string equal $fbywho "ANTIPUB"] || [string equal $fbywho "BADWORD"] || [string equal $fbywho "BADCHAN"]} {
  1650. set type $fbywho
  1651. sb:say:why $nick $fban $hand $chan $chan1 $type
  1652. }
  1653. }
  1654. }
  1655. if {$foundban == 0} {
  1656. blacktools:tell $nick $host $hand $chan $chan1 sb.13 none
  1657. return
  1658. }
  1659. }
  1660. proc sb:say:why {nick host hand chan chan1 type} {
  1661. global black
  1662. set file [open $black(bad_saylist) r]
  1663. set w [read -nonewline $file]
  1664. close $file
  1665. set data [split $w "\n"]
  1666. if {$w != ""} {
  1667. foreach line $data {
  1668. set channel [lindex [split $line] 0]
  1669. set hostmask [lindex [split $line] 1]
  1670. set why [join [lrange [split $line] 2 end]]
  1671. if {[string match -nocase $channel $chan] && [string equal -nocase $host $hostmask]} {
  1672. if {$type == "ANTIPUB" || $type == "BADWORD"} {
  1673. blacktools:tell $nick $host $hand $chan $chan1 sb.14 $why
  1674. }
  1675. if {$type == "BADCHAN"} {
  1676. blacktools:tell $nick $host $hand $chan $chan1 sb.15 $why
  1677. }
  1678. }
  1679. }
  1680. }
  1681. }
  1682. proc sbpublic {nick host hand chan arg} {
  1683. global botnick black
  1684. set bhost [string tolower [lindex [split $arg] 0]]
  1685. set what [lindex [split $arg] 1]
  1686. set chan1 "$chan"
  1687. set type 0
  1688. foreach c [channels] {
  1689. set backchan [channel get $c backchan]
  1690. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  1691. set chan "$c"
  1692. }
  1693. }
  1694. if {[regexp {^[&#]} $bhost] && [matchattr $hand nm|- $chan]} {
  1695. set chan "$bhost"
  1696. set bhost [string tolower [lindex [split $arg] 1]]
  1697. set what [lindex [split $arg] 2]
  1698. }
  1699. if {$bhost != ""} {
  1700. if {(![regexp {\*} $bhost]) && ![onchan $bhost $chan]} {
  1701. if {[onchan $bhost $chan]} {
  1702. set bhost "$nick![getchanhost $bhost $chan]"
  1703. sb:process $bhost $what $nick $hand $host $chan $chan1 $type
  1704. return
  1705. }
  1706. putquick "WHOIS $bhost $bhost"
  1707. set ::bhost $bhost
  1708. set ::getnick $nick
  1709. set ::hand $hand
  1710. set ::host $host
  1711. set ::chan $chan
  1712. set ::chan1 $chan1
  1713. set ::type $type
  1714. set ::what $what
  1715. bind RAW - 311 sb:get:host
  1716. }
  1717. if {[regexp {\*} $bhost]} {
  1718. sb:process $bhost $what $nick $hand $host $chan $chan1 $type
  1719. }
  1720. } else { sb:process $bhost $what $nick $hand $host $chan $chan1 $type }
  1721. utimer 1 [list check:if:bind "sb:get:host" "311"]
  1722. }
  1723. ################################# d ##################################
  1724. proc d:process {dnick mask days reason nick hand host chan chan1 type} {
  1725. global botnick black
  1726. set char(p) [lindex $black(cmdchar) 0]
  1727. if {[string match -nocase "none" "$char(p)"]} {
  1728. set char(p) ""
  1729. }
  1730. set handle [nick2hand $dnick]
  1731. if {![validchan $chan]} {
  1732. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1733. return 0
  1734. }
  1735. if {![onchan $botnick $chan]} {
  1736. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  1737. return
  1738. }
  1739. set list [userlist $black(exceptflags) $chan]
  1740. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1741. return
  1742. }
  1743. if {[matchattr $hand nm|- $chan]} {
  1744. if {($dnick == "") && ($type == "0")} {
  1745. blacktools:tell $nick $host $hand $chan $chan1 d.1 none
  1746. return
  1747. }
  1748. if {($dnick == "") && ($type == "1")} {
  1749. blacktools:tell $nick $host $hand $chan $chan1 d.2 none
  1750. return
  1751. }
  1752. }
  1753. if {($dnick == "") && ($type == "0")} {
  1754. blacktools:tell $nick $host $hand $chan $chan1 d.3 none
  1755. return
  1756. }
  1757. if {($dnick == "") && ($type == "1")} {
  1758. blacktools:tell $nick $host $hand $chan $chan1 d.4 none
  1759. return
  1760. }
  1761. foreach user $list {
  1762. set hosts [getuser $user hosts]
  1763. foreach host $hosts {
  1764. if {[string match -nocase $mask $host]} {
  1765. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  1766. return
  1767. }
  1768. }
  1769. }
  1770. if {[matchattr $handle $black(exceptflags) $chan]} {
  1771. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  1772. return
  1773. }
  1774. if {$days == "" || (![regexp {^[0-9]} $days])} {
  1775. if {[channel get $chan d-bantime] != "0"} {
  1776. set days [channel get $chan d-bantime]
  1777. } else { set days "$black(dbtime)" }
  1778. }
  1779. if {$reason == ""} {
  1780. if {[channel get $chan d-reason] != ""} {
  1781. set reason [channel get $chan d-reason]
  1782. }
  1783. }
  1784. if {$reason == ""} {
  1785. set getlang [string tolower [channel get $chan lang]]
  1786. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  1787. set reason1 $black(say.$getlang.d.5)
  1788. } else { set reason1 "$reason" }
  1789. if {[channel get $chan showhandle]} {
  1790. set reason "($hand) $reason1"
  1791. } else { set reason "$reason1"
  1792. }
  1793. if {[isbotnick $dnick]} {
  1794. return
  1795. }
  1796. if {![botisop $chan]} {
  1797. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  1798. return
  1799. }
  1800. if {$mask == "*!*@*"} {
  1801. return
  1802. }
  1803. if {[onchan $dnick $chan]} {
  1804. set mask *!*@[lindex [split [getchanhost $dnick $chan] "@"] 1]
  1805. }
  1806. blacktools:banner:3 $mask $hand $chan $reason [expr $days * 1440] d($chan)
  1807. }
  1808. proc dpublic {nick host hand chan arg} {
  1809. global botnick black
  1810. set days [lindex [split $arg] 0]
  1811. set dnick [lindex [split $arg] 1]
  1812. set type 0
  1813. set mask [lindex [split $arg] 1]
  1814. set reason [join [lrange [split $arg] 2 end]]
  1815. set handle [nick2hand $dnick]
  1816. set chan1 "$chan"
  1817. foreach c [channels] {
  1818. set backchan [channel get $c backchan]
  1819. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  1820. set chan "$c"
  1821. }
  1822. }
  1823. if {[regexp {^[&#]} $days] && [matchattr $hand nm|- $chan]} {
  1824. set chan "$days"
  1825. set days [lindex [split $arg] 1]
  1826. set mask [lindex [split $arg] 2]
  1827. set dnick [lindex [split $arg] 2]
  1828. set reason [join [lrange [split $arg] 3 end]]
  1829. if {![regexp {^[0-9]} $days]} {
  1830. set mask [lindex [split $arg] 1]
  1831. set dnick [lindex [split $arg] 1]
  1832. set reason [join [lrange [split $arg] 2 end]]
  1833. }
  1834. }
  1835. if {![regexp {^[0-9]} $days]} {
  1836. set mask [lindex [split $arg] 0]
  1837. set dnick [lindex [split $arg] 0]
  1838. set reason [join [lrange [split $arg] 1 end]]
  1839. }
  1840. set split_text [split $dnick ","]
  1841. if {$split_text != ""} {
  1842. foreach txt $split_text {
  1843. d:process $txt $txt $days $reason $nick $hand $host $chan $chan1 $type
  1844. }
  1845. } else { d:process $dnick $mask $days $reason $nick $hand $host $chan $chan1 $type }
  1846. }
  1847. ############################### stick #################################
  1848. proc stick:process {snick mask time reason nick hand host chan chan1 type} {
  1849. global botnick black
  1850. set char(p) [lindex $black(cmdchar) 0]
  1851. if {[string match -nocase "none" "$char(p)"]} {
  1852. set char(p) ""
  1853. }
  1854. set handle [nick2hand $snick]
  1855. set list [userlist $black(exceptflags) $chan]
  1856. if {![validchan $chan]} {
  1857. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  1858. return
  1859. }
  1860. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  1861. return 0
  1862. }
  1863. if {![onchan $botnick $chan]} {
  1864. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  1865. return
  1866. }
  1867. foreach user $list {
  1868. set hosts [getuser $user hosts]
  1869. foreach host $hosts {
  1870. if {[string match $mask $host]} {
  1871. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  1872. return
  1873. }
  1874. }
  1875. }
  1876. if {[matchattr $handle nm|AMOVS $chan]} {
  1877. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  1878. return
  1879. }
  1880. if {$time == "" || (![regexp {^[0-9]} $time])} {
  1881. if {[channel get $chan stick-bantime] != "0"} {
  1882. set time [channel get $chan stick-bantime]
  1883. } else { set time "$black(dfstickbantime)" }
  1884. }
  1885. if {$reason == ""} {
  1886. if {[channel get $chan stick-reason] != ""} {
  1887. set reason [channel get $chan stick-reason]
  1888. }
  1889. }
  1890. if {$reason == ""} {
  1891. set getlang [string tolower [channel get $chan lang]]
  1892. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  1893. set reason1 $black(say.$getlang.stick.5)
  1894. } else { set reason1 "$reason" }
  1895. if {[channel get $chan showhandle]} {
  1896. set reason "($hand) $reason1"
  1897. } else { set reason "$reason1"
  1898. }
  1899. if {[isbotnick $snick]} {
  1900. return
  1901. }
  1902. if {![botisop $chan]} {
  1903. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  1904. return
  1905. }
  1906. if {$mask == "*!*@*"} {
  1907. return
  1908. }
  1909. if {[onchan $snick $chan]} {
  1910. set mask *!*@[lindex [split [getchanhost $snick $chan] "@"] 1]
  1911. }
  1912. if {[matchattr $hand nm|- $chan]} {
  1913. if {($snick == "") && ($type == "0")} {
  1914. blacktools:tell $nick $host $hand $chan $chan1 stick.1 none
  1915. return
  1916. }
  1917. if {($snick == "") && ($type == "1")} {
  1918. blacktools:tell $nick $host $hand $chan $chan1 stick.2 none
  1919. return
  1920. }
  1921. }
  1922. if {($snick == "") && ($type == "0")} {
  1923. blacktools:tell $nick $host $hand $chan $chan1 stick.3 none
  1924. return
  1925. }
  1926. if {($snick == "") && ($type == "1")} {
  1927. blacktools:tell $nick $host $hand $chan $chan1 stick.4 none
  1928. return
  1929. }
  1930. blacktools:banner:4 $mask $hand $chan $reason $time stick($chan)
  1931. }
  1932. proc stickpublic {nick host hand chan arg} {
  1933. global botnick black
  1934. set snick [lindex [split $arg] 0]
  1935. set mask [lindex [split $arg] 0]
  1936. set chan1 "$chan"
  1937. set type 0
  1938. set time [lindex [split $arg] 1]
  1939. set reason [join [lrange [split $arg] 2 end]]
  1940. set handle [nick2hand $snick]
  1941. foreach c [channels] {
  1942. set backchan [channel get $c backchan]
  1943. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  1944. set chan "$c"
  1945. }
  1946. }
  1947. if {[regexp {^[&#]} $snick] && [matchattr $hand nm|- $chan]} {
  1948. set chan "$snick"
  1949. set time [lindex [split $arg] 2]
  1950. set mask [lindex [split $arg] 1]
  1951. set snick [lindex [split $arg] 1]
  1952. set reason [join [lrange [split $arg] 3 end]]
  1953. if {![regexp {^[0-9]} $time]} {
  1954. set reason [join [lrange [split $arg] 2 end]]
  1955. }
  1956. }
  1957. if {![regexp {^[0-9]} $time]} {
  1958. set reason [join [lrange [split $arg] 1 end]]
  1959. }
  1960. set split_text [split $snick ","]
  1961. if {$split_text != ""} {
  1962. foreach txt $split_text {
  1963. stick:process $txt $txt $time $reason $nick $hand $host $chan $chan1 $type
  1964. }
  1965. } else { stick:process $snick $mask $time $reason $nick $hand $host $chan $chan1 $type }
  1966. }
  1967. ################################### t #################################
  1968. proc tpublic {nick host hand chan arg} {
  1969. global black
  1970. set topics [join [lrange [split $arg] 0 end]]
  1971. set c [lindex [split $arg] 0]
  1972. set type 0
  1973. set chan1 "$chan"
  1974. if {[regexp {^[&#]} $c] && [matchattr $hand nm|M $c]} {
  1975. set chan "$c"
  1976. set topics [join [lrange [split $arg] 1 end]]
  1977. }
  1978. t:process $nick $host $hand $chan $chan1 $topics $type
  1979. }
  1980. proc t:process {nick host hand chan chan1 topics type} {
  1981. global botnick black
  1982. set char(p) [lindex $black(cmdchar) 0]
  1983. set topics [join $topics]
  1984. if {(![matchattr $hand nm|M]) && [channel get $chan topiclock]} {
  1985. blacktools:tell $nick $host $hand $chan $chan1 topic.20 none
  1986. return
  1987. }
  1988. if {[string match -nocase "none" "$char(p)"]} {
  1989. set char(p) ""
  1990. }
  1991. if {[matchattr $hand nm|- $chan]} {
  1992. if {($topics == "") && ($type == "0")} {
  1993. blacktools:tell $nick $host $hand $chan $chan1 t.1 none
  1994. return
  1995. }
  1996. if {($topics == "") && ($type == "1")} {
  1997. blacktools:tell $nick $host $hand $chan $chan1 t.2 none
  1998. return
  1999. }
  2000. }
  2001. if {($topics == "") && ($type == "0")} {
  2002. blacktools:tell $nick $host $hand $chan $chan1 t.3 none
  2003. return
  2004. }
  2005. if {($topics == "") && ($type == "1")} {
  2006. blacktools:tell $nick $host $hand $chan $chan1 t.4 none
  2007. return
  2008. }
  2009. if {![validchan $chan]} {
  2010. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2011. return
  2012. }
  2013. if {![onchan $botnick $chan]} {
  2014. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2015. return
  2016. }
  2017. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2018. return
  2019. }
  2020. if {![botisop $chan]} {
  2021. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  2022. return
  2023. }
  2024. if {[channel get $chan showhandle]} {
  2025. set topics "($hand) $topics"
  2026. } else { set topics "$topics"
  2027. }
  2028. putquick "TOPIC $chan :$topics"
  2029. }
  2030. ############################## status #################################
  2031. proc statuspublic {nick host hand chan arg} {
  2032. global botnick server uptime {server-online}
  2033. set chan1 "$chan"
  2034. catch {exec uptime} shelluptime
  2035. set up [duration [expr [unixtime] - $uptime]]
  2036. set on [duration [expr [unixtime] - ${server-online}]]
  2037. blacktools:tell $nick $host $hand $chan $chan1 status.1 $up
  2038. blacktools:tell $nick $host $hand $chan $chan1 status.2 $server
  2039. blacktools:tell $nick $host $hand $chan $chan1 status.3 $on
  2040. blacktools:tell $nick $host $hand $chan $chan1 status.4 [channels]
  2041. blacktools:tell $nick $host $hand $chan $chan1 status.5 $shelluptime
  2042. }
  2043. ############################## uptime #################################
  2044. proc uptimepublic {nick host hand chan arg} {
  2045. global botnick uptime {server-online} server
  2046. set chan1 "$chan"
  2047. set up [duration [expr [unixtime] - $uptime]]
  2048. set on [duration [expr [unixtime] - ${server-online}]]
  2049. blacktools:tell $nick $host $hand $chan $chan1 status.1 $up
  2050. blacktools:tell $nick $host $hand $chan $chan1 status.2 $server
  2051. blacktools:tell $nick $host $hand $chan $chan1 status.3 $on
  2052. }
  2053. ################################# i ###################################
  2054. proc ipublic {nick host hand chan arg} {
  2055. global botnick black
  2056. set type 0
  2057. set chan1 "$chan"
  2058. set inick [lrange [split $arg] 0 end]
  2059. set c [lindex [split $arg] 0]
  2060. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  2061. set chan "$c"
  2062. set inick [join [lrange [split $arg] 1 end]]
  2063. }
  2064. i:process $nick $host $hand $chan $chan1 $inick $type
  2065. }
  2066. proc i:process {nick host hand chan chan1 inick type} {
  2067. global botnick black
  2068. set char(p) [lindex $black(cmdchar) 0]
  2069. if {[string match -nocase "none" "$char(p)"]} {
  2070. set char(p) ""
  2071. }
  2072. if {$inick == "" && $chan != $chan1} {
  2073. set inick $nick
  2074. }
  2075. if {($inick == "") && ($type == "0")} {
  2076. blacktools:tell $nick $host $hand $chan $chan1 i.5 none
  2077. return
  2078. }
  2079. if {($inick == "") && ($type == "1")} {
  2080. blacktools:tell $nick $host $hand $chan $chan1 i.6 none
  2081. return
  2082. }
  2083. if {![validchan $chan]} {
  2084. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2085. return
  2086. }
  2087. if {![onchan $botnick $chan]} {
  2088. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2089. return
  2090. }
  2091. set replace(%nick%) $nick
  2092. set replace(%chan%) $chan
  2093. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  2094. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  2095. set getmsg $black(say.$getlang.i.7)
  2096. if {[info exists black(say.$getlang.i.7)]} {
  2097. set imessage [string map [array get replace] $getmsg]
  2098. }
  2099. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2100. return
  2101. }
  2102. if {![botisop $chan]} {
  2103. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  2104. return
  2105. }
  2106. foreach in $inick {
  2107. if {[onchan $in $chan]} {
  2108. blacktools:tell $nick $host $hand $chan $chan1 i.1 $in
  2109. return
  2110. }
  2111. set countz [getuser $hand XTRA i($chan)]
  2112. if {$countz == ""} { set countz 0 }
  2113. set counts [expr $countz + 1]
  2114. setuser $hand XTRA i($chan) $counts
  2115. putquick "INVITE $in $chan"
  2116. putquick "PRIVMSG $in :$imessage"
  2117. blacktools:tell $nick $host $hand $chan $chan1 i.2 $in
  2118. }
  2119. }
  2120. ############################### addinfo ###############################
  2121. proc addinfopublic {nick host hand chan arg} {
  2122. global botnick black
  2123. set info [join [lrange [split $arg] 0 end]]
  2124. set chan1 "$chan"
  2125. set char(p) [lindex $black(cmdchar) 0]
  2126. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2127. return 0
  2128. }
  2129. if {$info == ""} {
  2130. blacktools:tell $nick $host $hand $chan $chan1 addinfo.1 none
  2131. return 0
  2132. }
  2133. addinfo:process $nick $host $hand $chan $chan1 $info
  2134. }
  2135. proc addinfo:process {nick host hand chan chan1 info} {
  2136. global botnick black
  2137. if {[string match -nocase "$info" "off"]} {
  2138. set infos ""
  2139. setuser $hand info $infos
  2140. blacktools:tell $nick $host $hand $chan $chan1 addinfo.3 none
  2141. return 0
  2142. }
  2143. setuser $hand info $info
  2144. blacktools:tell $nick $host $hand $chan $chan1 addinfo.4 $info
  2145. }
  2146. ############################### purge ###############################
  2147. proc purgepublic {nick host hand chan arg} {
  2148. global botnick black
  2149. set c [lindex [split $arg] 0]
  2150. set reason [join [lrange [split $arg] 0 end]]
  2151. set chan1 "$chan"
  2152. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  2153. set chan "$c"
  2154. set reason [join [lrange [split $arg] 1 end]]
  2155. }
  2156. if {$reason == ""} {
  2157. blacktools:tell $nick $host $hand $chan $chan1 purge.1 none
  2158. return
  2159. }
  2160. purge:process $nick $host $hand $chan $chan1 $reason
  2161. }
  2162. proc purge:process {nick host hand chan chan1 reason} {
  2163. global black
  2164. if {!($black(homechan) == "") && ![string equal -nocase $black(homechan) "#no_home_chan"]} {
  2165. if {[string equal -nocase $chan $black(homechan)]} {
  2166. blacktools:tell:prv $nick $host $hand delchan.5 $chan
  2167. return
  2168. }
  2169. }
  2170. channel remove $chan
  2171. delchan:stats $chan $hand $host $reason
  2172. blacktools:tell $nick $host $hand $chan $chan1 purge.2 none
  2173. putquick "PART $chan :PURGED by $hand :$reason"
  2174. }
  2175. ################################### v #################################
  2176. proc vpublic {nick host hand chan arg} {
  2177. global botnick black
  2178. set c [lindex [split $arg] 0]
  2179. set arg [split $arg]
  2180. set nick [split $nick]
  2181. set chan1 "$chan"
  2182. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  2183. set chan "$c"
  2184. set arg [lrange $arg 1 end]
  2185. }
  2186. v:process $nick $host $hand $chan $chan1 $arg
  2187. }
  2188. proc v:process {nick host hand chan chan1 arg} {
  2189. global botnick black
  2190. if {![validchan $chan]} {
  2191. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2192. return 0
  2193. }
  2194. if {![onchan $botnick $chan]} {
  2195. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2196. return 0
  2197. }
  2198. if {![botisop $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  2199. return 0
  2200. }
  2201. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2202. return 0
  2203. }
  2204. if {$arg == ""} {
  2205. set arg $nick
  2206. }
  2207. foreach voicenick $arg {
  2208. if {[isbotnick $voicenick]} { return 0 }
  2209. if {[isvoice $voicenick $chan]} {putquick "MODE $chan -v $voicenick"} else {putquick "MODE $chan +v $voicenick"}
  2210. }
  2211. }
  2212. ################################## o ##################################
  2213. proc opublic {nick host hand chan arg} {
  2214. global botnick black
  2215. set c [lindex [split $arg] 0]
  2216. set arg [split $arg]
  2217. set nick [split $nick]
  2218. set chan1 "$chan"
  2219. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  2220. set chan "$c"
  2221. set arg [lrange $arg 1 end]
  2222. }
  2223. o:process $nick $host $hand $chan $chan1 $arg
  2224. }
  2225. proc o:process {nick host hand chan chan1 arg} {
  2226. global botnick black
  2227. if {![validchan $chan]} {
  2228. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2229. return 0
  2230. }
  2231. if {![onchan $botnick $chan]} {
  2232. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2233. return 0
  2234. }
  2235. if {![botisop $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  2236. return 0
  2237. }
  2238. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2239. return 0
  2240. }
  2241. if {$arg == ""} {
  2242. set arg $nick
  2243. }
  2244. foreach opnick $arg {
  2245. if {[isbotnick $opnick]} { return 0 }
  2246. if {[isop $opnick $chan]} {putquick "MODE $chan -o $opnick"} else {putquick "MODE $chan +o $opnick"}
  2247. }
  2248. }
  2249. ################################# l ###################################
  2250. proc lpublic {nick host hand chan arg} {
  2251. global black
  2252. set times [lindex [split $arg] 0]
  2253. set type 0
  2254. set chan1 "$chan"
  2255. if {[regexp {^[&#]} $times] && [matchattr $hand nm|- $chan]} {
  2256. set chan "$times"
  2257. set times [lindex [split $arg] 1]
  2258. }
  2259. l:process $nick $host $hand $chan $chan1 $times $type
  2260. }
  2261. proc l:process {nick host hand chan chan1 time type} {
  2262. global botnick black
  2263. set char(p) [lindex $black(cmdchar) 0]
  2264. if {[string match -nocase "none" "$char(p)"]} {
  2265. set char(p) ""
  2266. }
  2267. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2268. return 0
  2269. }
  2270. if {[matchattr $hand nm|- $chan]} {
  2271. if {($time == "") && ($type == "0")} {
  2272. blacktools:tell $nick $host $hand $chan $chan1 l.1 none
  2273. return 0
  2274. }
  2275. if {($time == "") && ($type == "1")} {
  2276. blacktools:tell $nick $host $hand $chan $chan1 l.2 none
  2277. return 0
  2278. }
  2279. }
  2280. if {($time == "") && ($type == "0")} {
  2281. blacktools:tell $nick $host $hand $chan $chan1 l.3 none
  2282. return 0
  2283. }
  2284. if {($time == "") && ($type == "1")} {
  2285. blacktools:tell $nick $host $hand $chan $chan1 l.4 none
  2286. return 0
  2287. }
  2288. if {![validchan $chan]} {
  2289. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2290. return 0
  2291. }
  2292. if {![onchan $botnick $chan]} {
  2293. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2294. return 0
  2295. }
  2296. if {![botisop $chan]} {
  2297. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  2298. return 0
  2299. }
  2300. if {$time >= 300} {
  2301. blacktools:tell $nick $host $hand $chan $chan1 l.5 none
  2302. return 0
  2303. }
  2304. putserv "MODE $chan +$black(lmode)" ;utimer $time [list putquick "MODE $chan -$black(lmode)"]
  2305. blacktools:tell $nick $host $hand $chan $chan1 l.6 "$black(lmode) $time"
  2306. }
  2307. proc chatpublic {nick host hand chan arg} {
  2308. global botnick
  2309. *ctcp:CHAT $nick $host $hand $botnick CHAT $arg
  2310. blacktools:tell $nick $host $hand $chan $chan1 chat.1 none
  2311. }
  2312. ################################ ul ###################################
  2313. proc ul:process {nick host hand chan chan1} {
  2314. global black botnick
  2315. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2316. return 0
  2317. }
  2318. if {![validchan $chan]} {
  2319. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2320. return 0
  2321. }
  2322. if {![onchan $botnick $chan]} {
  2323. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2324. return 0
  2325. }
  2326. if {![botisop $chan]} {
  2327. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  2328. return 0
  2329. }
  2330. putquick "MODE $chan -$black(ulmodes)"
  2331. blacktools:tell $nick $host $hand $chan $chan1 ul.1 $black(ulmodes)
  2332. }
  2333. proc ulpublic {nick host hand chan arg} {
  2334. global black
  2335. set c [lindex [split $arg] 0]
  2336. set chan1 "$chan"
  2337. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  2338. set chan "$c"
  2339. }
  2340. ul:process $nick $host $hand $chan $chan1
  2341. }
  2342. ################################ say ##################################
  2343. proc saypublic {nick host hand chan arg} {
  2344. global black
  2345. set text [join [lrange [split $arg] 0 end]]
  2346. set c [lindex [split $arg] 0]
  2347. set type 0
  2348. set chan1 "$chan"
  2349. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  2350. set chan "$c"
  2351. set text [join [lrange [split $arg] 1 end]]
  2352. }
  2353. say:process $nick $host $hand $chan $chan1 $text $type
  2354. }
  2355. proc say:process {nick host hand chan chan1 text type} {
  2356. global botnick black
  2357. set char(p) [lindex $black(cmdchar) 0]
  2358. set text [join $text]
  2359. if {[string match -nocase "none" "$char(p)"]} {
  2360. set char(p) ""
  2361. }
  2362. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2363. return
  2364. }
  2365. if {![validchan $chan]} {
  2366. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2367. return
  2368. }
  2369. if {[matchattr $hand nm|- $chan]} {
  2370. if {($text == "") && ($type == "0")} {
  2371. blacktools:tell $nick $host $hand $chan $chan1 say.1 none
  2372. return
  2373. }
  2374. if {($text == "") && ($type == "1")} {
  2375. blacktools:tell $nick $host $hand $chan $chan1 say.2 none
  2376. return
  2377. }
  2378. }
  2379. if {($text == "") && ($type == "0")} {
  2380. blacktools:tell $nick $host $hand $chan $chan1 say.3 none
  2381. return
  2382. }
  2383. if {($text == "") && ($type == "1")} {
  2384. blacktools:tell $nick $host $hand $chan $chan1 say.4 none
  2385. return
  2386. }
  2387. if {![onchan $botnick $chan]} {
  2388. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2389. return
  2390. }
  2391. putquick "PRIVMSG $chan :$text"
  2392. }
  2393. ################################ act ##################################
  2394. proc actpublic {nick host hand chan arg} {
  2395. global black
  2396. set text [join [lrange [split $arg] 0 end]]
  2397. set c [lindex [split $arg] 0]
  2398. set type 0
  2399. set chan1 "$chan"
  2400. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  2401. set chan "$c"
  2402. set text [join [lrange [split $arg] 1 end]]
  2403. }
  2404. act:process $nick $host $hand $chan $chan1 $text $type
  2405. }
  2406. proc act:process {nick host hand chan chan1 text type} {
  2407. global botnick black
  2408. set char(p) [lindex $black(cmdchar) 0]
  2409. set text [join $text]
  2410. if {[string match -nocase "none" "$char(p)"]} {
  2411. set char(p) ""
  2412. }
  2413. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2414. return
  2415. }
  2416. if {[matchattr $hand nm|- $chan]} {
  2417. if {($text == "") && ($type == "0")} {
  2418. blacktools:tell $nick $host $hand $chan $chan1 act.1 none
  2419. return
  2420. }
  2421. if {($text == "") && ($type == "1")} {
  2422. blacktools:tell $nick $host $hand $chan $chan1 act.2 none
  2423. return
  2424. }
  2425. }
  2426. if {($text == "") && ($type == "0")} {
  2427. blacktools:tell $nick $host $hand $chan $chan1 act.3 none
  2428. return
  2429. }
  2430. if {($text == "") && ($type == "1")} {
  2431. blacktools:tell $nick $host $hand $chan $chan1 act.4 none
  2432. return
  2433. }
  2434. if {![validchan $chan]} {
  2435. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2436. return
  2437. }
  2438. if {![onchan $botnick $chan]} {
  2439. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2440. return
  2441. }
  2442. putquick "PRIVMSG $chan :\001ACTION $text\001"
  2443. }
  2444. ############################## broadcast ##############################
  2445. proc broadcastpublic {nick host hand chan arg} {
  2446. global black
  2447. set text [join [lrange [split $arg] 0 end]]
  2448. set chan1 "$chan"
  2449. set char(p) [lindex $black(cmdchar) 0]
  2450. if {$text == ""} {
  2451. blacktools:tell $nick $host $hand $chan $chan1 broadcast.1 none
  2452. return 0
  2453. }
  2454. broadcast:cmd:process $nick $host $hand $chan $chan1 $text
  2455. }
  2456. proc broadcast:cmd:process {nick host hand chan chan1 text} {
  2457. global botnick black
  2458. set text [join $text]
  2459. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2460. return 0
  2461. }
  2462. foreach c [channels] {
  2463. if {![channel get $c silent]} {
  2464. putquick "PRIVMSG $c :(BROADCAST) $text"
  2465. }
  2466. }
  2467. }
  2468. ############################### check #################################
  2469. proc checkpublic {nick host hand chan arg} {
  2470. global black
  2471. set checked [lindex [split $arg] 0]
  2472. if {[regexp {^[&#]} $checked] && [matchattr $hand nm|- $chan]} {
  2473. set chan "$checked"
  2474. set checked [lindex [split $arg] 1]
  2475. }
  2476. set chan1 "$chan"
  2477. if {$checked == ""} { blacktools:tell $nick $host $hand $chan $chan1 check.1 none
  2478. return
  2479. }
  2480. check:process $nick $host $hand $chan $chan1 $checked
  2481. }
  2482. proc check:process {nick host hand chan chan1 checked} {
  2483. global botnick black
  2484. set char(p) [lindex $black(cmdchar) 0]
  2485. if {[string match -nocase "none" "$char(p)"]} {
  2486. set char(p) ""
  2487. }
  2488. set handle [nick2hand $checked]
  2489. if {[matchattr $hand -|q $chan]} {
  2490. blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2491. return
  2492. }
  2493. if {[matchattr $handle $black(exceptflags) $chan]} {
  2494. blacktools:tell $nick $host $hand $chan $chan1 gl.noban none
  2495. return
  2496. }
  2497. if {[isbotnick $checked]} {
  2498. return
  2499. }
  2500. if {![botisop $chan]} {
  2501. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  2502. return
  2503. }
  2504. if {![onchan $checked $chan]} {
  2505. blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $checked
  2506. return
  2507. }
  2508. if {[onchan $checked $chan]} {
  2509. set mask *!*@[lindex [split [getchanhost $checked $chan] "@"] 1]
  2510. }
  2511. set countz [getuser $hand XTRA check($chan)]
  2512. if {$countz == ""} { set countz 0 }
  2513. set counts [expr $countz + 1]
  2514. setuser $hand XTRA check($chan) $counts
  2515. if {[channel get $chan check-message] != ""} {
  2516. set getmsg [channel get $chan check-message]
  2517. }
  2518. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  2519. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  2520. if {![info exists getmsg]} {
  2521. set getmsg $black(say.$getlang.check.3)
  2522. }
  2523. putquick "PRIVMSG $checked :$getmsg"
  2524. }
  2525. ############################## version ################################
  2526. proc versionpublic {nick host hand chan arg} {
  2527. global botnick black
  2528. set chan1 "$chan"
  2529. version:process $nick $host $hand $chan $chan1
  2530. }
  2531. proc version:process {nick host hand chan chan1} {
  2532. global botnick black
  2533. blacktools:tell $nick $host $hand $chan $chan1 version.1 none
  2534. }
  2535. ############################### cycle #################################
  2536. proc cycle:process {nick host hand chan chan1 reason} {
  2537. global black botnick
  2538. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2539. return 0
  2540. }
  2541. if {![validchan $chan]} {
  2542. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2543. return 0
  2544. }
  2545. if {![onchan $botnick $chan]} {
  2546. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2547. return 0
  2548. }
  2549. if {$reason == ""} { set reason "No Reason" }
  2550. putquick "PART $chan :$reason"
  2551. utimer 5 [list putquick "JOIN $chan"]
  2552. }
  2553. proc cyclepublic {nick host hand chan arg} {
  2554. global black
  2555. set reason [join [lrange [split $arg] 0 end]]
  2556. set c [lindex [split $arg] 0]
  2557. set chan1 "$chan"
  2558. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  2559. set chan "$c"
  2560. set reason [join [lrange [split $arg] 1 end]]
  2561. }
  2562. cycle:process $nick $host $hand $chan $chan1 $reason
  2563. }
  2564. ################################ away #################################
  2565. proc awaypublic {nick host hand chan arg} {
  2566. global black
  2567. set chan1 "$chan"
  2568. set char(p) [lindex $black(cmdchar) 0]
  2569. if {[string match -nocase "none" "$char(p)"]} {
  2570. set char(p) ""
  2571. }
  2572. set aw [join [lrange [split $arg] 0 end]]
  2573. if {$aw == "" } {blacktools:tell $nick $host $hand $chan $chan1 away.1 none
  2574. return 0
  2575. }
  2576. away:process $nick $host $hand $chan $chan1 $aw
  2577. }
  2578. proc away:process {nick host hand chan chan1 aw} {
  2579. global black botnick username
  2580. set char(p) [lindex $black(cmdchar) 0]
  2581. set wdir "scripts/BlackTools/FILES/$username.away.txt"
  2582. set aw [join $aw]
  2583. if {[string equal -nocase "none" "$char(p)"]} {
  2584. set char(p) ""
  2585. }
  2586. if {[string equal -nocase "$aw" "off"]} {
  2587. blacktools:tell $nick $host $hand $chan $chan1 away.3 none
  2588. putquick "AWAY :"
  2589. set type [open $wdir w]
  2590. set none ""
  2591. puts $type "$none"
  2592. close $type
  2593. return
  2594. } else {
  2595. blacktools:tell $nick $host $hand $chan $chan1 away.4 $aw ; putquick "AWAY :$aw"
  2596. set type [open $wdir w]
  2597. puts $type "$aw"
  2598. close $type
  2599. }
  2600. }
  2601. proc setaway {my} {
  2602. global black username
  2603. set wdir "scripts/BlackTools/FILES/$username.away.txt"
  2604. set file [open $wdir r]
  2605. set away [gets $file]
  2606. close $file
  2607. if {$away == ""} {
  2608. return
  2609. } else {
  2610. putserv "AWAY :"
  2611. putserv "AWAY :$away"
  2612. }
  2613. }
  2614. ################################### mode ######################################
  2615. proc modepublic {nick host hand chan arg} {
  2616. global black
  2617. set modes [lindex [split $arg] 0]
  2618. set chan1 "$chan"
  2619. set type 0
  2620. if {[regexp {^[&#]} $modes] && [matchattr $hand nm|- $chan]} {
  2621. set chan "$modes"
  2622. set modes [lindex [split $arg] 1]
  2623. }
  2624. mode:process $nick $host $hand $chan $chan1 $modes $type
  2625. }
  2626. proc mode:process {nick host hand chan chan1 modes type} {
  2627. global botnick black
  2628. set char(p) [lindex $black(cmdchar) 0]
  2629. if {[string match -nocase "none" "$char(p)"]} {
  2630. set char(p) ""
  2631. }
  2632. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2633. return 0
  2634. }
  2635. if {[matchattr $hand nm|- $chan]} {
  2636. if {($modes == "") && ($type == "0")} {
  2637. blacktools:tell $nick $host $hand $chan $chan1 mode.1 none
  2638. return 0
  2639. }
  2640. if {($modes == "") && ($type == "1")} {
  2641. blacktools:tell $nick $host $hand $chan $chan1 mode.2 none
  2642. return 0
  2643. }
  2644. }
  2645. if {($modes == "") && ($type == "0")} {
  2646. blacktools:tell $nick $host $hand $chan $chan1 mode.3 none
  2647. return 0
  2648. }
  2649. if {($modes == "") && ($type == "1")} {
  2650. blacktools:tell $nick $host $hand $chan $chan1 mode.4 none
  2651. return 0
  2652. }
  2653. if {![validchan $chan]} {
  2654. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2655. return 0
  2656. }
  2657. if {![onchan $botnick $chan]} {
  2658. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2659. return 0
  2660. }
  2661. if {![botisop $chan]} {
  2662. blacktools:tell $nick $host $hand $chan $chan1 gl.noop none
  2663. return 0
  2664. }
  2665. if {![regexp {^[+ -]} $modes]} {
  2666. blacktools:tell $nick $host $hand $chan $chan1 mode.5 none
  2667. return 0
  2668. }
  2669. blacktools:tell $nick $host $hand $chan $chan1 mode.6 $modes
  2670. putserv "MODE $chan $modes"
  2671. }
  2672. ################################## myset #############################
  2673. proc mysetpublic {nick host hand chan arg} {
  2674. global black
  2675. set chan1 "$chan"
  2676. set flags [lindex [split $arg] 0]
  2677. set type [lindex [split $arg] 1]
  2678. if {$type == ""} {
  2679. blacktools:tell $nick $host $hand $chan $chan1 myset.3 none
  2680. return
  2681. }
  2682. myset:process $nick $host $hand $chan $chan1 $flags $type
  2683. }
  2684. proc myset:process {nick host hand chan chan1 flags typez} {
  2685. global black
  2686. switch -exact -- [string tolower $flags] {
  2687. lang {
  2688. if {![file exists "$black(dirname)/BlackTools/lang/BlackTools.[string tolower $typez].lang.tcl"]} {
  2689. blacktools:tell $nick $host $hand $chan $chan1 myset.5 \002[string tolower $typez]\002
  2690. return
  2691. }
  2692. setuser $hand XTRA OUTPUT_LANG $typez
  2693. blacktools:tell $nick $host $hand $chan $chan1 myset.1 $typez
  2694. return
  2695. }
  2696. output {
  2697. if {[string match -nocase $typez "notice"]} {
  2698. setuser $hand XTRA OUTPUT_TYPE 1
  2699. blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
  2700. return
  2701. }
  2702. if {[string match -nocase $typez "chan"]} {
  2703. setuser $hand XTRA OUTPUT_TYPE 0
  2704. blacktools:tell $nick $host $hand $chan $chan1 myset.2 $typez
  2705. return
  2706. }
  2707. }
  2708. }
  2709. }
  2710. ################################# set #################################
  2711. proc setpublic {nick host hand chan arg} {
  2712. global black
  2713. set flags [lindex [split $arg] 0]
  2714. set type [join [lrange [split $arg] 1 end]]
  2715. set chan1 "$chan"
  2716. set type1 0
  2717. if {[matchattr $hand nm|M $chan]} {
  2718. if {[regexp {^[&#]} $flags]} {
  2719. set chan "$flags"
  2720. set flags [lindex [split $arg] 1]
  2721. set type [join [lrange [split $arg] 2 end]]
  2722. }
  2723. }
  2724. if {[matchattr $hand nm]} {
  2725. if {[string equal -nocase $flags "global"]} {
  2726. set chan "$flags"
  2727. set flags [lindex [split $arg] 1]
  2728. set type [join [lrange [split $arg] 2 end]]
  2729. foreach c [channels] {
  2730. set:process $nick $host $hand $c $chan1 $flags $type $type1
  2731. }
  2732. return
  2733. }
  2734. }
  2735. set:process $nick $host $hand $chan $chan1 $flags $type $type1
  2736. }
  2737. proc set:process {nick host hand chan chan1 flags type type1} {
  2738. global botnick black
  2739. set char(p) [lindex $black(cmdchar) 0]
  2740. set flags [string tolower $flags]
  2741. set type [string tolower $type]
  2742. if {[string match -nocase "none" "$char(p)"]} {
  2743. set char(p) ""
  2744. }
  2745. if {[matchattr $hand -|q $chan]} {
  2746. blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2747. return
  2748. }
  2749. if {[matchattr $hand nm|- $chan]} {
  2750. if {($flags == "") && ($type1 == "0")} {
  2751. blacktools:tell $nick $host $hand $chan $chan1 set.1 none
  2752. return
  2753. }
  2754. if {($flags == "") && ($type1 == "1")} {
  2755. blacktools:tell $nick $host $hand $chan $chan1 set.2 none
  2756. return
  2757. }
  2758. }
  2759. if {($flags == "") && ($type1 == "0")} {
  2760. blacktools:tell $nick $host $hand $chan $chan1 set.3 none
  2761. return
  2762. }
  2763. if {($flags == "") && ($type1 == "1")} {
  2764. blacktools:tell $nick $host $hand $chan $chan1 set.4 none
  2765. return
  2766. }
  2767. if {![validchan $chan]} {
  2768. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2769. return
  2770. }
  2771. if {![onchan $botnick $chan]} {
  2772. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2773. return
  2774. }
  2775. if {$type == ""} {
  2776. set why [catch {channel set $chan $flags} error]
  2777. if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 set.5 $flags
  2778. return
  2779. } else {
  2780. channel set $chan $flags ; blacktools:tell $nick $host $hand $chan $chan1 set.6 $flags
  2781. }
  2782. } else {
  2783. set why [catch {channel set $chan $flags $type} error]
  2784. if {![matchattr $hand mn|- $chan]} {
  2785. if {[string match -nocase "backchan" $flags]} {
  2786. return
  2787. }
  2788. }
  2789. if {[string equal -nocase "vprotect" $flags]} {
  2790. if {![string equal -nocase "on" $type] && ![string equal -nocase "off" $type]} {
  2791. blacktools:tell $nick $host $hand $chan $chan1 set.9 none
  2792. return
  2793. }
  2794. }
  2795. if {[string equal -nocase "oprotect" $flags]} {
  2796. if {![string equal -nocase "on" $type] && ![string equal -nocase "off" $type]} {
  2797. blacktools:tell $nick $host $hand $chan $chan1 set.10 none
  2798. return
  2799. }
  2800. }
  2801. if {[string equal -nocase "seen-method" $flags]} {
  2802. if {![string equal -nocase "notice" $type] && ![string equal -nocase "privmsg" $type]} {
  2803. blacktools:tell $nick $host $hand $chan $chan1 set.11 none
  2804. return
  2805. }
  2806. }
  2807. if {[string equal -nocase "clonescan-action" $flags]} {
  2808. if {![string equal -nocase "message" $type] && ![string equal -nocase "ban" $type]} {
  2809. blacktools:tell $nick $host $hand $chan $chan1 set.13 none
  2810. return
  2811. }
  2812. }
  2813. if {[string equal -nocase "lang" $flags]} {
  2814. if {![file exists "$black(dirname)/BlackTools/lang/BlackTools.[string tolower $type].lang.tcl"]} {
  2815. blacktools:tell $nick $host $hand $chan $chan1 myset.5 \002[string tolower $type]\002
  2816. return
  2817. }
  2818. }
  2819. if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 set.7 "$flags $type"
  2820. return
  2821. } else {
  2822. if {[string equal -nocase $flags "backchan"]} {
  2823. if {![validchan $type]} {
  2824. blacktools:tell $nick $host $hand $chan $chan1 set.12 $type
  2825. return
  2826. }
  2827. }
  2828. channel set $chan $flags $type ; blacktools:tell $nick $host $hand $chan $chan1 set.8 "$flags $type"
  2829. }
  2830. }
  2831. }
  2832. proc ignorepublic {nick host hand chan arg} {
  2833. global black
  2834. set chan1 "$chan"
  2835. set what [lindex [split $arg] 0]
  2836. set mask [lindex [split $arg] 1]
  2837. set time [lindex [split $arg] 2]
  2838. set reason [join [lrange [split $arg] 3 end]]
  2839. if {$what == ""} { blacktools:tell $nick $host $hand $chan $chan1 ignore.1 none
  2840. return
  2841. }
  2842. ignore:process $nick $host $hand $chan $chan1 $what $mask $time $reason
  2843. }
  2844. proc ignore:process {nick host hand chan chan1 what mask time reason} {
  2845. global botnick black
  2846. set char(p) [lindex $black(cmdchar) 0]
  2847. if {[string match -nocase "none" "$char(p)"]} {
  2848. set char(p) ""
  2849. }
  2850. switch -exact -- [string tolower $what] {
  2851. list {
  2852. if {[llength [ignorelist]] == "0"} { blacktools:tell $nick $host $hand $chan $chan1 ignore.3 none
  2853. return
  2854. }
  2855. foreach ig [ignorelist] {
  2856. set hostig [lindex $ig 0]
  2857. set byig [lindex $ig 4]
  2858. set time [lindex $ig 2]
  2859. set reasig [lindex $ig 1]
  2860. if {$time != "0"} {
  2861. set bytime [clock format $time -format %D-%H:%M:%S]
  2862. } else { set bytime "-"}
  2863. blacktools:tell $nick $host $hand $chan $chan1 ignore.4 "$hostig $byig $bytime $reasig"
  2864. }
  2865. }
  2866. add {
  2867. if {[isignore $mask]} {
  2868. blacktools:tell $nick $host $hand $chan $chan1 ignore.5 "$mask"
  2869. return
  2870. }
  2871. if {![regexp {^[0-9]} $time]} {
  2872. set time "60"
  2873. }
  2874. if {$reason == ""} { set reason "No Reason" }
  2875. newignore $mask $hand $reason $time
  2876. blacktools:tell $nick $host $hand $chan $chan1 ignore.6 "$mask $time $reason"
  2877. }
  2878. delete {
  2879. if {$mask == ""} { blacktools:tell $nick $host $hand $chan $chan1 ignore.7 none
  2880. return
  2881. }
  2882. if {[isignore $mask]} {
  2883. killignore $mask
  2884. } else { blacktools:tell $nick $host $hand $chan $chan1 ignore.8 "$mask"
  2885. return
  2886. }
  2887. blacktools:tell $nick $host $hand $chan $chan1 ignore.9 "$mask"
  2888. }
  2889. }
  2890. }
  2891. ################################# show ################################
  2892. proc showpublic {nick host hand chan arg} {
  2893. global black
  2894. set wich [lindex [split $arg] 0]
  2895. set type 0
  2896. set chan1 "$chan"
  2897. if {[regexp {^[&#]} $wich] && [matchattr $hand nm|- $chan]} {
  2898. set chan "$wich"
  2899. set wich [lindex [split $arg] 1]
  2900. }
  2901. show:process $nick $host $hand $chan $chan1 $wich $type
  2902. }
  2903. proc show:process {nick host hand chan chan1 wich type} {
  2904. global black botnick
  2905. set char(p) [lindex $black(cmdchar) 0]
  2906. if {[string match -nocase "none" "$char(p)"]} {
  2907. set char(p) ""
  2908. }
  2909. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  2910. return
  2911. }
  2912. if {[matchattr $hand nm|- $chan]} {
  2913. if {($wich == "") && ($type == "0")} {
  2914. blacktools:tell $nick $host $hand $chan $chan1 show.1 none
  2915. return
  2916. }
  2917. if {($wich == "") && ($type == "1")} {
  2918. blacktools:tell $nick $host $hand $chan $chan1 show.2 none
  2919. return
  2920. }
  2921. }
  2922. if {($wich == "") && ($type == "0")} {
  2923. blacktools:tell $nick $host $hand $chan $chan1 show.3 none
  2924. return
  2925. }
  2926. if {($wich == "") && ($type == "1")} {
  2927. blacktools:tell $nick $host $hand $chan $chan1 show.4 none
  2928. return
  2929. }
  2930. if {![validchan $chan]} {
  2931. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  2932. return
  2933. }
  2934. if {![onchan $botnick $chan]} {
  2935. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  2936. return
  2937. }
  2938. set why [catch {channel get $chan $wich} error]
  2939. if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 show.5 $wich
  2940. return
  2941. } else {
  2942. set replyinfo [channel get $chan $wich]
  2943. if {($replyinfo == "") || ($replyinfo == "0")} {
  2944. switch -exact -- [string tolower $wich] {
  2945. antipub-reason {
  2946. set getlang [string tolower [channel get $chan lang]]
  2947. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  2948. set replyinfo $black(say.$getlang.antipub.1)
  2949. }
  2950. antilongtextmax {
  2951. set replyinfo [channel get $chan antilongtextmax]
  2952. if {$replyinfo == "0"} {
  2953. set replyinfo "$black(longchar)"
  2954. }
  2955. }
  2956. joinflood {
  2957. set replyinfo [channel get $chan joinflood]
  2958. if {$replyinfo == ""} {
  2959. set replyinfo "4:5"
  2960. }
  2961. }
  2962. chanflood {
  2963. set replyinfo [channel get $chan chanflood]
  2964. if {$replyinfo == ""} {
  2965. set replyinfo "4:5"
  2966. }
  2967. }
  2968. idleopmax {
  2969. set replyinfo [channel get $chan idleopmax]
  2970. if {$replyinfo == "0"} {
  2971. set replyinfo "$black(idleopmax)"
  2972. }
  2973. }
  2974. idlevoicemax {
  2975. set replyinfo [channel get $chan idlevoicemax]
  2976. if {$replyinfo == "0"} {
  2977. set replyinfo "$black(idlevoicemax)"
  2978. }
  2979. }
  2980. private-bantime {
  2981. set replyinfo "$black(privatebantime)"
  2982. }
  2983. private-reason {
  2984. set getlang [string tolower [channel get $chan lang]]
  2985. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  2986. set replyinfo $black(say.$getlang.private.12)
  2987. }
  2988. antipub-bantime {
  2989. set replyinfo "$black(antipubbantime)"
  2990. }
  2991. antinotice-bantime {
  2992. set replyinfo "$black(antinoticebantime)"
  2993. }
  2994. antinotice-reason {
  2995. set getlang [string tolower [channel get $chan lang]]
  2996. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  2997. set replyinfo $black(say.$getlang.antinotice.1)
  2998. }
  2999. antictcp-reason {
  3000. set getlang [string tolower [channel get $chan lang]]
  3001. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3002. set replyinfo $black(say.$getlang.antictcp.1)
  3003. }
  3004. antictcp-bantime {
  3005. set replyinfo "$black(antictcpbantime)"
  3006. }
  3007. antibadword-bantime {
  3008. set replyinfo "$black(antibadwordbantime)"
  3009. }
  3010. antibadword-reason {
  3011. set getlang [string tolower [channel get $chan lang]]
  3012. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3013. set replyinfo $black(say.$getlang.antibadword.1)
  3014. }
  3015. antilongtext-reason {
  3016. set getlang [string tolower [channel get $chan lang]]
  3017. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3018. set replyinfo $black(say.$getlang.antilongtext.1)
  3019. }
  3020. antilongtext-bantime {
  3021. set replyinfo "$black(longbantime)"
  3022. }
  3023. antibadquitpart-reason {
  3024. set getlang [string tolower [channel get $chan lang]]
  3025. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3026. set replyinfo $black(say.$getlang.antibadquitpart.1)
  3027. }
  3028. antibadquitpart-bantime {
  3029. set replyinfo "$black(badquitparttime)"
  3030. }
  3031. antijoinpart-reason {
  3032. set getlang [string tolower [channel get $chan lang]]
  3033. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3034. set replyinfo $black(say.$getlang.antijoinpart.1)
  3035. }
  3036. antijoinpart-bantime {
  3037. set replyinfo "$black(joinpartbantime)"
  3038. }
  3039. antispam-bantime {
  3040. set replyinfo "$black(spamban)"
  3041. }
  3042. antispam-reason {
  3043. set getlang [string tolower [channel get $chan lang]]
  3044. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3045. set replyinfo $black(say.$getlang.antispam.1)
  3046. }
  3047. antirepeat-reason {
  3048. set getlang [string tolower [channel get $chan lang]]
  3049. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3050. set replyinfo $black(say.$getlang.antirepeat.1)
  3051. }
  3052. antirepeat-setting {
  3053. set replyinfo "$black(repeats)"
  3054. }
  3055. antirepeat-bantime {
  3056. set replyinfo "$black(antirepeatbantime)"
  3057. }
  3058. anticolor-reason {
  3059. set getlang [string tolower [channel get $chan lang]]
  3060. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3061. set replyinfo $black(say.$getlang.anticolor.1)
  3062. }
  3063. anticolor-bantime {
  3064. set replyinfo "$black(anticolorbantime)"
  3065. }
  3066. antibold-reason {
  3067. set getlang [string tolower [channel get $chan lang]]
  3068. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3069. set replyinfo $black(say.$getlang.antibold.1)
  3070. }
  3071. antibold-bantime {
  3072. set replyinfo "$black(antiboldbantime)"
  3073. }
  3074. antiunderline-reason {
  3075. set getlang [string tolower [channel get $chan lang]]
  3076. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3077. set replyinfo $black(say.$getlang.antiunderline.1)
  3078. }
  3079. antiunderline-bantime {
  3080. set replyinfo "$black(antiunderlinebantime)"
  3081. }
  3082. anticaps-reason {
  3083. set getlang [string tolower [channel get $chan lang]]
  3084. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3085. set replyinfo $black(say.$getlang.anticaps.1)
  3086. }
  3087. anticaps-bantime {
  3088. set replyinfo "$black(anticapsbantime)"
  3089. }
  3090. badfullname-reason {
  3091. set getlang [string tolower [channel get $chan lang]]
  3092. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3093. set replyinfo $black(say.$getlang.badfullname.1)
  3094. }
  3095. badfullname-bantime {
  3096. set replyinfo "$black(badfbantime)"
  3097. }
  3098. badnick-reason {
  3099. set getlang [string tolower [channel get $chan lang]]
  3100. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3101. set replyinfo $black(say.$getlang.badnick.1)
  3102. }
  3103. badnick-bantime {
  3104. set replyinfo "$black(badnickbantime)"
  3105. }
  3106. badident-reason {
  3107. set getlang [string tolower [channel get $chan lang]]
  3108. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3109. set replyinfo $black(say.$getlang.badident.1)
  3110. }
  3111. badident-bantime {
  3112. set replyinfo "$black(badidentbantime)"
  3113. }
  3114. antichanflood-reason {
  3115. set getlang [string tolower [channel get $chan lang]]
  3116. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3117. set replyinfo $black(say.$getlang.antichanflood.1)
  3118. }
  3119. antichanflood-bantime {
  3120. set replyinfo "$black(antifloodchanbantime)"
  3121. }
  3122. badchan-reason {
  3123. set getlang [string tolower [channel get $chan lang]]
  3124. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3125. set replyinfo $black(say.$getlang.badchan.15)
  3126. }
  3127. badchan-bantime {
  3128. set replyinfo "$black(badcbantime)"
  3129. }
  3130. count-message {
  3131. set getlang [string tolower [channel get $chan lang]]
  3132. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3133. set replyinfo $black(say.$getlang.count.9)
  3134. }
  3135. seen-method {
  3136. set getlang [string tolower [channel get $chan lang]]
  3137. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3138. set replyinfo "NOTICE"
  3139. }
  3140. gag-reason {
  3141. set getlang [string tolower [channel get $chan lang]]
  3142. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3143. set replyinfo $black(say.$getlang.gag.6)
  3144. }
  3145. gag-time {
  3146. set getlang [string tolower [channel get $chan lang]]
  3147. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3148. set replyinfo $black(gag_time)
  3149. }
  3150. dr-reason {
  3151. set getlang [string tolower [channel get $chan lang]]
  3152. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3153. set replyinfo $black(say.$getlang.dr.5)
  3154. }
  3155. dr-bantime {
  3156. set replyinfo "$black(drtime)"
  3157. }
  3158. bot-reason {
  3159. set getlang [string tolower [channel get $chan lang]]
  3160. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3161. set replyinfo $black(say.$getlang.bot.5)
  3162. }
  3163. bot-bantime {
  3164. set replyinfo "$black(bottime)"
  3165. }
  3166. n-reason {
  3167. set getlang [string tolower [channel get $chan lang]]
  3168. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3169. set replyinfo $black(say.$getlang.n.5)
  3170. }
  3171. n-bantime {
  3172. set replyinfo "$black(ntime)"
  3173. }
  3174. id-reason {
  3175. set getlang [string tolower [channel get $chan lang]]
  3176. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3177. set replyinfo $black(say.$getlang.id.5)
  3178. }
  3179. id-bantime {
  3180. set replyinfo "$black(idtime)"
  3181. }
  3182. w-reason {
  3183. set getlang [string tolower [channel get $chan lang]]
  3184. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3185. set replyinfo $black(say.$getlang.w.5)
  3186. }
  3187. spam-reason {
  3188. set getlang [string tolower [channel get $chan lang]]
  3189. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3190. set replyinfo $black(say.$getlang.spam.5)
  3191. }
  3192. spam-bantime {
  3193. set replyinfo "$black(spamtime)"
  3194. }
  3195. bw-reason {
  3196. set getlang [string tolower [channel get $chan lang]]
  3197. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3198. set replyinfo $black(say.$getlang.bw.5)
  3199. }
  3200. bw-bantime {
  3201. set replyinfo "$black(bwtime)"
  3202. }
  3203. k-reason {
  3204. set getlang [string tolower [channel get $chan lang]]
  3205. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3206. set replyinfo $black(say.$getlang.k.5)
  3207. }
  3208. check-message {
  3209. set getlang [string tolower [channel get $chan lang]]
  3210. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3211. set replyinfo $black(say.$getlang.check.3)
  3212. }
  3213. b-reason {
  3214. set getlang [string tolower [channel get $chan lang]]
  3215. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3216. set replyinfo $black(say.$getlang.b.9)
  3217. }
  3218. b-bantime {
  3219. set replyinfop "$black(btime)"
  3220. }
  3221. black-reason {
  3222. set getlang [string tolower [channel get $chan lang]]
  3223. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3224. set replyinfo $black(say.$getlang.black.5)
  3225. }
  3226. stick-reason {
  3227. set getlang [string tolower [channel get $chan lang]]
  3228. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3229. set replyinfo $black(say.$getlang.stick.5)
  3230. }
  3231. stick-bantime {
  3232. set replyinfo "$black(dfstickbantime)"
  3233. }
  3234. d-reason {
  3235. set getlang [string tolower [channel get $chan lang]]
  3236. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3237. set replyinfo $black(say.$getlang.d.5)
  3238. }
  3239. d-bantime {
  3240. set replyinfo "$black(dbtime)"
  3241. }
  3242. antispam-message {
  3243. set getlang [string tolower [channel get $chan lang]]
  3244. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3245. set replyinfo $black(say.$getlang.antispam.2)
  3246. }
  3247. clonescan-banreason {
  3248. set getlang [string tolower [channel get $chan lang]]
  3249. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3250. set replyinfo $black(say.$getlang.clonescan.5)
  3251. }
  3252. clonescan-bantime {
  3253. set replyinfo $black(clonebtime)
  3254. }
  3255. clonescan-maxclone {
  3256. set replyinfo $black(maxclone)
  3257. }
  3258. clonescan-action {
  3259. set replyinfo "message"
  3260. }
  3261. }
  3262. }
  3263. blacktools:tell $nick $host $hand $chan $chan1 show.6 "$wich $replyinfo"
  3264. }
  3265. }
  3266. ############################## silence ################################
  3267. proc silencepublic {nick host hand chan arg} {
  3268. global black
  3269. set value [lindex [split $arg] 0]
  3270. set char(p) [lindex $black(cmdchar) 0]
  3271. if {[string match -nocase "none" "$char(p)"]} {
  3272. set char(p) ""
  3273. }
  3274. set chan1 "$chan"
  3275. if {$value == ""} { blacktools:tell $nick $host $hand $chan $chan1 silence.1 none
  3276. return 0
  3277. }
  3278. silence:process $nick $host $hand $chan $chan1 $value
  3279. }
  3280. proc silence:process {nick host hand chan chan1 value} {
  3281. global botnick black
  3282. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  3283. return 0
  3284. }
  3285. if {([regexp -nocase -- {(#[0-9]+|on|off)} $value tmp silents]) && (![regexp -nocase -- {\S#} $value])} {
  3286. switch $silents {
  3287. on { blacktools:tell $nick $host $hand $chan $chan1 silence.3 none ; putquick "SILENCE +*!*@*"
  3288. }
  3289. off { blacktools:tell $nick $host $hand $chan $chan1 silence.4 none ; putquick "SILENCE -*!*@*"
  3290. }
  3291. }
  3292. }
  3293. }
  3294. ############################## msg ####################################
  3295. proc msgpublic {nick host hand chan arg} {
  3296. global black
  3297. set nicks [lindex [split $arg] 0]
  3298. set chan1 "$chan"
  3299. set char(p) [lindex $black(cmdchar) 0]
  3300. if {[string match -nocase "none" "$char(p)"]} {
  3301. set char(p) ""
  3302. }
  3303. set msg [join [lrange [split $arg] 1 end]]
  3304. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  3305. return 0
  3306. }
  3307. if {$nicks == ""} {blacktools:tell $nick $host $hand $chan $chan1 msg.1 none
  3308. return 0
  3309. }
  3310. if {[isbotnick $nicks]} {
  3311. return 0
  3312. }
  3313. putquick "PRIVMSG $nicks :$msg"
  3314. }
  3315. ############################### reset #################################
  3316. proc resetpublic {nick host hand chan arg} {
  3317. global black
  3318. set dece [lindex [split $arg] 0]
  3319. set type 0
  3320. set chan1 "$chan"
  3321. if {[regexp {^[&#]} $dece] && [matchattr $hand nm|- $chan]} {
  3322. set chan "$dece"
  3323. set dece [lindex [split $arg] 1]
  3324. }
  3325. reset:process $nick $host $hand $chan $chan1 $dece $type
  3326. }
  3327. proc reset:process {nick host hand chan chan1 dece type} {
  3328. global botnick black
  3329. set char(p) [lindex $black(cmdchar) 0]
  3330. if {[string match -nocase "none" "$char(p)"]} {
  3331. set char(p) ""
  3332. }
  3333. if {[matchattr $hand nm|- $chan]} {
  3334. if {($dece == "") && ($type == "0")} {
  3335. blacktools:tell $nick $host $hand $chan $chan1 reset.1 none
  3336. return 0
  3337. }
  3338. if {($dece == "") && ($type == "1")} {
  3339. blacktools:tell $nick $host $hand $chan $chan1 reset.2 none
  3340. return 0
  3341. }
  3342. }
  3343. if {($dece == "") && ($type == "0")} {
  3344. blacktools:tell $nick $host $hand $chan $chan1 reset.3 none
  3345. return 0
  3346. }
  3347. if {($dece == "") && ($type == "1")} {
  3348. blacktools:tell $nick $host $hand $chan $chan1 reset.4 none
  3349. return 0
  3350. }
  3351. if {![validchan $chan]} {
  3352. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  3353. return 0
  3354. }
  3355. if {![onchan $botnick $chan]} {
  3356. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  3357. return 0
  3358. }
  3359. if {[string match -nocase "all" "$dece"]} {
  3360. set emptyflag "antipub-reason antinotice-reason antictcp-reason antibadword-reason antilongtext-reason antijoinpart-reason antirepeat-reason antirepeat-setting antispam-reason anticolor-reason antibold-reason antiunderline-reason anticaps-reason badfullname-reason badnick-reason badident-reason antichanflood-reason chanflood joinflood private-reason dr-reason n-reason id-reason spam-reason w-reason bw-reason bot-reason badchan-reason count-message"
  3361. foreach eflag $emptyflag {
  3362. channel set $chan $eflag ""
  3363. }
  3364. set zeroflag "antinotice-bantime antipub-bantime antictcp-bantime antibadword-bantime antilongtext-bantime antijoinpart-bantime antispam-bantime idleopmax idlevoicemax antilongtextmax antirepeat-bantime anticolor-bantime antibold-bantime antiunderline-bantime anticaps-bantime badfullname-bantime badnick-bantime badident-bantime antichanflood-bantime private-bantime dr-bantime n-bantime id-bantime spam-bantime bw-bantime bot-bantime kickcount"
  3365. foreach oflag $zeroflag {
  3366. channel set $chan $oflag 0
  3367. }
  3368. blacktools:tell $nick $host $hand $chan $chan1 reset.5 none
  3369. return 0
  3370. }
  3371. set why [catch {channel set $chan $dece ""} error]
  3372. if {$why == "1"} { blacktools:tell $nick $host $hand $chan $chan1 reset.6 $dece
  3373. } else {
  3374. channel set $chan $dece ""
  3375. blacktools:tell $nick $host $hand $chan $chan1 reset.7 $dece
  3376. }
  3377. }
  3378. ################################### banlist ###################################
  3379. proc banlistpublic {nick host hand chan arg} {
  3380. global botnick black
  3381. set user [lindex [split $arg] 0]
  3382. set type 0
  3383. set chan1 "$chan"
  3384. if {[regexp {^[&#]} $user] && [matchattr $hand nm|- $chan]} {
  3385. set chan "$user"
  3386. set user [lindex [split $arg] 1]
  3387. }
  3388. banlist:process $nick $host $hand $chan $chan1 $user $type
  3389. }
  3390. proc banlist:process {nick host hand chan chan1 user type} {
  3391. global botnick black
  3392. set i 0
  3393. set char(p) [lindex $black(cmdchar) 0]
  3394. if {[string match -nocase "none" "$char(p)"]} {
  3395. set char(p) ""
  3396. }
  3397. if {[matchattr $hand nm|- $chan]} {
  3398. if {($user == "") && ($type == "0")} {
  3399. blacktools:tell $nick $host $hand $chan $chan1 banlist.1 none
  3400. blacktools:tell $nick $host $hand $chan $chan1 banlist.2 none
  3401. return
  3402. }
  3403. if {($user == "") && ($type == "1")} {
  3404. blacktools:tell $nick $host $hand $chan $chan1 banlist.3 none
  3405. blacktools:tell $nick $host $hand $chan $chan1 banlist.4 none
  3406. return
  3407. }
  3408. }
  3409. if {($user == "") && ($type == "0")} {
  3410. blacktools:tell $nick $host $hand $chan $chan1 banlist.5 none
  3411. return
  3412. }
  3413. if {($user == "") && ($type == "1")} {
  3414. blacktools:tell $nick $host $hand $chan $chan1 banlist.6 none
  3415. return
  3416. }
  3417. if {[matchattr $hand nm|- $chan] && [string match -nocase "global" $user]} {
  3418. foreach ban [banlist] {
  3419. set i [expr $i +1]
  3420. set expire [clock format [lindex $ban 2] -format %D-%H:%M:%S]
  3421. set create [clock format [lindex $ban 3] -format %D-%H:%M:%S]
  3422. set fban [lindex $ban 0]
  3423. set freason [lindex $ban 1]
  3424. set fbywho [lindex $ban 5]
  3425. if {[lindex $ban 2] == 0} {
  3426. set expire "Permanent"
  3427. }
  3428. blacktools:tell $nick $host $hand $chan $chan1 banlist.9 none
  3429. blacktools:tell $nick $host $hand $chan $chan1 banlist.10 "$fban $fbywho $create $expire $freason"
  3430. set foundban 1
  3431. }
  3432. if {![info exists foundban]} {
  3433. blacktools:tell $nick $host $hand $chan $chan1 banlist.7 none
  3434. } else { blacktools:tell $nick $host $hand $chan $chan1 banlist.8 none }
  3435. return
  3436. }
  3437. if {![validchan $chan]} {
  3438. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  3439. return
  3440. }
  3441. if {![onchan $botnick $chan]} {
  3442. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  3443. return
  3444. }
  3445. if {[onchan $user $chan] && ![validuser $user]} {
  3446. set user [nick2hand $user]
  3447. }
  3448. if {![validuser $user] && (![string equal -nocase "-all" $user])} {
  3449. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  3450. return
  3451. }
  3452. if {![matchattr $user nm|OASMN $chan] && (![string equal -nocase "-all" $user])} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  3453. return
  3454. }
  3455. foreach ban [banlist $chan] {
  3456. set own [lindex $ban 5]
  3457. if {[string match -nocase $own $user] || [string equal -nocase $user "-all"]} {
  3458. set i [expr $i +1]
  3459. set expire [clock format [lindex $ban 2] -format %D-%H:%M:%S]
  3460. set create [clock format [lindex $ban 3] -format %D-%H:%M:%S]
  3461. set fban [lindex $ban 0]
  3462. set freason [lindex $ban 1]
  3463. if {[lindex $ban 2] == 0} {
  3464. set expire "Permanent"
  3465. }
  3466. if {[string equal -nocase "-all" $user]} {
  3467. blacktools:tell $nick $host $hand $chan $chan1 banlist.13 $user
  3468. blacktools:tell $nick $host $hand $chan $chan1 banlist.10 "$fban $own $create $expire $freason"
  3469. } else {
  3470. blacktools:tell $nick $host $hand $chan $chan1 banlist.11 $user
  3471. blacktools:tell $nick $host $hand $chan $chan1 banlist.10 "$fban $own $create $expire $freason"
  3472. }
  3473. set foundban 1
  3474. }
  3475. }
  3476. if {![info exists foundban]} {
  3477. if {![string equal -nocase "-all" $user]} {
  3478. blacktools:tell $nick $host $hand $chan $chan1 banlist.11 $user
  3479. } else {
  3480. blacktools:tell $nick $host $hand $chan $chan1 banlist.13 none
  3481. }
  3482. blacktools:tell $nick $host $hand $chan $chan1 banlist.7 $user
  3483. } else {
  3484. blacktools:tell $nick $host $hand $chan $chan1 banlist.8 $user }
  3485. }
  3486. ############################## rehash #################################
  3487. proc rehashme {nick host hand arg} {
  3488. global black
  3489. blacktools:tell:prv $nick $host $hand rehash.1 none
  3490. rehash
  3491. }
  3492. ############################## VERSION ################################
  3493. proc blackreply {nick host hand dest key text} {
  3494. global ctcp-version
  3495. set {ctcp-version} "Using \002BlackTools 2.4\002 by \002BLaCkShaDoW\002"
  3496. }
  3497. ############################## restart ################################
  3498. proc restartme {nick host hand arg} {
  3499. global black
  3500. blacktools:tell:prv $nick $host $hand restart.1 none
  3501. utimer 3 [list restart ]
  3502. }
  3503. ############################### save #################################
  3504. proc saveme {nick host hand arg} {
  3505. global black
  3506. blacktools:tell:prv $nick $host $hand save.1 none
  3507. save
  3508. }
  3509. ############################### jump #################################
  3510. proc jumpme {nick host hand arg} {
  3511. global black
  3512. blacktools:tell:prv $nick $host $hand jump.1 none
  3513. utimer 3 [list jump]
  3514. }
  3515. ############################### die ###################################
  3516. proc dieme {nick host hand arg} {
  3517. global black
  3518. blacktools:tell:prv $nick $host $hand die.1 none
  3519. utimer 3 [list die "byeeee" ]
  3520. }
  3521. ############################## nick ###################################
  3522. proc nickpublic {altnick host hand arg} {
  3523. global nick black
  3524. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  3525. set newnick [lindex [split $arg] 0]
  3526. if {$newnick == ""} { blacktools:tell:prv $nick $host $hand nick.2 none
  3527. return 0
  3528. }
  3529. blacktools:tell:prv $nick $host $hand nick.1 "$newnick"
  3530. set nick $newnick
  3531. }
  3532. proc nick:process {who newnick host hand chan} {
  3533. global black nick
  3534. set chan1 "$chan"
  3535. if {$newnick == ""} {
  3536. blacktools:tell $who $host $hand $chan $chan1 nick.2 $newnick
  3537. return 0
  3538. }
  3539. blacktools:tell $who $host $hand $chan $chan1 nick.1 $newnick
  3540. set nick $newnick
  3541. }
  3542. ############################## addchan ################################
  3543. proc addchanpublic {nick host hand arg} {
  3544. global black
  3545. set chans [lindex [split $arg] 0]
  3546. set key [lindex [split $arg] 1]
  3547. if {$chans == ""} {blacktools:tell:prv $nick $host $hand addchan.1 none
  3548. return
  3549. }
  3550. if {![regexp {^[&#]} $chans]} {
  3551. blacktools:tell:prv $nick $host $hand gl.novalidchan none
  3552. return
  3553. }
  3554. if {[validchan $chans]} {
  3555. blacktools:tell:prv $nick $host $hand addchan.2 "$chans"
  3556. return
  3557. } else {
  3558. channel add $chans
  3559. addchan:stats $chans $hand $host
  3560. blacktools:tell:prv $nick $host $hand addchan.3 "$chans"
  3561. if {$key != ""} {
  3562. putquick "JOIN $chans :$key"
  3563. channel set $chans chanmode "+ntk $key"
  3564. }
  3565. }
  3566. }
  3567. proc addchan:stats {chan hand host} {
  3568. global black botnick username
  3569. set statsdir "scripts/BlackTools/FILES/$username.stats.txt"
  3570. set k 0
  3571. set found_it 0
  3572. set time [unixtime]
  3573. set file [open $statsdir "r"]
  3574. set addfile "$chan ADDED $hand $host $time 0"
  3575. set database [read -nonewline $file]
  3576. close $file
  3577. set data [split $database "\n"]
  3578. foreach line $data {
  3579. set k [expr $k +1]
  3580. set chanentry [lindex [split $line] 0]
  3581. set addtype [lindex [split $line] 1]
  3582. if {[string equal -nocase "REMOVED" "$addtype"] && [string match -nocase $chanentry $chan]} {
  3583. if {$line != ""} {
  3584. set found_it 1
  3585. set num [expr $k - 1]
  3586. set delete [lreplace $data $num $num]
  3587. set files [open $statsdir "w"]
  3588. puts $files [join $delete "\n"]
  3589. close $files
  3590. }
  3591. }
  3592. }
  3593. set file [open $statsdir "r"]
  3594. set data [read -nonewline $file]
  3595. close $file
  3596. if {$data == ""} {
  3597. set files [open $statsdir "w"]
  3598. close $files
  3599. }
  3600. set file [open $statsdir "a"]
  3601. puts $file "$addfile"
  3602. close $file
  3603. }
  3604. proc unsuspend:stats {chan hand host} {
  3605. global black botnick username
  3606. set statsdir "scripts/BlackTools/FILES/$username.stats.txt"
  3607. set k 0
  3608. set found_it 0
  3609. set time [unixtime]
  3610. set file [open $statsdir "r"]
  3611. set addfile "$chan ADDED $hand $host $time 0"
  3612. set database [read -nonewline $file]
  3613. close $file
  3614. set data [split $database "\n"]
  3615. foreach line $data {
  3616. set k [expr $k +1]
  3617. set chanentry [lindex [split $line] 0]
  3618. set addtype [lindex [split $line] 1]
  3619. if {[string equal -nocase "SUSPENDED" "$addtype"] && [string match -nocase $chanentry $chan]} {
  3620. set found_it 1
  3621. set added [lindex [split $line] 5]
  3622. set bywho [lindex [split $line] 6]
  3623. set byhost [lindex [split $line] 7]
  3624. set addfile "$chan ADDED $bywho $byhost $added 0"
  3625. if {$line != ""} {
  3626. set num [expr $k - 1]
  3627. set delete [lreplace $data $num $num]
  3628. set files [open $statsdir "w"]
  3629. puts $files [join $delete "\n"]
  3630. close $files
  3631. }
  3632. }
  3633. }
  3634. set file [open $statsdir "r"]
  3635. set data [read -nonewline $file]
  3636. close $file
  3637. if {$data == ""} {
  3638. set files [open $statsdir "w"]
  3639. close $files
  3640. }
  3641. set file [open $statsdir "a"]
  3642. puts $file "$addfile"
  3643. close $file
  3644. }
  3645. proc suspend:stats {chan hand host reason} {
  3646. global black username
  3647. set found_it 0
  3648. set statsdir "scripts/BlackTools/FILES/$username.stats.txt"
  3649. set k 0
  3650. set time [unixtime]
  3651. set file [open $statsdir "r"]
  3652. set database [read -nonewline $file]
  3653. close $file
  3654. set data [split $database "\n"]
  3655. set addfile "$chan SUSPENDED $hand $host $time 0 0 none none"
  3656. foreach line $data {
  3657. set k [expr $k +1]
  3658. set chanentry [lindex [split $line] 0]
  3659. set addtype [lindex [split $line] 1]
  3660. if {[string equal -nocase "ADDED" "$addtype"] && [string match -nocase $chanentry $chan]} {
  3661. set found_it 1
  3662. set added [lindex [split $line] 4]
  3663. set bywho [lindex [split $line] 2]
  3664. set byhost [lindex [split $line] 3]
  3665. set addfile "$chan SUSPENDED $hand $host $time $added $bywho $byhost $reason"
  3666. if {$line != ""} {
  3667. set num [expr $k - 1]
  3668. set delete [lreplace $data $num $num]
  3669. set files [open $statsdir "w"]
  3670. puts $files [join $delete "\n"]
  3671. close $files
  3672. }
  3673. }
  3674. }
  3675. set file [open $statsdir "r"]
  3676. set data [read -nonewline $file]
  3677. close $file
  3678. if {$data == ""} {
  3679. set files [open $statsdir "w"]
  3680. close $files
  3681. }
  3682. set file [open $statsdir "a"]
  3683. puts $file "$addfile"
  3684. close $file
  3685. }
  3686. proc delchan:stats {chan hand host reason} {
  3687. global black botnick username
  3688. set statsdir "scripts/BlackTools/FILES/$username.stats.txt"
  3689. set found_it 0
  3690. set k 0
  3691. set time [unixtime]
  3692. set file [open $statsdir "r"]
  3693. set database [read -nonewline $file]
  3694. close $file
  3695. set data [split $database "\n"]
  3696. set addfile "$chan REMOVED $hand $host $time 0 0 none none"
  3697. foreach line $data {
  3698. set k [expr $k +1]
  3699. set chanentry [lindex [split $line] 0]
  3700. set addtype [lindex [split $line] 1]
  3701. if {[string equal -nocase "REMOVED" "$addtype"] && [string match -nocase $chanentry $chan]} {
  3702. if {$line != ""} {
  3703. set found_it 1
  3704. set num [expr $k - 1]
  3705. set delete [lreplace $data $num $num]
  3706. set files [open $statsdir "w"]
  3707. puts $files [join $delete "\n"]
  3708. close $files
  3709. }
  3710. }
  3711. if {[string equal -nocase "SUSPENDED" "$addtype"] && [string match -nocase $chanentry $chan]} {
  3712. set found_it 1
  3713. set added [lindex [split $line] 5]
  3714. set bywho [lindex [split $line] 6]
  3715. set byhost [lindex [split $line] 7]
  3716. set addfile "$chan REMOVED $hand $host $time $added $bywho $byhost $reason"
  3717. if {$line != ""} {
  3718. set num [expr $k - 1]
  3719. set delete [lreplace $data $num $num]
  3720. set files [open $statsdir "w"]
  3721. puts $files [join $delete "\n"]
  3722. close $files
  3723. }
  3724. }
  3725. if {[string equal -nocase "ADDED" "$addtype"] && [string match -nocase $chanentry $chan]} {
  3726. set found_it 1
  3727. set added [lindex [split $line] 4]
  3728. set bywho [lindex [split $line] 2]
  3729. set byhost [lindex [split $line] 3]
  3730. set addfile "$chan REMOVED $hand $host $time $added $bywho $byhost $reason"
  3731. if {$line != ""} {
  3732. set num [expr $k - 1]
  3733. set delete [lreplace $data $num $num]
  3734. set files [open $statsdir "w"]
  3735. puts $files [join $delete "\n"]
  3736. close $files
  3737. }
  3738. }
  3739. if {($found_it == 0)} {
  3740. if {[string match -nocase $chanentry $chan]} {
  3741. if {$line != ""} {
  3742. set num [expr $k - 1]
  3743. set delete [lreplace $data $num $num]
  3744. set files [open $statsdir "w"]
  3745. puts $files [join $delete "\n"]
  3746. close $files
  3747. }
  3748. }
  3749. }
  3750. }
  3751. set file [open $statsdir "r"]
  3752. set data [read -nonewline $file]
  3753. close $file
  3754. if {$data == ""} {
  3755. set files [open $statsdir "w"]
  3756. close $files
  3757. }
  3758. set file [open $statsdir "a"]
  3759. puts $file "$addfile"
  3760. close $file
  3761. }
  3762. ############################## delchan ################################
  3763. proc delchanpublic {nick host hand arg} {
  3764. global black
  3765. set chans [lindex [split $arg] 0]
  3766. set reason [join [lrange [split $arg] 1 end]]
  3767. if {$chans == ""} {blacktools:tell:prv $nick $host $hand delchan.1 none
  3768. return
  3769. }
  3770. if {![regexp {^[&#]} $chans]} {
  3771. blacktools:tell:prv $nick $host $hand gl.novalidchan none
  3772. return
  3773. }
  3774. if {![validchan $chans]} { blacktools:tell:prv $nick $host $hand delchan.2 $chans
  3775. return
  3776. }
  3777. if {$reason == ""} {
  3778. blacktools:tell:prv $nick $host $hand delchan.1 none
  3779. return
  3780. }
  3781. if {!($black(homechan) == "") && ![string equal -nocase $black(homechan) "#no_home_chan"]} {
  3782. if {[string equal -nocase $chans $black(homechan)]} {
  3783. blacktools:tell:prv $nick $host $hand delchan.5 $chans
  3784. return
  3785. }
  3786. }
  3787. delchan:stats $chans $hand $host $reason
  3788. channel remove $chans
  3789. blacktools:tell:prv $nick $host $hand delchan.3 $chans
  3790. }
  3791. ############################## suspend ################################
  3792. proc suspendpublic {nick host hand arg} {
  3793. global black
  3794. set chans [lindex [split $arg] 0]
  3795. set reason [join [lrange [split $arg] 1 end]]
  3796. if {$chans == ""} {blacktools:tell:prv $nick $host $hand suspend.1 none
  3797. return
  3798. }
  3799. if {![regexp {^[&#]} $chans]} {
  3800. blacktools:tell:prv $nick $host $hand gl.novalidchan none
  3801. return
  3802. }
  3803. if {![validchan $chans]} { blacktools:tell:prv $nick $host $hand suspend.2 $chans
  3804. return
  3805. }
  3806. if {[channel get $chans inactive]} {
  3807. blacktools:tell:prv $nick $host $hand suspend.3 $chans
  3808. return
  3809. }
  3810. if {$reason == ""} {
  3811. blacktools:tell:prv $nick $host $hand suspend.1 $chans
  3812. return
  3813. }
  3814. channel set $chans +inactive
  3815. suspend:stats $chans $hand $host $reason
  3816. blacktools:tell:prv $nick $host $hand suspend.4 $chans
  3817. }
  3818. ############################# unsuspend ###############################
  3819. proc unsuspendpublic {nick host hand arg} {
  3820. global black
  3821. set chans [lindex [split $arg] 0]
  3822. if {$chans == ""} {blacktools:tell:prv $nick $host $hand unsuspend.1 none
  3823. return 0
  3824. }
  3825. if {![regexp {^[&#]} $chans]} {
  3826. blacktools:tell:prv $nick $host $hand gl.novalidchan none
  3827. return 0
  3828. }
  3829. if {![validchan $chans]} { blacktools:tell:prv $nick $host $hand unsuspend.2 $chans
  3830. return 0
  3831. }
  3832. if {![channel get $chans inactive]} {
  3833. blacktools:tell:prv $nick $host $hand unsuspend.3 $chans
  3834. return 0
  3835. }
  3836. unsuspend:stats $chans $hand $host
  3837. channel set $chans -inactive
  3838. blacktools:tell:prv $nick $host $hand unsuspend.4 $chans
  3839. }
  3840. ################################ op ###################################
  3841. proc oppublic {nick host hand arg} {
  3842. global black
  3843. set chan [lindex [split $arg] 0]
  3844. set nicks [lrange [split $arg] 1 end]
  3845. if {![validchan $chan]} {
  3846. blacktools:tell:prv $nick $host $hand gl.nocmem $chan
  3847. }
  3848. if {[matchattr $hand -|q $chan]} { blacktools:tell:prv $nick $host $hand gl.suspend none
  3849. return
  3850. }
  3851. if {$nicks == ""} { set nicks "$nick" }
  3852. if {[matchattr $hand nm|OASM $chan]} {
  3853. if {![regexp {^[&#]} $chan]} {
  3854. blacktools:tell:prv $nick $host $hand gl.novalidchan none
  3855. return
  3856. }
  3857. if {![botisop $chan]} { blacktools:tell:prv $nick $host $hand gl.noop none
  3858. return
  3859. }
  3860. if {![validchan $chan]} {
  3861. blacktools:tell:prv $nick $host $hand op.1 $chan
  3862. return
  3863. }
  3864. foreach nickz $nicks {
  3865. if {[isop $nickz $chan]} {
  3866. blacktools:tell:prv $nick $host $hand op.2 $nickz
  3867. return
  3868. }
  3869. putquick "MODE $chan +o $nickz"
  3870. }
  3871. }
  3872. }
  3873. ############################### deop ##################################
  3874. proc deoppublic {nick host hand arg} {
  3875. global black
  3876. set chan [lindex [split $arg] 0]
  3877. set nicks [lrange [split $arg] 1 end]
  3878. if {![validchan $chan]} {
  3879. blacktools:tell:prv $nick $host $hand gl.nocmem $chan
  3880. }
  3881. if {[matchattr $hand -|q $chan]} { blacktools:tell:prv $nick $host $hand gl.suspend none
  3882. return
  3883. }
  3884. if {$nicks == ""} { set nicks "$nick" }
  3885. if {[matchattr $hand nm|OASM $chan]} {
  3886. if {![regexp {^[&#]} $chan]} {
  3887. blacktools:tell:prv $nick $host $hand gl.novalidchan none
  3888. return
  3889. }
  3890. if {![botisop $chan]} { blacktools:tell:prv $nick $host $hand gl.noop none
  3891. return
  3892. }
  3893. if {![validchan $chan]} { blacktools:tell:prv $nick $host $hand deop.1 $chan
  3894. return
  3895. }
  3896. foreach nickz $nicks {
  3897. if {[onchan $nickz $chan]} {
  3898. putquick "MODE $chan -o $nickz"
  3899. }
  3900. }
  3901. }
  3902. }
  3903. ############################### voice #################################
  3904. proc voicepublic {nick host hand arg} {
  3905. global black
  3906. set chan [lindex [split $arg] 0]
  3907. set nicks [lrange [split $arg] 1 end]
  3908. if {![validchan $chan]} {
  3909. blacktools:tell:prv $nick $host $hand gl.nocmem $chan
  3910. }
  3911. if {[matchattr $hand -|q $chan]} { blacktools:tell:prv $nick $host $hand gl.suspend none
  3912. return
  3913. }
  3914. if {$nicks == ""} { set nicks "$nick" }
  3915. if {[matchattr $hand nm|OVASM $chan]} {
  3916. if {![regexp {^[&#]} $chan]} {
  3917. blacktools:tell:prv $nick $host $hand gl.novalidchan none
  3918. return
  3919. }
  3920. if {![botisop $chan]} { blacktools:tell:prv $nick $host $hand gl.noop none
  3921. return
  3922. }
  3923. if {![validchan $chan]} { blacktools:tell:prv $nick $host $hand voice.1 $chan
  3924. return
  3925. }
  3926. foreach nickz $nicks {
  3927. if {[onchan $nickz $chan]} {
  3928. if {[isvoice $nickz $chan]} {
  3929. blacktools:tell:prv $nick $host $hand voice.2 $nickz
  3930. return
  3931. }
  3932. putquick "MODE $chan +v $nickz"
  3933. }
  3934. }
  3935. }
  3936. }
  3937. ############################## devoice ################################
  3938. proc devoicepublic {nick host hand arg} {
  3939. global black
  3940. set chan [lindex [split $arg] 0]
  3941. set nicks [lrange [split $arg] 1 end]
  3942. if {![validchan $chan]} {
  3943. blacktools:tell:prv $nick $host $hand gl.nocmem $chan
  3944. }
  3945. if {[matchattr $hand -|q $chan]} { blacktools:tell:prv $nick $host $hand gl.suspend none
  3946. return
  3947. }
  3948. if {$nicks == ""} { set nicks "$nick" }
  3949. if {[matchattr $hand nm|OASM $chan]} {
  3950. if {![regexp {^[&#]} $chan]} {
  3951. blacktools:tell:prv $nick $host $hand gl.novalidchan none
  3952. return
  3953. }
  3954. if {![botisop $chan]} { blacktools:tell:prv $nick $host $hand gl.noop none
  3955. return
  3956. }
  3957. if {![validchan $chan]} { blacktools:tell:prv $nick $host $hand devoice.1 $chan
  3958. return 0
  3959. }
  3960. foreach nickz $nicks {
  3961. if {[onchan $nickz $chan]} {
  3962. putquick "MODE $chan -v $nickz"
  3963. }
  3964. }
  3965. }
  3966. }
  3967. ############################## invite #################################
  3968. proc invitepublic {nick host hand arg} {
  3969. global black
  3970. set chan [lindex [split $arg] 0]
  3971. set replace(%chan%) $chan
  3972. if {![validchan $chan]} {
  3973. blacktools:tell:prv $nick $host $hand gl.nocmem $chan
  3974. }
  3975. if {[matchattr $hand -|q $chan]} { blacktools:tell:prv $nick $host $hand gl.suspend none
  3976. return
  3977. }
  3978. if {[matchattr $hand nm|OASM $chan]} {
  3979. if {$chan == ""} { blacktools:tell:prv $nick $host $hand invite.1 none
  3980. return
  3981. }
  3982. putquick "INVITE $nick $chan"
  3983. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  3984. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  3985. set getmsg $black(say.$getlang.invite.2)
  3986. if {[info exists black(say.$getlang.invite.2)]} {
  3987. set getmsg [string map [array get replace] $getmsg]
  3988. putquick "PRIVMSG $nick :$getmsg"
  3989. }
  3990. }
  3991. }
  3992. ##############################add ######################################
  3993. proc strip:all {str} {
  3994. regsub -all -- {\003([0-9]{1,2}(,[0-9]{1,2})?)?|\017|\037|\002|\026|\006|\007} $str "" str
  3995. return $str
  3996. }
  3997. proc check:handle {user nick host hand chan chan1} {
  3998. global black
  3999. set last_user $user
  4000. if {[validuser $user]} {
  4001. return $user
  4002. }
  4003. set user [string range $user 0 31]
  4004. if {[validuser $user]} {
  4005. blacktools:tell $nick $host $hand $chan $chan1 add.17 "$last_user $user"
  4006. return $user
  4007. }
  4008. set user [string range $user 0 11]
  4009. if {[validuser $user]} {
  4010. blacktools:tell $nick $host $hand $chan $chan1 add.17 "$last_user $user"
  4011. return $user
  4012. }
  4013. set user [string range $user 0 8]
  4014. if {[validuser $user]} {
  4015. blacktools:tell $nick $host $hand $chan $chan1 add.17 "$last_user $user"
  4016. return $user
  4017. }
  4018. }
  4019. proc add:process {args time level hand host chan chan1 nick type} {
  4020. global black botnick
  4021. set char(p) [lindex $black(cmdchar) 0]
  4022. if {[string match -nocase "none" "$char(p)"]} {
  4023. set char(p) ""
  4024. }
  4025. set flags "nm|NMOSAV"
  4026. if {[matchattr $hand nm|- $chan]} {
  4027. if {($level == "") && ($type == "0")} {
  4028. blacktools:tell $nick $host $hand $chan $chan1 add.1 none
  4029. return
  4030. }
  4031. if {($level == "") && ($type == "1")} {
  4032. blacktools:tell $nick $host $hand $chan $chan1 add.2 none
  4033. return
  4034. }
  4035. }
  4036. if {($level == "") && ($type == "0")} {
  4037. blacktools:tell $nick $host $hand $chan $chan1 add.3 none
  4038. return
  4039. }
  4040. if {($level == "") && ($type == "1")} {
  4041. blacktools:tell $nick $host $hand $chan $chan1 add.4 none
  4042. return
  4043. }
  4044. if {![validchan $chan]} {
  4045. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  4046. return
  4047. }
  4048. if {![onchan $botnick $chan]} {
  4049. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  4050. return
  4051. }
  4052. foreach user $args {
  4053. if {$user != ""} {
  4054. set user [strip:all $user]
  4055. set replace(%user%) $user
  4056. set uhost [string map [array get replace] $black(hostadd)]
  4057. if {[userlist] != ""} {
  4058. foreach usr [userlist] {
  4059. set hst [getuser $usr hosts]
  4060. foreach hhost $hst {
  4061. if {[string match -nocase $hhost $uhost] && (![string match -nocase $usr $user])} {
  4062. blacktools:tell $nick $host $hand $chan $chan1 add.5 $usr
  4063. set user $usr
  4064. }
  4065. }
  4066. }
  4067. }
  4068. if {[matchattr $hand -|A $chan] && ($level == "manager")} {
  4069. blacktools:tell $nick $host $hand $chan $chan1 add.6 none
  4070. return
  4071. }
  4072. if {[matchattr $hand -|A $chan] && ($level == "admin")} {
  4073. blacktools:tell $nick $host $hand $chan $chan1 add.7 none
  4074. return
  4075. }
  4076. if {[matchattr $hand -|M $chan] && ($level == "manager")} {
  4077. blacktools:tell $nick $host $hand $chan $chan1 add.8 none
  4078. return
  4079. }
  4080. if {([regexp -nocase -- {(#[0-9]+|owner|manager|admin|senior|op|voice|protect)} $level tmp access]) && (![regexp -nocase -- {\S#} $level])} {
  4081. switch $access {
  4082. manager {
  4083. set flags "-|olM"
  4084. if {[validuser $user]} {
  4085. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  4086. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4087. return
  4088. }
  4089. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  4090. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4091. return
  4092. }
  4093. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  4094. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4095. return
  4096. }
  4097. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4098. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4099. return
  4100. }
  4101. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  4102. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4103. return
  4104. }
  4105. chattr $user -|-qolSOHAMV $chan
  4106. chattr $user $flags $chan
  4107. setuser $user XTRA LASTMODIFBY $hand
  4108. setuser $user XTRA LASTMODIFDATE $time
  4109. blacktools:tell $nick $host $hand $chan $chan1 add.9 $user
  4110. } else {
  4111. adduser $user $uhost
  4112. set user [check:handle $user $nick $host $hand $chan $chan1]
  4113. chattr $user -|-SOHAMV $chan
  4114. chattr $user $flags $chan
  4115. setuser $user XTRA LASTMODIFBY $hand
  4116. setuser $user XTRA LASTMODIFDATE $time
  4117. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4118. blacktools:tell $nick $host $hand $chan $chan1 add.9 $user
  4119. }
  4120. }
  4121. admin {
  4122. set flags "-|olA"
  4123. if {[validuser $user]} {
  4124. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  4125. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4126. return
  4127. }
  4128. if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
  4129. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4130. return
  4131. }
  4132. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  4133. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4134. return
  4135. }
  4136. if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
  4137. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4138. return
  4139. }
  4140. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4141. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4142. return
  4143. }
  4144. if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
  4145. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4146. return
  4147. }
  4148. if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
  4149. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4150. return
  4151. }
  4152. if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
  4153. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4154. return
  4155. }
  4156. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  4157. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4158. return
  4159. }
  4160. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  4161. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4162. return
  4163. }
  4164. chattr $user -|-qolSHOAMV $chan
  4165. chattr $user $flags $chan
  4166. setuser $user XTRA LASTMODIFBY $hand
  4167. setuser $user XTRA LASTMODIFDATE $time
  4168. blacktools:tell $nick $host $hand $chan $chan1 add.11 $user
  4169. } else {
  4170. adduser $user $uhost
  4171. set user [check:handle $user $nick $host $hand $chan $chan1]
  4172. chattr $user -|-qolSHOAMV $chan
  4173. chattr $user $flags $chan
  4174. setuser $user XTRA LASTMODIFBY $hand
  4175. setuser $user XTRA LASTMODIFDATE $time
  4176. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4177. blacktools:tell $nick $host $hand $chan $chan1 add.11 $user
  4178. }
  4179. }
  4180. senior {
  4181. set flags "-|olS"
  4182. if {[validuser $user]} {
  4183. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  4184. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4185. return
  4186. }
  4187. if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
  4188. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4189. return
  4190. }
  4191. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  4192. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4193. return
  4194. }
  4195. if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
  4196. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4197. return
  4198. }
  4199. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4200. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4201. return
  4202. }
  4203. if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
  4204. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4205. return
  4206. }
  4207. if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
  4208. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4209. return
  4210. }
  4211. if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
  4212. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4213. return
  4214. }
  4215. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  4216. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4217. return
  4218. }
  4219. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  4220. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4221. return
  4222. }
  4223. chattr $user -|-qolSHOAMV $chan
  4224. chattr $user $flags $chan
  4225. setuser $user XTRA LASTMODIFBY $hand
  4226. setuser $user XTRA LASTMODIFDATE $time
  4227. blacktools:tell $nick $host $hand $chan $chan1 add.12 $user
  4228. } else {
  4229. adduser $user $uhost
  4230. set user [check:handle $user $nick $host $hand $chan $chan1]
  4231. chattr $user -|-qolSHOAMV $chan
  4232. chattr $user $flags $chan
  4233. setuser $user XTRA LASTMODIFBY $hand
  4234. setuser $user XTRA LASTMODIFDATE $time
  4235. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4236. blacktools:tell $nick $host $hand $chan $chan1 add.12 $user
  4237. }
  4238. }
  4239. owner {
  4240. set flags "m|-"
  4241. if {[matchattr $hand n|- $chan]} {
  4242. if {[validuser $user]} {
  4243. chattr $user -|-qolSHOAMV $chan
  4244. chattr $user $flags
  4245. setuser $user XTRA LASTMODIFBY $hand
  4246. setuser $user XTRA LASTMODIFDATE $time
  4247. blacktools:tell $nick $host $hand $chan $chan1 add.16 $user
  4248. } else {
  4249. adduser $user $uhost
  4250. set user [check:handle $user $nick $host $hand $chan $chan1]
  4251. chattr $user -|-qolSHOAMV $chan
  4252. chattr $user $flags
  4253. setuser $user XTRA LASTMODIFBY $hand
  4254. setuser $user XTRA LASTMODIFDATE $time
  4255. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4256. blacktools:tell $nick $host $hand $chan $chan1 add.16 $user
  4257. }
  4258. }
  4259. }
  4260. op {
  4261. set flags "-|olO"
  4262. if {[validuser $user]} {
  4263. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  4264. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4265. return
  4266. }
  4267. if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
  4268. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4269. return
  4270. }
  4271. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  4272. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4273. return
  4274. }
  4275. if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
  4276. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4277. return
  4278. }
  4279. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4280. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4281. return
  4282. }
  4283. if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
  4284. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4285. return
  4286. }
  4287. if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
  4288. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4289. return
  4290. }
  4291. if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
  4292. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4293. return
  4294. }
  4295. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  4296. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4297. return
  4298. }
  4299. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  4300. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4301. return
  4302. }
  4303. chattr $user -|-qolSHOAMV $chan
  4304. chattr $user $flags $chan
  4305. setuser $user XTRA LASTMODIFBY $hand
  4306. setuser $user XTRA LASTMODIFDATE $time
  4307. blacktools:tell $nick $host $hand $chan $chan1 add.13 $user
  4308. } else {
  4309. adduser $user $uhost
  4310. set user [check:handle $user $nick $host $hand $chan $chan1]
  4311. chattr $user -|-qolSHOAMV $chan
  4312. chattr $user $flags $chan
  4313. setuser $user XTRA LASTMODIFBY $hand
  4314. setuser $user XTRA LASTMODIFDATE $time
  4315. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4316. blacktools:tell $nick $host $hand $chan $chan1 add.13 $user
  4317. }
  4318. }
  4319. protect {
  4320. set flags "-|H"
  4321. if {[validuser $user]} {
  4322. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  4323. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4324. return
  4325. }
  4326. if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
  4327. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4328. return
  4329. }
  4330. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  4331. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4332. return
  4333. }
  4334. if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
  4335. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4336. return
  4337. }
  4338. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4339. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4340. return
  4341. }
  4342. if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
  4343. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4344. return
  4345. }
  4346. if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
  4347. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4348. return
  4349. }
  4350. if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
  4351. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4352. return
  4353. }
  4354. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  4355. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4356. return
  4357. }
  4358. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  4359. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4360. return
  4361. }
  4362. chattr $user -|-qHolSOAMV $chan
  4363. chattr $user $flags $chan
  4364. setuser $user XTRA LASTMODIFBY $hand
  4365. setuser $user XTRA LASTMODIFDATE $time
  4366. blacktools:tell $nick $host $hand $chan $chan1 add.15 $user
  4367. } else {
  4368. adduser $user $uhost
  4369. set user [check:handle $user $nick $host $hand $chan $chan1]
  4370. chattr $user -|-qolHSOAMV $chan
  4371. chattr $user $flags $chan
  4372. setuser $user XTRA LASTMODIFBY $hand
  4373. setuser $user XTRA LASTMODIFDATE $time
  4374. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4375. blacktools:tell $nick $host $hand $chan $chan1 add.15 $user
  4376. }
  4377. }
  4378. voice {
  4379. set flags "-|olV"
  4380. if {[validuser $user]} {
  4381. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  4382. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4383. return
  4384. }
  4385. if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
  4386. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4387. return
  4388. }
  4389. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  4390. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4391. return
  4392. }
  4393. if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
  4394. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4395. return
  4396. }
  4397. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4398. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4399. return
  4400. }
  4401. if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
  4402. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4403. return
  4404. }
  4405. if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
  4406. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4407. return
  4408. }
  4409. if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
  4410. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4411. return
  4412. }
  4413. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  4414. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4415. return
  4416. }
  4417. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  4418. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4419. return
  4420. }
  4421. chattr $user -|-qolSHOAMV $chan
  4422. chattr $user $flags $chan
  4423. setuser $user XTRA LASTMODIFBY $hand
  4424. setuser $user XTRA LASTMODIFDATE $time
  4425. blacktools:tell $nick $host $hand $chan $chan1 add.14 $user
  4426. } else {
  4427. adduser $user $uhost
  4428. set user [check:handle $user $nick $host $hand $chan $chan1]
  4429. chattr $user -|-qolSHOAMV $chan
  4430. chattr $user $flags $chan
  4431. setuser $user XTRA LASTMODIFBY $hand
  4432. setuser $user XTRA LASTMODIFDATE $time
  4433. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4434. blacktools:tell $nick $host $hand $chan $chan1 add.14 $user
  4435. }
  4436. }
  4437. }
  4438. }
  4439. }
  4440. }
  4441. }
  4442. ########################## adduser ################################
  4443. proc adduserpublic {nick host hand chan arg} {
  4444. global black
  4445. set level [lindex [split $arg] 0]
  4446. set args [lrange [split $arg] 1 end]
  4447. set c [lindex [split $arg] 1]
  4448. set type 0
  4449. set chan1 "$chan"
  4450. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  4451. set chan "$c"
  4452. set args [lrange [split $arg] 2 end]
  4453. }
  4454. adduser:process $nick $host $hand $chan $chan1 $args $level $type
  4455. }
  4456. proc adduser:process {nick host hand chan chan1 args level type} {
  4457. global black botnick
  4458. set char(p) [lindex $black(cmdchar) 0]
  4459. set args [join $args]
  4460. if {[string match -nocase "none" "$char(p)"]} {
  4461. set char(p) ""
  4462. }
  4463. set time [ctime [unixtime]]
  4464. set flags "nm|NMOSVA"
  4465. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  4466. return
  4467. }
  4468. if {[matchattr $hand nm|- $chan]} {
  4469. if {($level == "") && ($type == "0")} {
  4470. blacktools:tell $nick $host $hand $chan $chan1 adduser.1 none
  4471. return
  4472. }
  4473. if {($level == "") && ($type == "1")} {
  4474. blacktools:tell $nick $host $hand $chan $chan1 adduser.2 none
  4475. return
  4476. }
  4477. }
  4478. if {($level == "") && ($type == "0")} {
  4479. blacktools:tell $nick $host $hand $chan $chan1 adduser.3 none
  4480. return
  4481. }
  4482. if {($level == "") && ($type == "1")} {
  4483. blacktools:tell $nick $host $hand $chan $chan1 adduser.4 none
  4484. return
  4485. }
  4486. if {![validchan $chan]} {
  4487. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  4488. return
  4489. }
  4490. if {![onchan $botnick $chan]} {
  4491. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  4492. return
  4493. }
  4494. foreach user $args {
  4495. if {$user != ""} {
  4496. set user [strip:all $user]
  4497. if {![onchan $user $chan]} {
  4498. blacktools:tell $nick $host $hand $chan $chan1 gl.usernotonchan $user
  4499. return
  4500. }
  4501. set handle [nick2hand $user]
  4502. set hosts [getchanhost $user $chan]
  4503. set uhost "*!*@[lindex [split $hosts @] 1]"
  4504. if {[userlist] != ""} {
  4505. foreach usr [userlist] {
  4506. set hst [getuser $usr hosts]
  4507. foreach hhost $hst {
  4508. if {[string match -nocase $hhost $uhost] && (![string match -nocase $usr $user])} {
  4509. blacktools:tell $nick $host $hand $chan $chan1 add.5 "\002$usr\002"
  4510. set user $usr
  4511. }
  4512. }
  4513. }
  4514. }
  4515. if {[matchattr $hand -|A $chan] && ($level == "manager")} {
  4516. blacktools:tell $nick $host $hand $chan $chan1 add.6 none
  4517. return
  4518. }
  4519. if {[matchattr $hand -|A $chan] && ($level == "admin")} {
  4520. blacktools:tell $nick $host $hand $chan $chan1 add.7 none
  4521. return
  4522. }
  4523. if {[matchattr $hand -|M $chan] && ($level == "manager")} {
  4524. blacktools:tell $nick $host $hand $chan $chan1 add.8 none
  4525. return
  4526. }
  4527. if {([regexp -nocase -- {(#[0-9]+|owner|manager|admin|senior|op|voice|protect)} $level tmp access]) && (![regexp -nocase -- {\S#} $level])} {
  4528. switch $access {
  4529. manager {
  4530. set flags "-|olM"
  4531. if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4532. return
  4533. }
  4534. if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4535. return
  4536. }
  4537. if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
  4538. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4539. return
  4540. }
  4541. if {[matchattr $handle m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4542. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4543. return
  4544. }
  4545. if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
  4546. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4547. return
  4548. }
  4549. if {[validuser $user]} {
  4550. chattr $user -|-qolSHOAMV $chan
  4551. chattr $user $flags $chan
  4552. setuser $user XTRA LASTMODIFBY $hand
  4553. setuser $user XTRA LASTMODIFDATE $time
  4554. blacktools:tell $nick $host $hand $chan $chan1 add.9 $user
  4555. } else {
  4556. adduser $user $uhost
  4557. set user [check:handle $user $nick $host $hand $chan $chan1]
  4558. chattr $user -|-SHOAMV $chan
  4559. chattr $user $flags $chan
  4560. setuser $user XTRA LASTMODIFBY $hand
  4561. setuser $user XTRA LASTMODIFDATE $time
  4562. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4563. blacktools:tell $nick $host $hand $chan $chan1 add.9 $user
  4564. }
  4565. }
  4566. admin {
  4567. set flags "-|olA"
  4568. if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} {
  4569. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4570. return
  4571. }
  4572. if {[matchattr $handle -|M $chan] && [matchattr $hand -|A $chan]} {
  4573. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4574. return 0
  4575. }
  4576. if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} {
  4577. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4578. return
  4579. }
  4580. if {[matchattr $handle m|- $chan] && [matchattr $hand -|A $chan]} {
  4581. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4582. return
  4583. }
  4584. if {[matchattr $handle m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4585. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4586. return
  4587. }
  4588. if {[matchattr $handle -|A $chan] && [matchattr $hand -|A $chan]} {
  4589. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4590. return
  4591. }
  4592. if {[matchattr $handle n|- $chan] && [matchattr $hand -|A $chan]} {
  4593. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4594. return
  4595. }
  4596. if {[matchattr $handle n|- $chan] && [matchattr $hand -|M $chan]} {
  4597. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4598. return
  4599. }
  4600. if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
  4601. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4602. return
  4603. }
  4604. if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
  4605. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4606. return
  4607. }
  4608. if {[validuser $user]} {
  4609. chattr $user -|-qolSHOAMV $chan
  4610. chattr $user $flags $chan
  4611. setuser $user XTRA LASTMODIFBY $hand
  4612. setuser $user XTRA LASTMODIFDATE $time
  4613. blacktools:tell $nick $host $hand $chan $chan1 add.11 $user
  4614. } else {
  4615. adduser $user $uhost
  4616. set user [check:handle $user $nick $host $hand $chan $chan1]
  4617. chattr $user -|-qolSHOAMV $chan
  4618. chattr $user $flags $chan
  4619. setuser $user XTRA LASTMODIFBY $hand
  4620. setuser $user XTRA LASTMODIFDATE $time
  4621. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4622. blacktools:tell $nick $host $hand $chan $chan1 add.11 $user
  4623. }
  4624. }
  4625. senior {
  4626. set flags "-|olS"
  4627. if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} {
  4628. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4629. return
  4630. }
  4631. if {[matchattr $handle -|M $chan] && [matchattr $hand -|A $chan]} {
  4632. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4633. return
  4634. }
  4635. if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} {
  4636. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4637. return
  4638. }
  4639. if {[matchattr $handle m|- $chan] && [matchattr $hand -|A $chan]} {
  4640. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4641. return
  4642. }
  4643. if {[matchattr $handle m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4644. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4645. return
  4646. }
  4647. if {[matchattr $handle -|A $chan] && [matchattr $hand -|A $chan]} {
  4648. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4649. return 0
  4650. }
  4651. if {[matchattr $handle n|- $chan] && [matchattr $hand -|A $chan]} {
  4652. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4653. return
  4654. }
  4655. if {[matchattr $handle n|- $chan] && [matchattr $hand -|M $chan]} {
  4656. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4657. return
  4658. }
  4659. if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
  4660. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4661. return
  4662. }
  4663. if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
  4664. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4665. return
  4666. }
  4667. if {[validuser $user]} {
  4668. chattr $user -|-qolSHOAMV $chan
  4669. chattr $user $flags $chan
  4670. setuser $user XTRA LASTMODIFBY $hand
  4671. setuser $user XTRA LASTMODIFDATE $time
  4672. blacktools:tell $nick $host $hand $chan $chan1 add.12 $user
  4673. } else {
  4674. adduser $user $uhost
  4675. set user [check:handle $user $nick $host $hand $chan $chan1]
  4676. chattr $user -|-qolSHOAMV $chan
  4677. chattr $user $flags $chan
  4678. setuser $user XTRA LASTMODIFBY $hand
  4679. setuser $user XTRA LASTMODIFDATE $time
  4680. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4681. blacktools:tell $nick $host $hand $chan $chan1 add.12 $user
  4682. }
  4683. }
  4684. owner {
  4685. if {[matchattr $hand n|- $chan]} {
  4686. set flags "m|-"
  4687. if {[validuser $user]} {
  4688. chattr $user -|-qolSHOAMV $chan
  4689. chattr $user $flags
  4690. setuser $user XTRA LASTMODIFBY $hand
  4691. setuser $user XTRA LASTMODIFDATE $time
  4692. blacktools:tell $nick $host $hand $chan $chan1 add.16 $user
  4693. } else {
  4694. adduser $user $uhost
  4695. set user [check:handle $user $nick $host $hand $chan $chan1]
  4696. chattr $user -|-qolSHOAMV $chan
  4697. chattr $user $flags
  4698. setuser $user XTRA LASTMODIFBY $hand
  4699. setuser $user XTRA LASTMODIFDATE $time
  4700. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4701. blacktools:tell $nick $host $hand $chan $chan1 add.16 $user
  4702. }
  4703. }
  4704. }
  4705. op {
  4706. set flags "-|olO"
  4707. if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} {
  4708. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4709. return
  4710. }
  4711. if {[matchattr $handle -|M $chan] && [matchattr $hand -|A $chan]} {
  4712. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4713. return
  4714. }
  4715. if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} {
  4716. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4717. return
  4718. }
  4719. if {[matchattr $handle m|- $chan] && [matchattr $hand -|A $chan]} {
  4720. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4721. return
  4722. }
  4723. if {[matchattr $handle m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4724. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4725. return
  4726. }
  4727. if {[matchattr $handle -|A $chan] && [matchattr $hand -|A $chan]} {
  4728. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4729. return
  4730. }
  4731. if {[matchattr $handle n|- $chan] && [matchattr $hand -|A $chan]} {
  4732. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4733. return
  4734. }
  4735. if {[matchattr $handle n|- $chan] && [matchattr $hand -|M $chan]} {
  4736. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4737. return
  4738. }
  4739. if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
  4740. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4741. return
  4742. }
  4743. if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
  4744. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4745. return
  4746. }
  4747. if {[validuser $user]} {
  4748. chattr $user -|-qolSHOAMV $chan
  4749. chattr $user $flags $chan
  4750. setuser $user XTRA LASTMODIFBY $hand
  4751. setuser $user XTRA LASTMODIFDATE $time
  4752. blacktools:tell $nick $host $hand $chan $chan1 add.13 $user
  4753. } else {
  4754. adduser $user $uhost
  4755. set user [check:handle $user $nick $host $hand $chan $chan1]
  4756. chattr $user -|-qolSHOAMV $chan
  4757. chattr $user $flags $chan
  4758. setuser $user XTRA LASTMODIFBY $hand
  4759. setuser $user XTRA LASTMODIFDATE $time
  4760. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4761. blacktools:tell $nick $host $hand $chan $chan1 add.13 $user
  4762. }
  4763. }
  4764. protect {
  4765. set flags "-|H"
  4766. if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} {
  4767. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4768. return
  4769. }
  4770. if {[matchattr $handle -|M $chan] && [matchattr $hand -|A $chan]} {
  4771. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4772. return
  4773. }
  4774. if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} {
  4775. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4776. return
  4777. }
  4778. if {[matchattr $handle m|- $chan] && [matchattr $hand -|A $chan]} {
  4779. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4780. return
  4781. }
  4782. if {[matchattr $handle m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4783. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4784. return
  4785. }
  4786. if {[matchattr $handle -|A $chan] && [matchattr $hand -|A $chan]} {
  4787. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4788. return
  4789. }
  4790. if {[matchattr $handle n|- $chan] && [matchattr $hand -|A $chan]} {
  4791. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4792. return
  4793. }
  4794. if {[matchattr $handle n|- $chan] && [matchattr $hand -|M $chan]} {
  4795. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4796. return
  4797. }
  4798. if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
  4799. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4800. return
  4801. }
  4802. if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
  4803. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4804. return
  4805. }
  4806. if {[validuser $user]} {
  4807. chattr $user -|-qolHSOAMV $chan
  4808. chattr $user $flags $chan
  4809. setuser $user XTRA LASTMODIFBY $hand
  4810. setuser $user XTRA LASTMODIFDATE $time
  4811. blacktools:tell $nick $host $hand $chan $chan1 add.15 $user
  4812. } else {
  4813. adduser $user $uhost
  4814. set user [check:handle $user $nick $host $hand $chan $chan1]
  4815. chattr $user -|-qolHSOAMV $chan
  4816. chattr $user $flags $chan
  4817. setuser $user XTRA LASTMODIFBY $hand
  4818. setuser $user XTRA LASTMODIFDATE $time
  4819. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4820. blacktools:tell $nick $host $hand $chan $chan1 add.15 $user
  4821. }
  4822. }
  4823. voice {
  4824. set flags "-|olV"
  4825. if {[matchattr $handle -|M $chan] && [matchattr $hand -|M $chan]} {
  4826. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4827. return
  4828. }
  4829. if {[matchattr $handle -|M $chan] && [matchattr $hand -|A $chan]} {
  4830. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4831. return
  4832. }
  4833. if {[matchattr $handle m|- $chan] && [matchattr $hand -|M $chan]} {
  4834. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4835. return
  4836. }
  4837. if {[matchattr $handle m|- $chan] && [matchattr $hand -|A $chan]} {
  4838. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4839. return
  4840. }
  4841. if {[matchattr $handle m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  4842. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4843. return
  4844. }
  4845. if {[matchattr $handle -|A $chan] && [matchattr $hand -|A $chan]} {
  4846. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4847. return
  4848. }
  4849. if {[matchattr $handle n|- $chan] && [matchattr $hand -|A $chan]} {
  4850. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4851. return
  4852. }
  4853. if {[matchattr $handle n|- $chan] && [matchattr $hand -|M $chan]} {
  4854. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4855. return
  4856. }
  4857. if {[matchattr $handle n|- $chan] && [matchattr $hand n|- $chan]} {
  4858. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4859. return
  4860. }
  4861. if {[matchattr $handle n|- $chan] && [matchattr $hand m|- $chan]} {
  4862. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4863. return
  4864. }
  4865. if {[validuser $user]} {
  4866. chattr $user -|-qolSHOAMV $chan
  4867. chattr $user $flags $chan
  4868. setuser $user XTRA LASTMODIFBY $hand
  4869. setuser $user XTRA LASTMODIFDATE $time
  4870. blacktools:tell $nick $host $hand $chan $chan1 add.14 $user
  4871. } else {
  4872. adduser $user $uhost
  4873. set user [check:handle $user $nick $host $hand $chan $chan1]
  4874. chattr $user -|-qolSOAMV $chan
  4875. chattr $user $flags $chan
  4876. setuser $user XTRA LASTMODIFBY $hand
  4877. setuser $user XTRA LASTMODIFDATE $time
  4878. blacktools:tell $nick $host $hand $chan $chan1 add.10 "$user $uhost"
  4879. blacktools:tell $nick $host $hand $chan $chan1 add.14 $user
  4880. }
  4881. }
  4882. }
  4883. }
  4884. }
  4885. }
  4886. }
  4887. proc publicadd {nick host hand chan arg} {
  4888. global black
  4889. set level [lindex [split $arg] 0]
  4890. set time [ctime [unixtime]]
  4891. set type 0
  4892. set chan1 "$chan"
  4893. set args [lrange [split $arg] 1 end]
  4894. set c [lindex [split $arg] 1]
  4895. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  4896. set chan "$c"
  4897. set args [lrange [split $arg] 2 end]
  4898. }
  4899. if {[matchattr $hand -|q $chan]} {
  4900. blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  4901. return
  4902. }
  4903. add:process $args $time $level $hand $host $chan $chan1 $nick $type
  4904. }
  4905. ############################## delacc ################################
  4906. proc delaccpublic {nick host hand chan arg} {
  4907. global black
  4908. set args [lrange [split $arg] 0 end]
  4909. set type 0
  4910. set chan1 "$chan"
  4911. set c [lindex [split $arg] 0]
  4912. if {[string equal -nocase "owner" $c] && [matchattr $hand n|- $chan]} {
  4913. set args [lrange [split $arg] 1 end]
  4914. delacc:owner $nick $host $hand $chan $chan1 $args $type
  4915. return
  4916. }
  4917. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  4918. set chan "$c"
  4919. set args [lrange [split $arg] 1 end]
  4920. }
  4921. delacc:process $nick $host $hand $chan $chan1 $args $type
  4922. }
  4923. proc delacc:owner {nick host hand chan chan1 args type} {
  4924. global black botnick
  4925. set char(p) [lindex $black(cmdchar) 0]
  4926. if {[string match -nocase "none" "$char(p)"]} {
  4927. set char(p) ""
  4928. }
  4929. if {($args == "") && ($type == "0")} {
  4930. blacktools:tell $nick $host $hand $chan $chan1 delacc.6 none
  4931. return
  4932. }
  4933. if {($args == "") && ($type == "1")} {
  4934. blacktools:tell $nick $host $hand $chan $chan1 delacc.7 none
  4935. return
  4936. }
  4937. foreach user $args {
  4938. if {$user != ""} {
  4939. if {[onchan $user $chan] && ![validuser $user]} {
  4940. set user [nick2hand $user]
  4941. }
  4942. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  4943. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4944. return
  4945. }
  4946. if {![matchattr $user m]} {
  4947. blacktools:tell $nick $host $hand $chan $chan1 delacc.9 none
  4948. return
  4949. }
  4950. if {[validuser $user]} {
  4951. chattr $user -mjloptxag
  4952. blacktools:tell $nick $host $hand $chan $chan1 delacc.8 $user
  4953. } else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  4954. }
  4955. }
  4956. }
  4957. proc delacc:process {nick host hand chan chan1 args type} {
  4958. global botnick black
  4959. set char(p) [lindex $black(cmdchar) 0]
  4960. if {[string match -nocase "none" "$char(p)"]} {
  4961. set char(p) ""
  4962. }
  4963. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  4964. return
  4965. }
  4966. if {[matchattr $hand nm|- $chan]} {
  4967. if {($args == "") && ($type == "0")} {
  4968. blacktools:tell $nick $host $hand $chan $chan1 delacc.1 none
  4969. return
  4970. }
  4971. if {($args == "") && ($type == "1")} {
  4972. blacktools:tell $nick $host $hand $chan $chan1 delacc.2 none
  4973. return
  4974. }
  4975. }
  4976. if {($args == "") && ($type == "0")} {
  4977. blacktools:tell $nick $host $hand $chan $chan1 delacc.3 none
  4978. return
  4979. }
  4980. if {($args == "") && ($type == "1")} {
  4981. blacktools:tell $nick $host $hand $chan $chan1 delacc.4 none
  4982. return
  4983. }
  4984. if {![validchan $chan]} {
  4985. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  4986. return
  4987. }
  4988. if {![onchan $botnick $chan]} {
  4989. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  4990. return
  4991. }
  4992. foreach user $args {
  4993. if {$user != ""} {
  4994. if {[onchan $user $chan] && ![validuser $user]} {
  4995. set user [nick2hand $user]
  4996. }
  4997. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  4998. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  4999. return
  5000. }
  5001. if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
  5002. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5003. return
  5004. }
  5005. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  5006. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5007. return
  5008. }
  5009. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  5010. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5011. return
  5012. }
  5013. if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
  5014. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5015. return
  5016. }
  5017. if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
  5018. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5019. return
  5020. }
  5021. if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
  5022. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5023. return
  5024. }
  5025. if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
  5026. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5027. return
  5028. }
  5029. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  5030. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5031. return
  5032. }
  5033. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  5034. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5035. return
  5036. }
  5037. if {![matchattr $user nm|oHfgalSOAMV $chan]} {
  5038. blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  5039. return
  5040. }
  5041. if {[validuser $user]} {
  5042. chattr $user -|-qolSgaOAMVHf $chan
  5043. blacktools:tell $nick $host $hand $chan $chan1 delacc.5 $user
  5044. } else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  5045. }
  5046. }
  5047. }
  5048. ############################## del #####################################
  5049. proc delpublic {nick host hand chan arg} {
  5050. global black
  5051. set args [lrange [split $arg] 0 end]
  5052. set type 0
  5053. set chan1 "$chan"
  5054. del:process $nick $host $hand $chan $chan1 $args $type
  5055. }
  5056. proc del:process {nick host hand chan chan1 args type} {
  5057. global botnick black
  5058. set char(p) [lindex $black(cmdchar) 0]
  5059. if {[string match -nocase "none" "$char(p)"]} {
  5060. set char(p) ""
  5061. }
  5062. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  5063. return
  5064. }
  5065. if {($args == "") && ($type == "0")} {
  5066. blacktools:tell $nick $host $hand $chan $chan1 del.1 none
  5067. return
  5068. }
  5069. if {($args == "") && ($type == "1")} {
  5070. blacktools:tell $nick $host $hand $chan $chan1 del.2 none
  5071. return
  5072. }
  5073. foreach user $args {
  5074. if {$user != ""} {
  5075. if {[onchan $user $chan] && ![validuser $user]} {
  5076. set user [nick2hand $user]
  5077. }
  5078. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  5079. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5080. return
  5081. }
  5082. if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
  5083. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5084. return
  5085. }
  5086. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  5087. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5088. return
  5089. }
  5090. if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
  5091. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5092. return
  5093. }
  5094. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  5095. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5096. return
  5097. }
  5098. if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
  5099. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5100. return
  5101. }
  5102. if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
  5103. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5104. return
  5105. }
  5106. if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
  5107. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5108. return
  5109. }
  5110. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  5111. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5112. return
  5113. }
  5114. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  5115. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5116. return
  5117. }
  5118. if {[validuser $user]} {
  5119. if {[matchattr $hand -|MA $chan]} {
  5120. foreach c [channels] {
  5121. if {![string equal -nocase $c $chan]} {
  5122. if {[matchattr $user nm|HAMOVSo $c]} {
  5123. blacktools:tell $nick $host $hand $chan $chan1 del.4 $user
  5124. return
  5125. }
  5126. }
  5127. }
  5128. }
  5129. deluser $user
  5130. blacktools:tell $nick $host $hand $chan $chan1 del.3 $user
  5131. } else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  5132. }
  5133. }
  5134. }
  5135. ################################ addhost #############################
  5136. proc addhostpublic {nick host hand chan arg} {
  5137. global black
  5138. set user [lindex [split $arg] 0]
  5139. set type 0
  5140. set chan1 "$chan"
  5141. set hosts [lrange [split $arg] 1 end]
  5142. addhost:process $nick $host $hand $chan $chan1 $user $hosts $type
  5143. }
  5144. proc addhost:process {nick host hand chan chan1 user hosts type} {
  5145. global black botnick
  5146. set char(p) [lindex $black(cmdchar) 0]
  5147. if {[string match -nocase "none" "$char(p)"]} {
  5148. set char(p) ""
  5149. }
  5150. set time [ctime [unixtime]]
  5151. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  5152. return
  5153. }
  5154. if {($user == "") && ($type == "0")} {
  5155. blacktools:tell $nick $host $hand $chan $chan1 addhost.1 none
  5156. return
  5157. }
  5158. if {($user == "") && ($type == "1")} {
  5159. blacktools:tell $nick $host $hand $chan $chan1 addhost.2 none
  5160. return
  5161. }
  5162. if {[onchan $user $chan] && ![validuser $user]} {
  5163. set user [nick2hand $user]
  5164. }
  5165. if {[matchattr $user nm|- $chan] && [matchattr $hand nm|- $chan] && [string equal -nocase $hand $user]} {
  5166. add:owner:host $nick $host $hand $chan $chan1 $user $hosts $type
  5167. return
  5168. }
  5169. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  5170. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5171. return
  5172. }
  5173. if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
  5174. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5175. return
  5176. }
  5177. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  5178. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5179. return
  5180. }
  5181. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  5182. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5183. return
  5184. }
  5185. if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
  5186. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5187. return
  5188. }
  5189. if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
  5190. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5191. return
  5192. }
  5193. if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
  5194. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5195. return
  5196. }
  5197. if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
  5198. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5199. return
  5200. }
  5201. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  5202. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5203. return
  5204. }
  5205. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  5206. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5207. return 0
  5208. }
  5209. if {[validuser $user]} {
  5210. set hhost [getuser $user hosts]
  5211. foreach hhost $hhost {
  5212. if {[string match -nocase $hosts $hhost]} {
  5213. blacktools:tell $nick $host $hand $chan $chan1 addhost.3 "$user $hosts"
  5214. return
  5215. }
  5216. }
  5217. setuser $user HOSTS $hosts
  5218. setuser $user XTRA LASTMODIFBY $hand
  5219. setuser $user XTRA LASTMODIFDATE $time
  5220. blacktools:tell $nick $host $hand $chan $chan1 addhost.4 "$user $hosts"
  5221. } else { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  5222. }
  5223. proc add:owner:host {nick host hand chan chan1 user hosts type} {
  5224. global black
  5225. if {[validuser $user]} {
  5226. set hhost [getuser $user hosts]
  5227. foreach hhost $hhost {
  5228. if {[string match -nocase $hosts $hhost]} {
  5229. blacktools:tell $nick $host $hand $chan $chan1 addhost.3 "$user $hosts"
  5230. return
  5231. }
  5232. }
  5233. setuser $user HOSTS $hosts
  5234. blacktools:tell $nick $host $hand $chan $chan1 addhost.5 "$hosts"
  5235. }
  5236. }
  5237. ############################### delhost ############################
  5238. proc delhostpuplic {nick host hand chan arg} {
  5239. global black
  5240. set user [lindex [split $arg] 0]
  5241. set type 0
  5242. set chan1 "$chan"
  5243. set hosts [lrange [split $arg] 1 end]
  5244. delhost:process $nick $host $hand $chan $chan1 $user $hosts $type
  5245. }
  5246. proc delhost:process {nick host hand chan chan1 user hosts type} {
  5247. global black botnick
  5248. set time [ctime [unixtime]]
  5249. set char(p) [lindex $black(cmdchar) 0]
  5250. if {[string match -nocase "none" "$char(p)"]} {
  5251. set char(p) ""
  5252. }
  5253. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  5254. return
  5255. }
  5256. if {($user == "") && ($type == "0")} {
  5257. blacktools:tell $nick $host $hand $chan $chan1 delhost.1 none
  5258. return
  5259. }
  5260. if {($user == "") && ($type == "1")} {
  5261. blacktools:tell $nick $host $hand $chan $chan1 delhost.2 none
  5262. return
  5263. }
  5264. if {[onchan $user $chan] && ![validuser $user]} {
  5265. set user [nick2hand $user]
  5266. }
  5267. if {[matchattr $user nm|- $chan] && [matchattr $hand nm|- $chan] && [string equal -nocase $hand $user]} {
  5268. del:owner:host $nick $host $hand $chan $chan1 $user $hosts $type
  5269. return
  5270. }
  5271. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  5272. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5273. return
  5274. }
  5275. if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
  5276. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5277. return
  5278. }
  5279. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  5280. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5281. return
  5282. }
  5283. if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
  5284. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5285. return
  5286. }
  5287. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  5288. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5289. return
  5290. }
  5291. if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
  5292. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5293. return
  5294. }
  5295. if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
  5296. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5297. return
  5298. }
  5299. if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
  5300. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5301. return
  5302. }
  5303. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  5304. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5305. return
  5306. }
  5307. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  5308. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5309. return
  5310. }
  5311. if {[validuser $user]} {
  5312. set hhost [getuser $user hosts]
  5313. foreach hhost $hhost {
  5314. if {[string match -nocase $hhost $hosts]} {
  5315. set foundhost 1
  5316. }
  5317. }
  5318. if {![info exists foundhost]} {
  5319. blacktools:tell $nick $host $hand $chan $chan1 delhost.3 "$user $hosts"
  5320. return
  5321. }
  5322. delhost $user $hosts
  5323. blacktools:tell $nick $host $hand $chan $chan1 delhost.4 "$user $hosts"
  5324. } else {
  5325. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  5326. }
  5327. }
  5328. proc del:owner:host {nick host hand chan chan1 user hosts type} {
  5329. global black
  5330. if {[validuser $user]} {
  5331. set hhost [getuser $user hosts]
  5332. foreach hhost $hhost {
  5333. if {[string match -nocase $hhost $hosts]} {
  5334. set foundhost 1
  5335. }
  5336. }
  5337. if {![info exists foundhost]} {
  5338. blacktools:tell $nick $host $hand $chan $chan1 delhost.3 "$user $hosts"
  5339. return
  5340. }
  5341. delhost $user $hosts
  5342. blacktools:tell $nick $host $hand $chan $chan1 delhost.5 "$user $hosts"
  5343. } else {
  5344. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  5345. }
  5346. }
  5347. proc chuserpublic {nick host hand chan arg} {
  5348. global black
  5349. set user [lindex [split $arg] 0]
  5350. set type 0
  5351. set chan1 "$chan"
  5352. set chandle [lindex [split $arg] 1]
  5353. chuser:process $nick $host $hand $chan $chan1 $user $chandle $type
  5354. }
  5355. proc chuser:process {nick host hand chan chan1 user chandle type} {
  5356. global botnick black
  5357. set char(p) [lindex $black(cmdchar) 0]
  5358. if {[string match -nocase "none" "$char(p)"]} {
  5359. set char(p) ""
  5360. }
  5361. set time [ctime [unixtime]]
  5362. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  5363. return
  5364. }
  5365. if {($user == "") && ($type == "0")} {
  5366. blacktools:tell $nick $host $hand $chan $chan1 chuser.1 none
  5367. return
  5368. }
  5369. if {($user == "") && ($type == "1")} {
  5370. blacktools:tell $nick $host $hand $chan $chan1 chuser.2 none
  5371. return
  5372. }
  5373. if {[onchan $user $chan] && ![validuser $user]} {
  5374. set user [nick2hand $user]
  5375. }
  5376. if {[matchattr $user nm|- $chan] && [matchattr $hand nm|- $chan] && [string equal -nocase $hand $user]} {
  5377. chuser:owner $nick $host $hand $chan $chan1 $user $chandle $type
  5378. return
  5379. }
  5380. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  5381. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5382. return
  5383. }
  5384. if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
  5385. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5386. return
  5387. }
  5388. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  5389. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5390. return
  5391. }
  5392. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  5393. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5394. return
  5395. }
  5396. if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
  5397. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5398. return
  5399. }
  5400. if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
  5401. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5402. return
  5403. }
  5404. if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
  5405. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5406. return
  5407. }
  5408. if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
  5409. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5410. return
  5411. }
  5412. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  5413. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5414. return
  5415. }
  5416. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  5417. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5418. return
  5419. }
  5420. if {[validuser $user]} {
  5421. chhandle $user $chandle
  5422. setuser $chandle XTRA LASTMODIFBY $hand
  5423. setuser $chandle XTRA LASTMODIFDATE $time
  5424. blacktools:tell $nick $host $hand $chan $chan1 chuser.3 "$user $chandle"
  5425. } else {blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none }
  5426. }
  5427. proc chuser:owner {nick host hand chan chan1 user chandle type} {
  5428. global black
  5429. chhandle $user $chandle
  5430. set hand $chandle
  5431. blacktools:tell $nick $host $hand $chan $chan1 chuser.4 "$chandle"
  5432. }
  5433. proc userlist:execute {hand host level chan chan1 nick type} {
  5434. global black botnick
  5435. set char(p) [lindex $black(cmdchar) 0]
  5436. if {[string match -nocase "none" "$char(p)"]} {
  5437. set char(p) ""
  5438. }
  5439. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  5440. return
  5441. }
  5442. if {[matchattr $hand nm|- $chan]} {
  5443. if {($level == "") && ($type == "0")} {
  5444. blacktools:tell $nick $host $hand $chan $chan1 userlist.1 none
  5445. return
  5446. }
  5447. if {($level == "") && ($type == "1")} {
  5448. blacktools:tell $nick $host $hand $chan $chan1 userlist.2 none
  5449. return
  5450. }
  5451. }
  5452. if {($level == "") && ($type == "0")} {
  5453. blacktools:tell $nick $host $hand $chan $chan1 userlist.3 none
  5454. return
  5455. }
  5456. if {($level == "") && ($type == "1")} {
  5457. blacktools:tell $nick $host $hand $chan $chan1 userlist.4 none
  5458. return
  5459. }
  5460. if {![validchan $chan]} {
  5461. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  5462. return
  5463. }
  5464. if {![onchan $botnick $chan]} {
  5465. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  5466. return
  5467. }
  5468. if {([regexp -nocase -- {(#[0-9]+|manager|protect|admin|senior|op|voice|all|owner|online|autoop|autovoice)} $level tmp access]) && (![regexp -nocase -- {\S#} $level])} {
  5469. switch $access {
  5470. manager {
  5471. set flags "-|M"
  5472. set numar [llength [userlist $flags $chan]]
  5473. set list [userlist $flags $chan]
  5474. foreach user [wordwrap [join $list " "] 250 ,] {
  5475. if {$list == ""} { set user "NONE" }
  5476. blacktools:tell $nick $host $hand $chan $chan1 userlist.5 $numar
  5477. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
  5478. }
  5479. }
  5480. admin {
  5481. set flags "-|A"
  5482. set numar [llength [userlist $flags $chan]]
  5483. set list [userlist $flags $chan]
  5484. foreach user [wordwrap [join $list " , "] 250 ,] {
  5485. if {$list == ""} { set user "NONE" }
  5486. blacktools:tell $nick $host $hand $chan $chan1 userlist.8 $numar
  5487. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
  5488. }
  5489. }
  5490. senior {
  5491. set flags "-|S"
  5492. set list [userlist $flags $chan]
  5493. set numar [llength [userlist $flags $chan]]
  5494. foreach user [wordwrap [join $list " , "] 250 ,] {
  5495. if {$list == ""} { set user "NONE" }
  5496. blacktools:tell $nick $host $hand $chan $chan1 userlist.10 $numar
  5497. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
  5498. }
  5499. }
  5500. protect {
  5501. set flags "-|H"
  5502. set list [userlist $flags $chan]
  5503. set numar [llength [userlist $flags $chan]]
  5504. foreach user [wordwrap [join $list " , "] 250 ,] {
  5505. if {$list == ""} { set user "NONE" }
  5506. blacktools:tell $nick $host $hand $chan $chan1 userlist.12 $numar
  5507. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
  5508. }
  5509. }
  5510. op {
  5511. set flags "-|O"
  5512. set list [userlist $flags $chan]
  5513. set numar [llength [userlist $flags $chan]]
  5514. foreach user [wordwrap [join $list " , "] 250 ,] {
  5515. if {$list == ""} { set user "NONE" }
  5516. blacktools:tell $nick $host $hand $chan $chan1 userlist.14 $numar
  5517. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
  5518. }
  5519. }
  5520. owner {
  5521. if {[matchattr $hand nm|- $chan]} {
  5522. set bossflags "n|-"
  5523. set ownerflags "m|-"
  5524. set listbossowner [userlist $bossflags]
  5525. set listowner [userlist $ownerflags]
  5526. foreach user $listbossowner {
  5527. if {[lsearch -exact $listowner $user] > -1} {
  5528. set pos [lsearch -exact $listowner $user]
  5529. set listowner [lreplace $listowner $pos $pos]
  5530. }
  5531. }
  5532. if {$listowner == ""} { set listowner "NONE" }
  5533. blacktools:tell $nick $host $hand $chan $chan1 userlist.16 $listbossowner
  5534. blacktools:tell $nick $host $hand $chan $chan1 userlist.17 $listowner
  5535. }
  5536. }
  5537. voice {
  5538. set flags "-|V"
  5539. set numar [llength [userlist $flags $chan]]
  5540. set list [userlist $flags $chan]
  5541. foreach user [wordwrap [join $list " , "] 250 ,] {
  5542. if {$list == ""} { set user "NONE" }
  5543. blacktools:tell $nick $host $hand $chan $chan1 userlist.18 $numar
  5544. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
  5545. }
  5546. }
  5547. autoop {
  5548. if {[matchattr $hand mn|- $chan]} {
  5549. set flags "-|a"
  5550. set all_flags "a|a"
  5551. set glob_flags "a|-"
  5552. set list [userlist $all_flags $chan]
  5553. set numar [llength $list]
  5554. blacktools:tell $nick $host $hand $chan $chan1 userlist.22 $numar
  5555. foreach user $list {
  5556. if {[matchattr $user $glob_flags $chan]} {
  5557. lappend userlist "$user\[GLOBAL\]"
  5558. } else { lappend userlist $user }
  5559. }
  5560. foreach text [wordwrap [join $userlist " , "] 250 ,] {
  5561. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 "$text"
  5562. }
  5563. return
  5564. }
  5565. set flags "-|a"
  5566. set numar [llength [userlist $flags $chan]]
  5567. set list [userlist $flags $chan]
  5568. foreach user [wordwrap [join $list " , "] 250 ,] {
  5569. if {$list == ""} { set user "NONE" }
  5570. blacktools:tell $nick $host $hand $chan $chan1 userlist.22 $numar
  5571. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
  5572. }
  5573. }
  5574. autovoice {
  5575. if {[matchattr $hand mn|- $chan]} {
  5576. set flags "-|g"
  5577. set all_flags "g|g"
  5578. set glob_flags "g|-"
  5579. set list [userlist $all_flags $chan]
  5580. set numar [llength $list]
  5581. blacktools:tell $nick $host $hand $chan $chan1 userlist.23 $numar
  5582. foreach user $list {
  5583. if {[matchattr $user $glob_flags $chan]} {
  5584. lappend userlist "$user\[GLOBAL\]"
  5585. } else { lappend userlist $user }
  5586. }
  5587. foreach text [wordwrap [join $userlist " , "] 250 ,] {
  5588. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 "$text"
  5589. }
  5590. return
  5591. }
  5592. set flags "-|g"
  5593. set numar [llength [userlist $flags $chan]]
  5594. set list [userlist $flags $chan]
  5595. foreach user [wordwrap [join $list " , "] 250 ,] {
  5596. if {$list == ""} { set user "NONE" }
  5597. blacktools:tell $nick $host $hand $chan $chan1 userlist.23 $numar
  5598. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $user
  5599. }
  5600. }
  5601. all {
  5602. array set flgc [list]
  5603. set flags "-|MNHASVO"
  5604. set list [userlist $flags $chan]
  5605. set numar [llength [userlist $flags $chan]]
  5606. foreach user $list {
  5607. if {[matchattr $user -|H $chan]} {
  5608. lappend flgc(PROTECT) $user
  5609. } elseif {[matchattr $user -|V $chan]} {
  5610. lappend flgc(VOICE) $user
  5611. } elseif {[matchattr $user -|O $chan]} {
  5612. lappend flgc(OP) $user
  5613. } elseif {[matchattr $user -|S $chan]} {
  5614. lappend flgc(SENIOR) $user
  5615. } elseif {[matchattr $user -|A $chan]} {
  5616. lappend flgc(ADMINISTRATOR) $user
  5617. } elseif {[matchattr $user -|M $chan]} {
  5618. lappend flgc(MANAGER) $user
  5619. }
  5620. }
  5621. foreach flw [array names flgc] {
  5622. lappend messall [join $flgc($flw) " , "] -> ($flw)
  5623. }
  5624. if {$list == ""} { set messall "NONE" }
  5625. blacktools:tell $nick $host $hand $chan $chan1 userlist.20 $numar
  5626. foreach mes [wordwrap [join $messall] 250] {
  5627. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $mes
  5628. }
  5629. }
  5630. online {
  5631. array set flgc [list]
  5632. set flags "-|MNHASVO"
  5633. set users_online ""
  5634. set numar 0
  5635. foreach n [chanlist $chan] {
  5636. set handle [nick2hand $n]
  5637. if {[matchattr $handle $flags $chan]} {
  5638. lappend users_online $handle
  5639. }
  5640. }
  5641. set numar [llength $users_online]
  5642. foreach user $users_online {
  5643. if {$user != ""} {
  5644. if {[matchattr $user -|H $chan]} {
  5645. lappend flgc(PROTECT) $user
  5646. } elseif {[matchattr $user -|V $chan]} {
  5647. lappend flgc(VOICE) $user
  5648. } elseif {[matchattr $user -|O $chan]} {
  5649. lappend flgc(OP) $user
  5650. } elseif {[matchattr $user -|S $chan]} {
  5651. lappend flgc(SENIOR) $user
  5652. } elseif {[matchattr $user -|A $chan]} {
  5653. lappend flgc(ADMINISTRATOR) $user
  5654. } elseif {[matchattr $user -|M $chan]} {
  5655. lappend flgc(MANAGER) $user
  5656. }
  5657. }
  5658. }
  5659. foreach flw [array names flgc] {
  5660. lappend messall [join $flgc($flw) " , "] -> ($flw)
  5661. }
  5662. if {$users_online == ""} { set messall "NONE" }
  5663. blacktools:tell $nick $host $hand $chan $chan1 userlist.21 $numar
  5664. foreach mes [wordwrap [join $messall] 250] {
  5665. blacktools:tell $nick $host $hand $chan $chan1 userlist.7 $mes
  5666. }
  5667. }
  5668. }
  5669. }
  5670. }
  5671. proc wordwrap {str {len 100} {splitChr { }}} {
  5672. set out [set cur {}]; set i 0
  5673. foreach word [split [set str][unset str] $splitChr] {
  5674. if {[incr i [string len $word]]>$len} {
  5675. lappend out [join $cur $splitChr]
  5676. set cur [list $word]
  5677. set i [string len $word]
  5678. } {
  5679. lappend cur $word
  5680. }
  5681. incr i
  5682. }
  5683. lappend out [join $cur $splitChr]
  5684. }
  5685. proc publicuserlist {nick host hand chan arg} {
  5686. global black
  5687. set level [lindex [split $arg] 0]
  5688. set type 0
  5689. set chan1 "$chan"
  5690. if {[regexp {^[&#]} $level] && [matchattr $hand nm|- $chan]} {
  5691. set chan "$level"
  5692. set level [lindex [split $arg] 1]
  5693. }
  5694. userlist:execute $hand $host $level $chan $chan1 $nick $type
  5695. }
  5696. ############################### channels ########################
  5697. proc channelspublic {nick host hand chan arg} {
  5698. global botnick black
  5699. set chan1 "$chan"
  5700. channels:process $nick $host $hand $chan $chan1
  5701. }
  5702. proc channels:process {nick host hand chan chan1} {
  5703. global botnick black
  5704. set num [llength [channels]]
  5705. set minusers "5"
  5706. array set status [list]
  5707. set notonchan "(NoT on ChaN)"
  5708. set notenough "(users < $minusers)"
  5709. set suspended "(SUSPENDED)"
  5710. foreach c [channels] {
  5711. set usersnumber [llength [chanlist $c]]
  5712. if {[channel get $c inactive]} {
  5713. lappend status($c) "$c $suspended"
  5714. } elseif {![onchan $botnick $c]} {
  5715. lappend status($c) "$c $notonchan"
  5716. } elseif {[onchan $botnick $c] && (![botisop $c])} {
  5717. lappend status($c) "$c"
  5718. } elseif {[onchan $botnick $c] && ($usersnumber < $minusers)} {
  5719. lappend status($c) "$c $notenough"
  5720. }
  5721. if {![info exists status($c)]} {
  5722. lappend status($c) "@$c"
  5723. }
  5724. lappend message "[join $status($c) ", "]"
  5725. }
  5726. blacktools:tell $nick $host $hand $chan $chan1 channels.1 $num
  5727. foreach word [wordwrap [join $message] 350 ,] {
  5728. blacktools:tell $nick $host $hand $chan $chan1 channels.2 $word
  5729. }
  5730. }
  5731. ############################### info ############################
  5732. proc infopublic {nick host hand chan arg} {
  5733. global black
  5734. set user [lindex [split $arg] 0]
  5735. set type 0
  5736. set chan1 "$chan"
  5737. if {[regexp {^[&#]} $user] && [matchattr $hand nm|MASO $user] && ([lindex [split $arg] 1] == "")} {
  5738. set chan $user
  5739. stats:process $nick $host $hand $chan $chan1
  5740. return
  5741. }
  5742. if {[regexp {^[&#]} $user] && [matchattr $hand nm|- $chan]} {
  5743. set chan "$user"
  5744. set user [lindex [split $arg] 1]
  5745. }
  5746. info:process $nick $host $hand $chan $chan1 $user $type
  5747. }
  5748. proc info:process {nick host hand chan chan1 user type} {
  5749. global botnick black
  5750. set char(p) [lindex $black(cmdchar) 0]
  5751. if {[string match -nocase "none" "$char(p)"]} {
  5752. set char(p) ""
  5753. }
  5754. set time [ctime [unixtime]]
  5755. array set flg [list]
  5756. if {[matchattr $hand nm|- $chan]} {
  5757. if {($user == "") && ($type == "0")} {
  5758. blacktools:tell $nick $host $hand $chan $chan1 info.1 none
  5759. return
  5760. }
  5761. if {($user == "") && ($type == "1")} {
  5762. blacktools:tell $nick $host $hand $chan $chan1 info.2 none
  5763. return
  5764. }
  5765. }
  5766. if {($user == "") && ($type == "0")} {
  5767. blacktools:tell $nick $host $hand $chan $chan1 info.3 none
  5768. return
  5769. }
  5770. if {($user == "") && ($type == "1")} {
  5771. blacktools:tell $nick $host $hand $chan $chan1 info.4 none
  5772. return
  5773. }
  5774. if {![validchan $chan]} {
  5775. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  5776. return
  5777. }
  5778. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  5779. return
  5780. }
  5781. if {[onchan $user $chan] && ![validuser $user]} {
  5782. set user [nick2hand $user]
  5783. }
  5784. if {![validuser $user]} {
  5785. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  5786. return
  5787. }
  5788. if {[matchattr $hand nm|- $chan]} {
  5789. foreach c [channels] {
  5790. if {[matchattr $user -|H $c]} {
  5791. set fl "PROTECT"
  5792. lappend flg($fl) $c
  5793. } elseif {[matchattr $user -|V $c]} {
  5794. set fl "VOICE"
  5795. lappend flg($fl) $c
  5796. } elseif {[matchattr $user -|O $c]} {
  5797. set fl "OP"
  5798. lappend flg($fl) $c
  5799. } elseif {[matchattr $user -|S $c]} {
  5800. set fl "SENIOR"
  5801. lappend flg($fl) $c
  5802. } elseif {[matchattr $user -|A $c]} {
  5803. set fl "ADMINISTRATOR"
  5804. lappend flg($fl) $c
  5805. } elseif {[matchattr $user -|M $c]} {
  5806. set fl "MANAGER"
  5807. lappend flg($fl) $c
  5808. }
  5809. }
  5810. foreach cf [array names flg] {
  5811. lappend exit [join $flg($cf) ,] ($cf) |
  5812. }
  5813. }
  5814. if {![matchattr $user nm|OgaAHSMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  5815. if {![info exists exit]} { set exit "NONE"}
  5816. if {[matchattr $hand nm|- $chan]} {
  5817. blacktools:tell $nick $host $hand $chan $chan1 info.5 "[join $exit]"
  5818. if {[getuser $user HOSTS] != ""} {
  5819. set hosts [getuser $user hosts]
  5820. blacktools:tell $nick $host $hand $chan $chan1 info.6 $hosts
  5821. }
  5822. set lastseen [getuser $user LASTON $chan]
  5823. if {($lastseen == "0") || ($lastseen == "")} {
  5824. set seened "NONE"
  5825. } else { set seened [ctime $lastseen] }
  5826. blacktools:tell $nick $host $hand $chan $chan1 info.7 $seened
  5827. }
  5828. return
  5829. }
  5830. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  5831. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  5832. set suspendat "$black(say.$getlang.info.10)"
  5833. set cflags [chattr $user | $chan]
  5834. blacktools:tell $nick $host $hand $chan $chan1 info.8 $user
  5835. blacktools:tell $nick $host $hand $chan $chan1 info.9 $time
  5836. if {[matchattr $user -|g $chan]} {
  5837. set flags "AUTOVOICE"
  5838. }
  5839. if {[matchattr $user -|a $chan]} {
  5840. set flags "AUTOOP"
  5841. }
  5842. if {[matchattr $user g|- $chan]} {
  5843. set flags "GLOBAL AUTOVOICE"
  5844. }
  5845. if {[matchattr $user a|- $chan]} {
  5846. set flags "GLOBAL AUTOOP"
  5847. }
  5848. if {[matchattr $user -|V $chan]} { set flags "VOICE" } elseif {[matchattr $user -|O $chan]} { set flags "OP" } elseif {[matchattr $user -|S $chan]} { set flags "SENIOR" } elseif {[matchattr $user -|A $chan]} { set flags "ADMINISTRATOR" } elseif {[matchattr $user -|H $chan]} { set flags "PROTECT"}
  5849. if {[matchattr $user n|- $chan]} { set flags "THE BOSS OWNER" } elseif {[matchattr $user m|- $chan]} { set flags "OWNER" } elseif {[matchattr $user -|M $chan]} { set flags "MANAGER" } elseif {$cflags == "-|-"} { blacktools:tell $nick $host $hand $chan $chan1 info.18 "NONE" }
  5850. if {[matchattr $user -|g $chan]} {
  5851. if {[matchattr $user -|V $chan]} { set flags "VOICE+AUTOVOICE)" } elseif {[matchattr $user -|O $chan]} { set flags "OP+AUTOVOICE" } elseif {[matchattr $user -|S $chan]} { set flags "SENIOR+AUTOVOICE" } elseif {[matchattr $user -|A $chan]} { set flags "ADMINISTRATOR+AUTOVOICE" } elseif {[matchattr $user -|H $chan]} { set flags "PROTECT+AUTOVOICE"}
  5852. if {[matchattr $user -|M $chan]} { set flags "MANAGER+AUTOVOICE" } elseif {[matchattr $user m|- $chan]} { set flags "OWNER" } elseif {$cflags == "-|-"} { blacktools:tell $nick $host $hand $chan $chan1 info.18 "NONE"
  5853. return
  5854. }
  5855. }
  5856. if {[matchattr $user -|a $chan]} {
  5857. if {[matchattr $user -|V $chan]} { set flags "VOICE+AUTOOP" } elseif {[matchattr $user -|O $chan]} { set flags "OP+AUTOOP" } elseif {[matchattr $user -|S $chan]} { set flags "SENIOR+AUTOOP" } elseif {[matchattr $user -|A $chan]} { set flags "ADMINISTRATOR+AUTOOP" } elseif {[matchattr $user -|H $chan]} { set flags "PROTECT+AUTOOP"}
  5858. if {[matchattr $user -|M $chan]} { set flags "MANAGER+AUTOOP" } elseif {[matchattr $user m|- $chan]} { set flags "OWNER" } elseif {$cflags == "-|-"} { blacktools:tell $nick $host $hand $chan $chan1 info.18 "NONE"
  5859. return
  5860. }
  5861. }
  5862. if {[matchattr $user -|q $chan]} {
  5863. if {[matchattr $user -|V $chan]} { set flags "VOICE ($suspendat)" } elseif {[matchattr $user -|O $chan]} { set flags "OP ($suspendat)" } elseif {[matchattr $user -|S $chan]} { set flags "SENIOR ($suspendat)" } elseif {[matchattr $user -|A $chan]} { set flags "ADMINISTRATOR ($suspendat)" } elseif {[matchattr $user -|H $chan]} { set flags "PROTECT ($suspendat)"}
  5864. if {[matchattr $user -|M $chan]} { set flags "MANAGER ($suspendat)" } elseif {[matchattr $user m|- $chan]} { set flags "OWNER ($suspendat)" } elseif {$cflags == "-|-"} { blacktools:tell $nick $host $hand $chan $chan1 info.18 "NONE"
  5865. return
  5866. }
  5867. }
  5868. blacktools:tell $nick $host $hand $chan $chan1 info.11 "$cflags $flags"
  5869. if {[getuser $user INFO] != ""} {
  5870. blacktools:tell $nick $host $hand $chan $chan1 info.12 "[getuser $user INFO]"
  5871. }
  5872. set date [getuser $user XTRA LASTMODIFDATE]
  5873. if {[matchattr $user n|- $chan]} { set date "No Date" }
  5874. if {$date == ""} { set date "No Date" }
  5875. set lastt [getuser $user XTRA LASTMODIFBY]
  5876. if {$lastt == ""} { set lastt "No info" }
  5877. if {[matchattr $user n|- $chan]} { set lastt "NONE" }
  5878. blacktools:tell $nick $host $hand $chan $chan1 info.13 "$lastt $date"
  5879. if {[getuser $user HOSTS] != ""} {
  5880. set hosts [getuser $user hosts]
  5881. blacktools:tell $nick $host $hand $chan $chan1 info.6 $hosts
  5882. }
  5883. if {![info exists exit]} { set exit "NONE"}
  5884. if {![matchattr $user nm|- $chan] && [matchattr $hand nm|- $chan]} {
  5885. blacktools:tell $nick $host $hand $chan $chan1 info.5 "[join $exit]"
  5886. }
  5887. set lastseen [getuser $user LASTON $chan]
  5888. if {($lastseen == "0") || ($lastseen == "")} {
  5889. blacktools:tell $nick $host $hand $chan $chan1 info.14 none
  5890. blacktools:tell $nick $host $hand $chan $chan1 info.15 $user
  5891. blacktools:tell $nick $host $hand $chan $chan1 info.16 none
  5892. return
  5893. }
  5894. set seened [ctime $lastseen]
  5895. blacktools:tell $nick $host $hand $chan $chan1 info.17 $seened
  5896. blacktools:tell $nick $host $hand $chan $chan1 info.15 $user
  5897. blacktools:tell $nick $host $hand $chan $chan1 info.16 none
  5898. }
  5899. ################################# s ###############################
  5900. proc spublic {nick host hand chan arg} {
  5901. global black
  5902. set type 0
  5903. set chan1 "$chan"
  5904. set users [lindex [split $arg] 0]
  5905. if {[regexp {^[&#]} $users] && [matchattr $hand nm|- $chan]} {
  5906. set chan "$users"
  5907. set users [lindex [split $arg] 1]
  5908. }
  5909. s:process $nick $host $hand $chan $chan1 $users $type
  5910. }
  5911. proc s:process {nick host hand chan chan1 users type} {
  5912. global botnick black
  5913. set flags "-|q"
  5914. set char(p) [lindex $black(cmdchar) 0]
  5915. if {[string match -nocase "none" "$char(p)"]} {
  5916. set char(p) ""
  5917. }
  5918. set time [ctime [unixtime]]
  5919. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  5920. return
  5921. }
  5922. if {[matchattr $hand nm|- $chan]} {
  5923. if {($users == "") && ($type == "0")} {
  5924. blacktools:tell $nick $host $hand $chan $chan1 s.1 none
  5925. return
  5926. }
  5927. if {($users == "") && ($type == "1")} {
  5928. blacktools:tell $nick $host $hand $chan $chan1 s.2 none
  5929. return
  5930. }
  5931. }
  5932. if {($users == "") && ($type == "0")} {
  5933. blacktools:tell $nick $host $hand $chan $chan1 s.3 none
  5934. return
  5935. }
  5936. if {($users == "") && ($type == "1")} {
  5937. blacktools:tell $nick $host $hand $chan $chan1 s.4 none
  5938. return
  5939. }
  5940. if {![validchan $chan]} {
  5941. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  5942. return
  5943. }
  5944. if {![onchan $botnick $chan]} {
  5945. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  5946. return
  5947. }
  5948. if {[matchattr $users -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 s.5 $users
  5949. return
  5950. }
  5951. if {![validuser $users]} {
  5952. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  5953. return
  5954. }
  5955. if {![matchattr $users nm|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  5956. return
  5957. }
  5958. if {[matchattr $users -|M $chan] && [matchattr $hand -|M $chan]} {
  5959. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5960. return
  5961. }
  5962. if {[matchattr $users -|M $chan] && [matchattr $hand -|A $chan]} {
  5963. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5964. return
  5965. }
  5966. if {[matchattr $users m|- $chan] && [matchattr $hand -|M $chan]} {
  5967. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5968. return
  5969. }
  5970. if {[matchattr $users m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  5971. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5972. return
  5973. }
  5974. if {[matchattr $users m|- $chan] && [matchattr $hand -|A $chan]} {
  5975. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5976. return
  5977. }
  5978. if {[matchattr $users -|A $chan] && [matchattr $hand -|A $chan]} {
  5979. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5980. return
  5981. }
  5982. if {[matchattr $users n|- $chan] && [matchattr $hand -|A $chan]} {
  5983. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5984. return
  5985. }
  5986. if {[matchattr $users n|- $chan] && [matchattr $hand -|M $chan]} {
  5987. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5988. return
  5989. }
  5990. if {[matchattr $users n|- $chan] && [matchattr $hand n|- $chan]} {
  5991. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5992. return
  5993. }
  5994. if {[matchattr $users n|- $chan] && [matchattr $hand m|- $chan]} {
  5995. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  5996. return
  5997. }
  5998. chattr $users $flags $chan
  5999. setuser $users XTRA LASTMODIFBY $hand
  6000. setuser $users XTRA LASTMODIFDATE $time
  6001. blacktools:tell $nick $host $hand $chan $chan1 s.6 $users
  6002. }
  6003. ################################## us ################################
  6004. proc uspublic {nick host hand chan arg} {
  6005. global black
  6006. set type 0
  6007. set chan1 "$chan"
  6008. set users [lindex [split $arg] 0]
  6009. if {[regexp {^[&#]} $users] && [matchattr $hand nm|- $chan]} {
  6010. set chan "$users"
  6011. set users [lindex [split $arg] 1]
  6012. }
  6013. us:process $nick $host $hand $chan $chan1 $users $type
  6014. }
  6015. proc us:process {nick host hand chan chan1 users type} {
  6016. global botnick black
  6017. set flags "-|-q"
  6018. set char(p) [lindex $black(cmdchar) 0]
  6019. if {[string match -nocase "none" "$char(p)"]} {
  6020. set char(p) ""
  6021. }
  6022. set time [ctime [unixtime]]
  6023. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  6024. return
  6025. }
  6026. if {[matchattr $hand nm|- $chan]} {
  6027. if {($users == "") && ($type == "0")} {
  6028. blacktools:tell $nick $host $hand $chan $chan1 us.1 none
  6029. return
  6030. }
  6031. if {($users == "") && ($type == "1")} {
  6032. blacktools:tell $nick $host $hand $chan $chan1 us.2 none
  6033. return
  6034. }
  6035. }
  6036. if {($users == "") && ($type == "0")} {
  6037. blacktools:tell $nick $host $hand $chan $chan1 us.3 none
  6038. return
  6039. }
  6040. if {($users == "") && ($type == "1")} {
  6041. blacktools:tell $nick $host $hand $chan $chan1 us.4 none
  6042. return
  6043. }
  6044. if {![validchan $chan]} {
  6045. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  6046. return
  6047. }
  6048. if {![onchan $botnick $chan]} {
  6049. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  6050. return
  6051. }
  6052. if {![validuser $users]} {
  6053. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  6054. return
  6055. }
  6056. if {![matchattr $users nm|OASMNV $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  6057. return
  6058. }
  6059. if {![matchattr $users -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 us.5 $users
  6060. return
  6061. }
  6062. if {[matchattr $users -|M $chan] && [matchattr $hand -|M $chan]} {
  6063. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6064. return
  6065. }
  6066. if {[matchattr $users -|M $chan] && [matchattr $hand -|A $chan]} {
  6067. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6068. return
  6069. }
  6070. if {[matchattr $users m|- $chan] && [matchattr $hand -|M $chan]} {
  6071. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6072. return
  6073. }
  6074. if {[matchattr $users m|- $chan] && [matchattr $hand -|A $chan]} {
  6075. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6076. return
  6077. }
  6078. if {[matchattr $users m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  6079. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6080. return
  6081. }
  6082. if {[matchattr $users -|A $chan] && [matchattr $hand -|A $chan]} {
  6083. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6084. return
  6085. }
  6086. if {[matchattr $users n|- $chan] && [matchattr $hand -|A $chan]} {
  6087. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6088. return
  6089. }
  6090. if {[matchattr $users n|- $chan] && [matchattr $hand -|M $chan]} {
  6091. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6092. return
  6093. }
  6094. if {[matchattr $users n|- $chan] && [matchattr $hand n|- $chan]} {
  6095. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6096. return
  6097. }
  6098. if {[matchattr $users n|- $chan] && [matchattr $hand m|- $chan]} {
  6099. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6100. return
  6101. }
  6102. setuser $users XTRA LASTMODIFBY $hand
  6103. setuser $users XTRA LASTMODIFDATE $time
  6104. chattr $users $flags $chan
  6105. blacktools:tell $nick $host $hand $chan $chan1 us.6 $users
  6106. }
  6107. ############################## ping ##################################
  6108. proc pings {nick host hand chan arg} {
  6109. putquick "PRIVMSG $nick :\001PING [expr {abs([clock clicks -milliseconds])}]\001"
  6110. return
  6111. }
  6112. proc pingpublic {nick host hand dest key arg} {
  6113. global botnick black
  6114. set ping [split $arg "."]
  6115. set pingreply [lindex $ping 0]
  6116. if {[regexp -- {^-?[0-9]+$} $pingreply]} {
  6117. set second "[expr {abs([expr [expr {abs([clock clicks -milliseconds])} - $pingreply] / 1000.000])}]"
  6118. blacktools:tell:prv $nick $host $hand ping.1 $second
  6119. }
  6120. }
  6121. ############################### time ##################################
  6122. proc timepublic {nick host hand chan arg} {
  6123. global black
  6124. set chan1 "$chan"
  6125. set time [ctime [unixtime]]
  6126. blacktools:tell $nick $host $hand $chan $chan1 time.1 $time
  6127. }
  6128. ################################### vers ###############################
  6129. proc verspublic {nick host hand chan arg} {
  6130. global black
  6131. set why [lindex [split $arg] 0]
  6132. set chan1 "$chan"
  6133. set char(p) [lindex $black(cmdchar) 0]
  6134. if {[string match -nocase "none" "$char(p)"]} {
  6135. set char(p) ""
  6136. }
  6137. if {$why == ""} { blacktools:tell $nick $host $hand $chan $chan1 vers.1 none
  6138. return
  6139. }
  6140. vers:process $nick $host $hand $chan $chan1 $why
  6141. }
  6142. proc vers:process {nick host hand chan chan1 why} {
  6143. global botnick black
  6144. set ::verschan $chan
  6145. set ::versnick $nick
  6146. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  6147. return
  6148. }
  6149. if {![onchan $why $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan $why
  6150. return
  6151. }
  6152. putserv "PRIVMSG $why :\001VERSION\001"
  6153. }
  6154. proc ctcpvers {nickname hostname handle dest key arg} {
  6155. global black
  6156. set text [split $arg]
  6157. set chan $::verschan
  6158. set nick $::versnick
  6159. blacktools:tell:prv $nick $hostname $handle vers.3 "$nickname $text"
  6160. }
  6161. ################################### whois ###############################
  6162. proc whoispublic {nick host hand chan arg} {
  6163. global black
  6164. set char(p) [lindex $black(cmdchar) 0]
  6165. if {[string match -nocase "none" "$char(p)"]} {
  6166. set char(p) ""
  6167. }
  6168. set chan1 "$chan"
  6169. set who [lindex [split $arg] 0]
  6170. if {$who == ""} { blacktools:tell $nick $host $hand $chan $chan1 whois.1 none
  6171. return
  6172. }
  6173. whois:process $nick $host $hand $chan $chan1 $who
  6174. }
  6175. proc whois:process {nick host hand chan chan1 who} {
  6176. global botnick black
  6177. set ::wnick $nick
  6178. set ::hand $hand
  6179. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  6180. return
  6181. }
  6182. putquick "WHOIS $who $who"
  6183. bind RAW - 311 winfo
  6184. bind RAW - 319 wchannels
  6185. bind RAW - 401 nonicks
  6186. utimer 1 [list check:if:bind "winfo" "311"]
  6187. utimer 1 [list check:if:bind "wchannels" "319"]
  6188. utimer 1 [list check:if:bind "nonicks" "401"]
  6189. }
  6190. proc winfo { from keyword arguments } {
  6191. global black
  6192. set hand $::hand
  6193. set nick $::wnick
  6194. set nickname [lindex [split $arguments] 1]
  6195. set ident [lindex [split $arguments] 2]
  6196. set host [lindex [split $arguments] 3]
  6197. set realname [string range [join [lrange $arguments 5 end]] 1 end]
  6198. blacktools:tell:prv $nick hostname $hand whois.3 "$nickname host - *!*$ident@$host * $realname"
  6199. check:if:bind "winfo" "311"
  6200. }
  6201. proc wchannels { from keyword arguments } {
  6202. global black
  6203. set hand $::hand
  6204. set nick $::wnick
  6205. set channels [string range [join [lrange $arguments 2 end]] 1 end]
  6206. blacktools:tell:prv $nick hostname $hand whois.4 $channels
  6207. check:if:bind "wchannels" "319"
  6208. }
  6209. proc nonicks { from keyword arguments } {
  6210. global black
  6211. set hand $::hand
  6212. set nick $::wnick
  6213. blacktools:tell:prv $nick hostname $hand whois.5 none
  6214. check:if:bind "nonicks" "401"
  6215. }
  6216. ################################### clear ###############################
  6217. proc clearpublic {nick host hand chan arg} {
  6218. global black
  6219. set why [lindex [split $arg] 0]
  6220. set chan1 "$chan"
  6221. set type 0
  6222. if {[regexp {^[&#]} $why] && [matchattr $hand nm|- $chan]} {
  6223. set chan "$why"
  6224. set why [lindex [split $arg] 1]
  6225. }
  6226. clear:process $nick $host $hand $chan $chan1 $why $type
  6227. }
  6228. proc clear:process {nick host hand chan chan1 why type} {
  6229. global botnick black
  6230. set char(p) [lindex $black(cmdchar) 0]
  6231. if {[string match -nocase "none" "$char(p)"]} {
  6232. set char(p) ""
  6233. }
  6234. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  6235. return
  6236. }
  6237. if {[matchattr $hand nm|- $chan]} {
  6238. if {($why == "") && ($type == "0")} {
  6239. blacktools:tell $nick $host $hand $chan $chan1 clear.1 none
  6240. return
  6241. }
  6242. if {($why == "") && ($type == "1")} {
  6243. blacktools:tell $nick $host $hand $chan $chan1 clear.2 none
  6244. return
  6245. }
  6246. }
  6247. if {($why == "") && ($type == "0")} {
  6248. blacktools:tell $nick $host $hand $chan $chan1 clear.3 none
  6249. return
  6250. }
  6251. if {($why == "") && ($type == "1")} {
  6252. blacktools:tell $nick $host $hand $chan $chan1 clear.4 none
  6253. return
  6254. }
  6255. if {![validchan $chan]} {
  6256. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  6257. return
  6258. }
  6259. if {![onchan $botnick $chan]} {
  6260. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  6261. return
  6262. }
  6263. if {([regexp -nocase -- {(#[0-9]+|banlist|userlist|settings|activ)} $why tmp cleanlist]) && (![regexp -nocase -- {\S#} $why])} {
  6264. switch $cleanlist {
  6265. userlist {
  6266. set list [userlist -|AOSV $chan]
  6267. foreach user $list {
  6268. chattr $user -|-AHOVS $chan
  6269. }
  6270. blacktools:tell $nick $host $hand $chan $chan1 clear.5 none
  6271. }
  6272. activ {
  6273. set counter 0
  6274. set options "check($chan) id($chan) dr($chan) b($chan) spam($chan) n($chan) i($chan) Black($chan) w($chan) d($chan) k($chan) stick($chan) bw($chan) bot($chan)"
  6275. foreach user [userlist "mn|HAMOVSo" $chan] {
  6276. set counter [expr $counter + 1]
  6277. foreach op $options {
  6278. if {[getuser $user XTRA $op] != "" || [getuser $user XTRA $op] != 0} {
  6279. setuser $user XTRA $op 0
  6280. }
  6281. }
  6282. }
  6283. blacktools:tell $nick $host $hand $chan $chan1 clear.8 $counter
  6284. return
  6285. }
  6286. banlist {
  6287. set i 0
  6288. foreach ban [banlist $chan] {
  6289. set theban [lindex $ban 0]
  6290. if {[string match "*" $theban]} {
  6291. set i [expr $i +1]
  6292. killchanban $chan $theban
  6293. }
  6294. }
  6295. blacktools:tell $nick $host $hand $chan $chan1 clear.6 $i
  6296. }
  6297. settings {
  6298. set settings "antipub topiclock antinotice antictcp antilongtext antibadword antijoinpart antispam antirepeat badquitpart anticolor antibold antiunderline anticaps badfullname badnick badident antijoinflood antichanflood xtools topicrefresh count antibadchan anunt limit refresh clonescan seen antidle antividle antididle autoop autovoice leave chanreport topwords xban protectop protectvoice dontop dontdeop private silent showtime showhandle showcount"
  6299. set counter 0
  6300. foreach setting $settings {
  6301. if {[channel get $chan $setting]} {
  6302. set counter [expr $counter + 1]
  6303. channel set $chan -$setting
  6304. }
  6305. }
  6306. blacktools:tell $nick $host $hand $chan $chan1 clear.7 $counter
  6307. }
  6308. }
  6309. }
  6310. }
  6311. proc autovonjoin {nick host hand chan} {
  6312. if {[channel get $chan autovoice]} {
  6313. pushmode $chan +v $nick
  6314. }
  6315. }
  6316. proc autoponjoin {nick host hand chan} {
  6317. if {[channel get $chan autoop]} {
  6318. pushmode $chan +o $nick
  6319. }
  6320. }
  6321. ############################# auto #################################
  6322. proc auto:join {nick host hand chan} {
  6323. global black
  6324. if {[matchattr $hand a|a $chan]} {
  6325. pushmode $chan +o $nick
  6326. }
  6327. if {[matchattr $hand g|g $chan]} {
  6328. pushmode $chan +v $nick
  6329. }
  6330. }
  6331. proc autopublic {nick host hand chan arg} {
  6332. global black
  6333. set type 0
  6334. set chan1 "$chan"
  6335. set user [lindex [split $arg] 1]
  6336. set option [lindex [split $arg] 0]
  6337. set global [lindex [split $arg] 2]
  6338. if {[regexp {^[&#]} $option] && [matchattr $hand nm|- $chan] && ![string equal -nocase $global "-global"]} {
  6339. set chan "$option"
  6340. set user [lindex [split $arg] 2]
  6341. set option [lindex [split $arg] 1]
  6342. set global [lindex [split $arg] 3]
  6343. }
  6344. auto:process $nick $host $hand $chan $chan1 $user $option $global $type
  6345. }
  6346. proc auto:process {nick host hand chan chan1 user option global type} {
  6347. global black
  6348. if {[matchattr $hand nm|- $chan]} {
  6349. if {$type == "0"} {
  6350. if {![regexp {^[+ -]} $option]} {
  6351. blacktools:tell $nick $host $hand $chan $chan1 auto.3 none
  6352. return
  6353. }
  6354. if {$user == ""} {
  6355. blacktools:tell $nick $host $hand $chan $chan1 auto.3 none
  6356. return
  6357. }
  6358. } else {
  6359. if {![regexp {^[+ -]} $option]} {
  6360. blacktools:tell $nick $host $hand $chan $chan1 auto.4 none
  6361. return
  6362. }
  6363. if {$user == ""} {
  6364. blacktools:tell $nick $host $hand $chan $chan1 auto.4 none
  6365. return
  6366. }
  6367. }
  6368. }
  6369. if {$type == "0"} {
  6370. if {![regexp {^[+ -]} $option]} {
  6371. blacktools:tell $nick $host $hand $chan $chan1 auto.1 none
  6372. return
  6373. }
  6374. if {$user == ""} {
  6375. blacktools:tell $nick $host $hand $chan $chan1 auto.1 none
  6376. return
  6377. }
  6378. } else {
  6379. if {![regexp {^[+ -]} $option]} {
  6380. blacktools:tell $nick $host $hand $chan $chan1 auto.2 none
  6381. return
  6382. }
  6383. if {$user == ""} {
  6384. blacktools:tell $nick $host $hand $chan $chan1 auto.2 none
  6385. return
  6386. }
  6387. }
  6388. set verify [string trim $option {"+","-"}]
  6389. if {[string equal -nocase $verify "o"] || [string equal -nocase $verify "v"]} {
  6390. if {[onchan $user $chan] && ![validuser $user]} {
  6391. set user [nick2hand $user]
  6392. }
  6393. if {![validuser $user]} {
  6394. blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  6395. return
  6396. }
  6397. if {[matchattr $user nm|AM $chan] && [matchattr $hand nm|AM $chan] && [string equal -nocase $hand $user]} {
  6398. auto:same $nick $host $hand $chan $chan1 $user $option $global $type
  6399. return
  6400. }
  6401. if {[matchattr $user -|M $chan] && [matchattr $hand -|M $chan]} {
  6402. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6403. return
  6404. }
  6405. if {[matchattr $user -|M $chan] && [matchattr $hand -|A $chan]} {
  6406. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6407. return
  6408. }
  6409. if {[matchattr $user m|- $chan] && [matchattr $hand -|M $chan]} {
  6410. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6411. return
  6412. }
  6413. if {[matchattr $user m|- $chan] && [matchattr $hand m|- $chan] && (![matchattr $hand n|- $chan])} {
  6414. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6415. return
  6416. }
  6417. if {[matchattr $user m|- $chan] && [matchattr $hand -|A $chan]} {
  6418. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6419. return
  6420. }
  6421. if {[matchattr $user -|A $chan] && [matchattr $hand -|A $chan]} {
  6422. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6423. return
  6424. }
  6425. if {[matchattr $user n|- $chan] && [matchattr $hand -|A $chan]} {
  6426. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6427. return
  6428. }
  6429. if {[matchattr $user n|- $chan] && [matchattr $hand -|M $chan]} {
  6430. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6431. return
  6432. }
  6433. if {[matchattr $user n|- $chan] && [matchattr $hand n|- $chan]} {
  6434. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6435. return
  6436. }
  6437. if {[matchattr $user n|- $chan] && [matchattr $hand m|- $chan]} {
  6438. blacktools:tell $nick $host $hand $chan $chan1 gl.nomodif none
  6439. return
  6440. }
  6441. }
  6442. if {[string equal -nocase "$global" "-global"] && [matchattr $hand nm|- $chan]} {
  6443. if {[string equal -nocase $option "+o"]} {
  6444. chattr $user +a
  6445. blacktools:tell $nick $host $hand $chan $chan1 auto.12 $user
  6446. }
  6447. if {[string equal -nocase $option "-o"]} {
  6448. chattr $user -a
  6449. blacktools:tell $nick $host $hand $chan $chan1 auto.20 $user
  6450. }
  6451. if {[string equal -nocase $option "+v"]} {
  6452. chattr $user +g
  6453. blacktools:tell $nick $host $hand $chan $chan1 auto.13 $user
  6454. }
  6455. if {[string equal -nocase $option "-v"]} {
  6456. chattr $user -g
  6457. blacktools:tell $nick $host $hand $chan $chan1 auto.21 $user
  6458. }
  6459. return
  6460. }
  6461. if {[string equal -nocase $option "+o"]} {
  6462. chattr $user -|a $chan
  6463. blacktools:tell $nick $host $hand $chan $chan1 auto.10 $user
  6464. }
  6465. if {[string equal -nocase $option "-o"]} {
  6466. chattr $user -|-a $chan
  6467. blacktools:tell $nick $host $hand $chan $chan1 auto.18 $user
  6468. }
  6469. if {[string equal -nocase $option "+v"]} {
  6470. chattr $user -|g $chan
  6471. blacktools:tell $nick $host $hand $chan $chan1 auto.11 $user
  6472. }
  6473. if {[string equal -nocase $option "-v"]} {
  6474. chattr $user -|-g $chan
  6475. blacktools:tell $nick $host $hand $chan $chan1 auto.19 $user
  6476. }
  6477. }
  6478. proc auto:same {nick host hand chan chan1 user option global type} {
  6479. global black
  6480. if {[string equal -nocase "$global" "-global"] && [matchattr $hand nm|- $chan]} {
  6481. if {[string equal -nocase $option "+o"]} {
  6482. chattr $user +a
  6483. blacktools:tell $nick $host $hand $chan $chan1 auto.6 none
  6484. }
  6485. if {[string equal -nocase $option "-o"]} {
  6486. chattr $user -a
  6487. blacktools:tell $nick $host $hand $chan $chan1 auto.14 none
  6488. }
  6489. if {[string equal -nocase $option "+v"]} {
  6490. chattr $user +g
  6491. blacktools:tell $nick $host $hand $chan $chan1 auto.7 none
  6492. }
  6493. if {[string equal -nocase $option "-v"]} {
  6494. chattr $user -g
  6495. blacktools:tell $nick $host $hand $chan $chan1 auto.15 none
  6496. }
  6497. return
  6498. }
  6499. if {[string equal -nocase $option "+o"]} {
  6500. chattr $user -|a $chan
  6501. blacktools:tell $nick $host $hand $chan $chan1 auto.8 none
  6502. }
  6503. if {[string equal -nocase $option "-o"]} {
  6504. chattr $user -|-a $chan
  6505. blacktools:tell $nick $host $hand $chan $chan1 auto.16 none
  6506. }
  6507. if {[string equal -nocase $option "+v"]} {
  6508. chattr $user -|g $chan
  6509. blacktools:tell $nick $host $hand $chan $chan1 auto.9 none
  6510. }
  6511. if {[string equal -nocase $option "-v"]} {
  6512. chattr $user -|-g $chan
  6513. blacktools:tell $nick $host $hand $chan $chan1 auto.17 none
  6514. }
  6515. }
  6516. ############################## activ ##################################
  6517. proc activpublic {nick host hand chan arg} {
  6518. global black
  6519. set type 0
  6520. set chan1 "$chan"
  6521. set user [lindex [split $arg] 0]
  6522. set option [lindex [split $arg] 1]
  6523. if {[regexp {^[&#]} $user] && [matchattr $hand nm|- $chan]} {
  6524. set chan "$user"
  6525. set user [lindex [split $arg] 1]
  6526. set option [lindex [split $arg] 2]
  6527. }
  6528. activ:process $nick $host $hand $chan $chan1 $user $option $type
  6529. }
  6530. proc activ:process {nick host hand chan chan1 user option type} {
  6531. global botnick black
  6532. set char(p) [lindex $black(cmdchar) 0]
  6533. if {[string match -nocase "none" "$char(p)"]} {
  6534. set char(p) ""
  6535. }
  6536. if {[matchattr $hand nm|- $chan]} {
  6537. if {($user == "") && ($type == "0")} {
  6538. blacktools:tell $nick $host $hand $chan $chan1 activ.1 none
  6539. return
  6540. }
  6541. if {($user == "") && ($type == "1")} {
  6542. blacktools:tell $nick $host $hand $chan $chan1 activ.2 none
  6543. return
  6544. }
  6545. }
  6546. if {($user == "") && ($type == "0")} {
  6547. blacktools:tell $nick $host $hand $chan $chan1 activ.3 none
  6548. return
  6549. }
  6550. if {($user == "") && ($type == "1")} {
  6551. blacktools:tell $nick $host $hand $chan $chan1 activ.4 none
  6552. return
  6553. }
  6554. if {![validchan $chan]} {
  6555. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  6556. return
  6557. }
  6558. if {![onchan $botnick $chan]} {
  6559. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  6560. return
  6561. }
  6562. if {[matchattr $hand "mn|M" $chan] && ($option != "")} {
  6563. if {(![string equal -nocase "-reset" $option])} {
  6564. blacktools:tell $nick $host $hand $chan $chan1 activ.10 none
  6565. return
  6566. }
  6567. if {![validuser $user]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  6568. return
  6569. }
  6570. if {![matchattr $user mn|OAVMS $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  6571. return
  6572. }
  6573. set options "check($chan) id($chan) dr($chan) b($chan) spam($chan) n($chan) i($chan) Black($chan) w($chan) d($chan) k($chan) stick($chan) bw($chan) bot($chan)"
  6574. set found_it 1
  6575. foreach op $options {
  6576. if {[getuser $user XTRA $op] != "" || [getuser $user XTRA $op] != 0} {
  6577. setuser $user XTRA $op 0
  6578. }
  6579. }
  6580. blacktools:tell $nick $host $hand $chan $chan1 activ.11 $user
  6581. return
  6582. }
  6583. if {![validuser $user]} { blacktools:tell $nick $host $hand $chan $chan1 gl.nomem none
  6584. return
  6585. }
  6586. if {![matchattr $user mn|OAVMS $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.noaccess none
  6587. return
  6588. }
  6589. set dr [getuser $user XTRA DR($chan)]
  6590. set ban [getuser $user XTRA b($chan)]
  6591. set spam [getuser $user XTRA spam($chan)]
  6592. set badnick [getuser $user XTRA n($chan)]
  6593. set invite [getuser $user XTRA i($chan)]
  6594. set blacks [getuser $user XTRA Black($chan)]
  6595. set warn [getuser $user XTRA w($chan)]
  6596. set day [getuser $user XTRA d($chan)]
  6597. set kick [getuser $user XTRA k($chan)]
  6598. set stick [getuser $user XTRA stick($chan)]
  6599. set bw [getuser $user XTRA bw($chan)]
  6600. set bot [getuser $user XTRA bot($chan)]
  6601. set id [getuser $user XTRA id($chan)]
  6602. set check [getuser $user XTRA check($chan)]
  6603. if {$ban == ""} { set ban "0" }
  6604. if {$dr == ""} { set dr "0" }
  6605. if {$spam == ""} { set spam "0" }
  6606. if {$badnick == ""} { set badnick "0" }
  6607. if {$invite == ""} { set invite "0" }
  6608. if {$blacks == ""} { set blacks "0" }
  6609. if {$warn == ""} { set warn "0" }
  6610. if {$day == ""} { set day "0" }
  6611. if {$kick == ""} { set kick "0" }
  6612. if {$stick == ""} { set stick "0" }
  6613. if {$bw == ""} { set bw "0" }
  6614. if {$bot == ""} { set bot "0" }
  6615. if {$id == ""} { set id "0"}
  6616. if {$check == ""} { set check "0" }
  6617. if {[matchattr $user mn|AMS $chan]} {
  6618. blacktools:tell $nick $host $hand $chan $chan1 activ.5 $user
  6619. blacktools:tell $nick $host $hand $chan $chan1 activ.6 "- $char(p)dr - ($dr) | - $char(p)bot - ($bot) | - $char(p)b - ($ban) | - $char(p)spam - ($spam) | - $char(p)n - ($badnick) | - $char(p)i - ($invite) | - $char(p)black - ($blacks) | - $char(p)w - ($warn) | - $char(p)d - ($day) | - $char(p)k - ($kick) | - $char(p)stick - ($stick) | - $char(p)bw - ($bw) | - $char(p)id - ($id) | - $char(p)check - ($check) ."
  6620. blacktools:tell $nick $host $hand $chan $chan1 activ.7 none
  6621. return
  6622. }
  6623. if {[matchattr $user -|O $chan]} {
  6624. blacktools:tell $nick $host $hand $chan $chan1 activ.8 $user
  6625. blacktools:tell $nick $host $hand $chan $chan1 activ.6 "- $char(p)dr - ($dr) | - $char(p)bot - ($bot) | - $char(p)b - ($ban) | - $char(p)spam - ($spam) | - $char(p)n - ($badnick) | - $char(p)i - ($invite) | - $char(p)w - ($warn) | - $char(p)k - ($kick) | - $char(p)bw - ($bw) | - $char(p)id - ($id) | - $char(p)check - ($check) ."
  6626. blacktools:tell $nick $host $hand $chan $chan1 activ.7 none
  6627. return
  6628. }
  6629. if {[matchattr $user -|V $chan]} {
  6630. blacktools:tell $nick $host $hand $chan $chan1 activ.9 $user
  6631. blacktools:tell $nick $host $hand $chan $chan1 activ.6 "- $char(p)w - ($warn) | - $char(p)k - ($kick)"
  6632. blacktools:tell $nick $host $hand $chan $chan1 activ.7 none
  6633. return
  6634. }
  6635. }
  6636. ######################## cc (channel created) #######################
  6637. proc createdpublic { from keyword arguments } {
  6638. set hand $::hand
  6639. set nick $::ccnick
  6640. set date [lindex [split $arguments] 2]
  6641. set dates [ctime $date]
  6642. blacktools:tell:prv $nick host $hand cc.3 $dates
  6643. unbind RAW - 329 createdpublic
  6644. }
  6645. proc nocreatedpublic { from keyword arguments } {
  6646. set hand $::hand
  6647. set nick $::ccnick
  6648. blacktools:tell:prv $nick host $hand cc.4 none
  6649. unbind RAW - 403 nocreatedpublic
  6650. }
  6651. proc ccpublic {nick host hand chan arg} {
  6652. global black
  6653. set ::ccnick $nick
  6654. set ::hand $hand
  6655. set chan1 "$chan"
  6656. set c [lindex [split $arg] 0]
  6657. set char(p) [lindex $black(cmdchar) 0]
  6658. if {[string match -nocase "none" "$char(p)"]} {
  6659. set char(p) ""
  6660. }
  6661. if {$c == ""} { blacktools:tell $nick $host $hand $chan $chan1 cc.1 none
  6662. return 0
  6663. }
  6664. if {![regexp {^[&#]} $c]} {
  6665. set c #$c
  6666. }
  6667. putquick "MODE $c"
  6668. bind raw - 329 createdpublic
  6669. bind raw - 403 nocreatedpublic
  6670. }
  6671. proc stats:process {nick host hand chan chan1} {
  6672. global botnick black username
  6673. set statsdir "scripts/BlackTools/FILES/$username.stats.txt"
  6674. set ops 0
  6675. set numban 0
  6676. set voices 0
  6677. set numuser 0
  6678. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  6679. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  6680. set time [unixtime]
  6681. set file [open $statsdir "r"]
  6682. set database [read -nonewline $file]
  6683. set data [split $database "\n"]
  6684. foreach line $data {
  6685. set c [lindex [split $line] 0]
  6686. set type [lindex [split $line] 1]
  6687. if {[string match "ADDED" "$type"] && [string match -nocase $c $chan]} {
  6688. set foundchan 1
  6689. set chanadded 1
  6690. set awho [lindex [split $line] 2]
  6691. set ahost [lindex [split $line] 3]
  6692. set a1time [lindex [split $line] 4]
  6693. if {[regexp {^[0-9]} $a1time]} {
  6694. set duration [duration [expr [unixtime] - $a1time]]
  6695. } else { set duration "NONE" }
  6696. if {[regexp {^[0-9]} $a1time]} {
  6697. set atime [clock format $a1time -format %D-%H:%M:%S]
  6698. } else { set atime "NONE"}
  6699. set replace(%ahost%) $ahost
  6700. set replace(%atime%) $atime
  6701. set replace(%duration%) $duration
  6702. set replace(%awho%) $awho
  6703. lappend mes "[string map [array get replace] $black(say.$getlang.stats.1)]"
  6704. lappend mes1 "[string map [array get replace] $black(say.$getlang.stats.2)]"
  6705. }
  6706. if {[string match "REMOVED" "$type"] && [string match -nocase $c $chan]} {
  6707. set foundchan 1
  6708. set chanremoved 1
  6709. set rwho [lindex [split $line] 2]
  6710. set rhost [lindex [split $line] 3]
  6711. set rtime [lindex [split $line] 4]
  6712. set a1time [lindex [split $line] 5]
  6713. if {[regexp {^[0-9]} $a1time]} {
  6714. set duration [duration [expr [unixtime] - $a1time]]
  6715. } else { set duration "NONE" }
  6716. if {[regexp {^[0-9]} $a1time]} {
  6717. set atime [clock format $a1time -format %D-%H:%M:%S]
  6718. } else { set atime "NONE"}
  6719. if {[regexp {^[0-9]} $rtime]} {
  6720. set rtime [clock format $rtime -format %D-%H:%M:%S]
  6721. } else { set rtime "NONE" }
  6722. set awho [lindex [split $line] 6]
  6723. set ahost [lindex [split $line] 7]
  6724. set reason [lrange [split $line] 8 end]
  6725. set replace(%ahost%) $ahost
  6726. set replace(%atime%) $atime
  6727. set replace(%rtime%) $rtime
  6728. set replace(%duration%) $duration
  6729. set replace(%awho%) $awho
  6730. set replace(%rwho%) $rwho
  6731. set replace(%rhost%) $rhost
  6732. set replace(%reason%) $reason
  6733. lappend mes "[string map [array get replace] $black(say.$getlang.stats.1)]"
  6734. lappend mes1 "[string map [array get replace] $black(say.$getlang.stats.3)]"
  6735. lappend mes2 "[string map [array get replace] $black(say.$getlang.stats.4)]"
  6736. lappend mes3 "[string map [array get replace] $black(say.$getlang.stats.14)]"
  6737. }
  6738. if {[string match "SUSPENDED" "$type"] && [string match -nocase $c $chan]} {
  6739. set foundchan 1
  6740. set chansuspended 1
  6741. set rwho [lindex [split $line] 2]
  6742. set rhost [lindex [split $line] 3]
  6743. set rtime [lindex [split $line] 4]
  6744. set a1time [lindex [split $line] 5]
  6745. if {[regexp {^[0-9]} $a1time]} {
  6746. set duration [duration [expr [unixtime] - $a1time]]
  6747. } else { set duration "NONE" }
  6748. if {[regexp {^[0-9]} $a1time]} {
  6749. set atime [clock format $a1time -format %D-%H:%M:%S]
  6750. } else { set atime "NONE"}
  6751. if {[regexp {^[0-9]} $rtime]} {
  6752. set rtime [clock format $rtime -format %D-%H:%M:%S]
  6753. } else { set rtime "NONE" }
  6754. set awho [lindex [split $line] 6]
  6755. set ahost [lindex [split $line] 7]
  6756. set reason [lrange [split $line] 8 end]
  6757. set replace(%ahost%) $ahost
  6758. set replace(%atime%) $atime
  6759. set replace(%stime%) $rtime
  6760. set replace(%duration%) $duration
  6761. set replace(%awho%) $awho
  6762. set replace(%swho%) $rwho
  6763. set replace(%shost%) $rhost
  6764. set replace(%reason%) $reason
  6765. lappend mes "[string map [array get replace] $black(say.$getlang.stats.1)]"
  6766. lappend mes1 "[string map [array get replace] $black(say.$getlang.stats.2)]"
  6767. lappend mes2 "[string map [array get replace] $black(say.$getlang.stats.13)]"
  6768. lappend mes3 "[string map [array get replace] $black(say.$getlang.stats.14)]"
  6769. }
  6770. }
  6771. if {![info exists foundchan]} {
  6772. blacktools:tell $nick $host $hand $chan $chan1 stats.5 none
  6773. return
  6774. }
  6775. if {[validchan $chan]} {
  6776. if {[onchan $botnick $chan]} {
  6777. set numban [llength [banlist $chan]]
  6778. set numuser [llength [chanlist $chan]]
  6779. foreach user [chanlist $chan] {
  6780. if {[isop $user $chan] && (![isvoice $user $chan])} {
  6781. set ops [expr $ops +1]
  6782. }
  6783. if {[isvoice $user $chan]} {
  6784. set voices [expr $voices +1]
  6785. }
  6786. }
  6787. }
  6788. }
  6789. if {[info exists chanadded]} {
  6790. blacktools:tell $nick $host $hand $chan $chan1 stats.6 none
  6791. blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes]"
  6792. if {[validchan $chan]} {
  6793. if {![onchan $botnick $chan]} {
  6794. blacktools:tell $nick $host $hand $chan $chan1 stats.9 none
  6795. } else {
  6796. blacktools:tell $nick $host $hand $chan $chan1 stats.8 none
  6797. }
  6798. } else { blacktools:tell $nick $host $hand $chan $chan1 stats.12 none }
  6799. blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes1]"
  6800. blacktools:tell $nick $host $hand $chan $chan1 stats.10 "$numuser $ops $voices $numban"
  6801. blacktools:tell $nick $host $hand $chan $chan1 stats.11 none
  6802. }
  6803. if {[info exists chanremoved]} {
  6804. blacktools:tell $nick $host $hand $chan $chan1 stats.6 none
  6805. blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes]"
  6806. blacktools:tell $nick $host $hand $chan $chan1 stats.12 none
  6807. blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes1]"
  6808. blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes2]"
  6809. blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes3]"
  6810. blacktools:tell $nick $host $hand $chan $chan1 stats.11 none
  6811. }
  6812. if {[info exists chansuspended]} {
  6813. if {$mes3 == ""} { set mes3 "NONE" }
  6814. blacktools:tell $nick $host $hand $chan $chan1 stats.6 none
  6815. blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes]"
  6816. blacktools:tell $nick $host $hand $chan $chan1 stats.12 none
  6817. blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes1]"
  6818. blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes2]"
  6819. blacktools:tell $nick $host $hand $chan $chan1 stats.7 "[join $mes3]"
  6820. blacktools:tell $nick $host $hand $chan $chan1 stats.11 none
  6821. }
  6822. }
  6823. ####################### TopWords ####################################
  6824. proc topwordspublic {nick host hand chan arg} {
  6825. global black who username
  6826. set arg [split $arg]
  6827. if {![validchan $chan]} {
  6828. return 0
  6829. }
  6830. if {[channel get $chan topwords]} {
  6831. set lin 0
  6832. set wordsdir "logs/$username.$chan.words.db"
  6833. if {![file exists $wordsdir]} {
  6834. set file [open $wordsdir w]
  6835. close $file
  6836. }
  6837. set host "*!*@[lindex [split $host @] 1]"
  6838. set len($host) [llength $arg]
  6839. set words($host:$chan) $len($host)
  6840. if {[isbotnick $nick]} { return 0 }
  6841. set who "$chan $nick $host $words($host:$chan)"
  6842. set file [open $wordsdir "r"]
  6843. set database [read -nonewline $file]
  6844. close $file
  6845. set data [split $database "\n"]
  6846. foreach line $data {
  6847. set lin [expr $lin +1]
  6848. set hhost [lindex [split $line] 2]
  6849. set hscore [lindex [split $line] 3]
  6850. set chanentry [lindex [split $line] 0]
  6851. if {[string match -nocase $hhost $host] && [string match -nocase $chanentry $chan]} {
  6852. lappend current($hhost:$chan) $hscore
  6853. set who "$chan $nick $hhost [expr $words($host:$chan) + $current($hhost:$chan)]"
  6854. if {$line != ""} {
  6855. set num [expr $lin - 1]
  6856. set delete [lreplace $data $num $num]
  6857. set files [open $wordsdir "w"]
  6858. puts $files [join $delete "\n"]
  6859. close $files
  6860. }
  6861. }
  6862. }
  6863. set file [open $wordsdir "r"]
  6864. set data [read -nonewline $file]
  6865. close $file
  6866. if {$data == ""} {
  6867. set files [open $wordsdir "w"]
  6868. close $files
  6869. }
  6870. set file [open $wordsdir "a"]
  6871. puts $file "$who"
  6872. close $file
  6873. }
  6874. }
  6875. ################################## TOP ################################
  6876. proc toppublic {nick host hand chan arg} {
  6877. global black
  6878. set cmd [lindex [split $arg] 0]
  6879. set del [lindex [split $arg] 1]
  6880. set type 0
  6881. set chan1 "$chan"
  6882. if {[regexp {^[&#]} $cmd] && [matchattr $hand nm|- $chan]} {
  6883. set chan1 "$chan"
  6884. set chan "$cmd"
  6885. set cmd [lindex [split $arg] 1]
  6886. set del [lindex [split $arg] 2]
  6887. }
  6888. top:process $nick $host $hand $chan $chan1 $cmd $type $del
  6889. }
  6890. proc top:process {nick host hand chan chan1 cmd type del} {
  6891. global botnick black username
  6892. set max "20"
  6893. set i 0
  6894. set char(p) [lindex $black(cmdchar) 0]
  6895. if {[string match -nocase "none" "$char(p)"]} {
  6896. set char(p) ""
  6897. }
  6898. set list [userlist nm|OSVAM $chan]
  6899. set wordsdir "logs/$username.$chan.words.db"
  6900. if {![file exists $wordsdir]} {
  6901. set file [open $wordsdir w]
  6902. close $file
  6903. }
  6904. if {[matchattr $hand nm|- $chan]} {
  6905. if {($cmd == "") && ($type == "0")} {
  6906. blacktools:tell $nick $host $hand $chan $chan1 top.1 none
  6907. blacktools:tell $nick $host $hand $chan $chan1 top.2 none
  6908. return 0
  6909. }
  6910. if {($cmd == "") && ($type == "1")} {
  6911. blacktools:tell $nick $host $hand $chan $chan1 top.3 none
  6912. blacktools:tell $nick $host $hand $chan $chan1 top.4 none
  6913. return 0
  6914. }
  6915. }
  6916. if {($cmd == "") && ($type == "0")} {
  6917. blacktools:tell $nick $host $hand $chan $chan1 top.5 none
  6918. blacktools:tell $nick $host $hand $chan $chan1 top.6 none
  6919. return 0
  6920. }
  6921. if {($cmd == "") && ($type == "1")} {
  6922. blacktools:tell $nick $host $hand $chan $chan1 top.7 none
  6923. blacktools:tell $nick $host $hand $chan $chan1 top.8 none
  6924. return 0
  6925. }
  6926. if {![validchan $chan]} {
  6927. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  6928. return 0
  6929. }
  6930. if {![onchan $botnick $chan]} {
  6931. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  6932. return 0
  6933. }
  6934. switch -exact -- [string tolower $cmd] {
  6935. dr {
  6936. array set blacks [list]
  6937. set list [userlist nm|OSVAM $chan]
  6938. foreach user $list {
  6939. set b [getuser $user XTRA DR($chan)]
  6940. if {$b == ""} { set b 0 }
  6941. if {$b > 0} {
  6942. lappend blacks($b) $user
  6943. }
  6944. }
  6945. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  6946. set i [expr $i +1]
  6947. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  6948. }
  6949. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  6950. return 0
  6951. }
  6952. blacktools:tell $nick $host $hand $chan $chan1 top.10 none
  6953. foreach txt [wordwrap [join $topblack " "] 300] {
  6954. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  6955. }
  6956. }
  6957. b {
  6958. array set blacks [list]
  6959. set list [userlist nm|OSVAM $chan]
  6960. foreach user $list {
  6961. set b [getuser $user XTRA b($chan)]
  6962. if {$b == ""} { set b 0 }
  6963. if {$b > 0} {
  6964. lappend blacks($b) $user
  6965. }
  6966. }
  6967. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  6968. set i [expr $i +1]
  6969. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  6970. }
  6971. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  6972. return 0
  6973. }
  6974. blacktools:tell $nick $host $hand $chan $chan1 top.12 none
  6975. foreach txt [wordwrap [join $topblack " "] 300] {
  6976. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  6977. }
  6978. }
  6979. bot {
  6980. array set blacks [list]
  6981. set list [userlist nm|OSVAM $chan]
  6982. foreach user $list {
  6983. set b [getuser $user XTRA bot($chan)]
  6984. if {$b == ""} { set b 0 }
  6985. if {$b > 0} {
  6986. lappend blacks($b) $user
  6987. }
  6988. }
  6989. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  6990. set i [expr $i +1]
  6991. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  6992. }
  6993. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  6994. return 0
  6995. }
  6996. blacktools:tell $nick $host $hand $chan $chan1 top.13 none
  6997. foreach txt [wordwrap [join $topblack " "] 300] {
  6998. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  6999. }
  7000. }
  7001. bw {
  7002. array set blacks [list]
  7003. set list [userlist nm|OSVAM $chan]
  7004. foreach user $list {
  7005. set b [getuser $user XTRA bw($chan)]
  7006. if {$b == ""} { set b 0 }
  7007. if {$b > 0} {
  7008. lappend blacks($b) $user
  7009. }
  7010. }
  7011. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  7012. set i [expr $i +1]
  7013. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  7014. }
  7015. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  7016. return 0
  7017. }
  7018. blacktools:tell $nick $host $hand $chan $chan1 top.14 none
  7019. foreach txt [wordwrap [join $topblack " "] 300] {
  7020. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  7021. }
  7022. }
  7023. black {
  7024. array set blacks [list]
  7025. set list [userlist nm|OSVAM $chan]
  7026. foreach user $list {
  7027. set b [getuser $user XTRA Black($chan)]
  7028. if {$b == ""} { set b 0 }
  7029. if {$b > 0} {
  7030. lappend blacks($b) $user
  7031. }
  7032. }
  7033. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  7034. set i [expr $i +1]
  7035. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  7036. }
  7037. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  7038. return 0
  7039. }
  7040. blacktools:tell $nick $host $hand $chan $chan1 top.15 none
  7041. foreach txt [wordwrap [join $topblack " "] 300] {
  7042. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  7043. }
  7044. }
  7045. spam {
  7046. array set blacks [list]
  7047. set list [userlist nm|OSVAM $chan]
  7048. foreach user $list {
  7049. set b [getuser $user XTRA spam($chan)]
  7050. if {$b == ""} { set b 0 }
  7051. if {$b > 0} {
  7052. lappend blacks($b) $user
  7053. }
  7054. }
  7055. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  7056. set i [expr $i +1]
  7057. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  7058. }
  7059. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  7060. return 0
  7061. }
  7062. blacktools:tell $nick $host $hand $chan $chan1 top.16 none
  7063. foreach txt [wordwrap [join $topblack " "] 300] {
  7064. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  7065. }
  7066. }
  7067. stick {
  7068. array set blacks [list]
  7069. set list [userlist nm|OSVAM $chan]
  7070. foreach user $list {
  7071. set b [getuser $user XTRA stick($chan)]
  7072. if {$b == ""} { set b 0 }
  7073. if {$b > 0} {
  7074. lappend blacks($b) $user
  7075. }
  7076. }
  7077. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  7078. set i [expr $i +1]
  7079. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  7080. }
  7081. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  7082. return 0
  7083. }
  7084. blacktools:tell $nick $host $hand $chan $chan1 top.17 none
  7085. foreach txt [wordwrap [join $topblack " "] 300] {
  7086. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  7087. }
  7088. }
  7089. n {
  7090. array set blacks [list]
  7091. set list [userlist nm|OSVAM $chan]
  7092. foreach user $list {
  7093. set b [getuser $user XTRA n($chan)]
  7094. if {$b == ""} { set b 0 }
  7095. if {$b > 0} {
  7096. lappend blacks($b) $user
  7097. }
  7098. }
  7099. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  7100. set i [expr $i +1]
  7101. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  7102. }
  7103. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  7104. return 0
  7105. }
  7106. blacktools:tell $nick $host $hand $chan $chan1 top.18 none
  7107. foreach txt [wordwrap [join $topblack " "] 300] {
  7108. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  7109. }
  7110. }
  7111. i {
  7112. array set blacks [list]
  7113. set list [userlist nm|OSVAM $chan]
  7114. foreach user $list {
  7115. set b [getuser $user XTRA i($chan)]
  7116. if {$b == ""} { set b 0 }
  7117. if {$b > 0} {
  7118. lappend blacks($b) $user
  7119. }
  7120. }
  7121. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  7122. set i [expr $i +1]
  7123. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  7124. }
  7125. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  7126. return 0
  7127. }
  7128. blacktools:tell $nick $host $hand $chan $chan1 top.19 none
  7129. foreach txt [wordwrap [join $topblack " "] 300] {
  7130. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  7131. }
  7132. }
  7133. k {
  7134. array set blacks [list]
  7135. set list [userlist nm|OSVAM $chan]
  7136. foreach user $list {
  7137. set b [getuser $user XTRA k($chan)]
  7138. if {$b == ""} { set b 0 }
  7139. if {$b > 0} {
  7140. lappend blacks($b) $user
  7141. }
  7142. }
  7143. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  7144. set i [expr $i +1]
  7145. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  7146. }
  7147. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  7148. return 0
  7149. }
  7150. blacktools:tell $nick $host $hand $chan $chan1 top.20 none
  7151. foreach txt [wordwrap [join $topblack " "] 300] {
  7152. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  7153. }
  7154. }
  7155. w {
  7156. array set blacks [list]
  7157. set list [userlist nm|OSVAM $chan]
  7158. foreach user $list {
  7159. set b [getuser $user XTRA w($chan)]
  7160. if {$b == ""} { set b 0 }
  7161. if {$b > 0} {
  7162. lappend blacks($b) $user
  7163. }
  7164. }
  7165. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  7166. set i [expr $i +1]
  7167. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  7168. }
  7169. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  7170. return 0
  7171. }
  7172. blacktools:tell $nick $host $hand $chan $chan1 top.21 none
  7173. foreach txt [wordwrap [join $topblack " "] 300] {
  7174. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  7175. }
  7176. }
  7177. d {
  7178. array set blacks [list]
  7179. set list [userlist nm|OSVAM $chan]
  7180. foreach user $list {
  7181. set b [getuser $user XTRA d($chan)]
  7182. if {$b == ""} { set b 0 }
  7183. if {$b > 0} {
  7184. lappend blacks($b) $user
  7185. }
  7186. }
  7187. foreach blackq [lsort -integer -decreasing [array names blacks]] {
  7188. set i [expr $i +1]
  7189. lappend topblack - $i - : [join $blacks($blackq) ,] ($blackq) |
  7190. }
  7191. if {![info exists topblack]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  7192. return 0
  7193. }
  7194. blacktools:tell $nick $host $hand $chan $chan1 top.22 none
  7195. foreach txt [wordwrap [join $topblack " "] 300] {
  7196. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  7197. }
  7198. }
  7199. words {
  7200. array set topw [list]
  7201. if {![channel get $chan topwords]} {
  7202. blacktools:tell $nick $host $hand $chan $chan1 top.23 none
  7203. return 0
  7204. }
  7205. if {[string match -nocase $del "erase"] && [matchattr $hand nm|M $chan]} {
  7206. blacktools:tell $nick $host $hand $chan $chan1 top.24 none
  7207. set file [open $wordsdir "w"]
  7208. close $file
  7209. return 0
  7210. }
  7211. set file [open $wordsdir "r"]
  7212. set database [read -nonewline $file]
  7213. close $file
  7214. if {$database == ""} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  7215. return 0
  7216. }
  7217. set data [split $database "\n"]
  7218. foreach line $data {
  7219. set hhost [lindex [split $line] 2]
  7220. set hentry [lindex [split $line] 1]
  7221. set chanentry [lindex [split $line] 0]
  7222. set tw [lindex [split $line] 3]
  7223. if {[string match -nocase $chanentry $chan]} {
  7224. lappend topw($tw) $hentry
  7225. }
  7226. }
  7227. foreach twords [lsort -integer -decreasing [array names topw]] {
  7228. set i [expr $i +1]
  7229. if {!($i > $max)} {
  7230. lappend topwo - $i - : [join $topw($twords) ,] ($twords) |
  7231. }
  7232. }
  7233. if {![info exists topwo]} { blacktools:tell $nick $host $hand $chan $chan1 top.9 none
  7234. return 0
  7235. }
  7236. blacktools:tell $nick $host $hand $chan $chan1 top.25 $max
  7237. foreach txt [wordwrap [join $topwo " "] 300] {
  7238. blacktools:tell $nick $host $hand $chan $chan1 top.11 $txt
  7239. }
  7240. }
  7241. }
  7242. }
  7243. proc securepublic {nick host hand chan arg} {
  7244. global black
  7245. set what [lindex [split $arg] 0]
  7246. set type 0
  7247. set chan1 "$chan"
  7248. if {[regexp {^[&#]} $what] && [matchattr $hand nm|- $chan]} {
  7249. set chan "$what"
  7250. set what [lindex [split $arg] 1]
  7251. }
  7252. secure:process $nick $host $hand $chan $chan1 $what $type
  7253. }
  7254. proc secure:process {nick host hand chan chan1 what type} {
  7255. global botnick black
  7256. set char(p) [lindex $black(cmdchar) 0]
  7257. if {[string match -nocase "none" "$char(p)"]} {
  7258. set char(p) ""
  7259. }
  7260. if {[matchattr $hand nm|- $chan]} {
  7261. if {($what == "") && ($type == "0")} {
  7262. blacktools:tell $nick $host $hand $chan $chan1 secure.1 none
  7263. return 0
  7264. }
  7265. if {($what == "") && ($type == "1")} {
  7266. blacktools:tell $nick $host $hand $chan $chan1 secure.2 none
  7267. return 0
  7268. }
  7269. }
  7270. if {($what == "") && ($type == "0")} {
  7271. blacktools:tell $nick $host $hand $chan $chan1 secure.3 none
  7272. return 0
  7273. }
  7274. if {($what == "") && ($type == "1")} {
  7275. blacktools:tell $nick $host $hand $chan $chan1 secure.4 none
  7276. return 0
  7277. }
  7278. if {![validchan $chan]} {
  7279. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  7280. return 0
  7281. }
  7282. if {![onchan $botnick $chan]} {
  7283. blacktools:tell $nick $host $hand $chan $chan1 gl.notonchan none
  7284. return 0
  7285. }
  7286. if {[string match -nocase "$what" "on"]} {
  7287. set char(a) "+"
  7288. channel set $chan $char(a)antipub ; channel set $chan $char(a)antinotice ; channel set $chan $char(a)antictcp ; channel set $chan $char(a)antibadword ; channel set $chan $char(a)antibadword ; channel set $chan $char(a)antilongtext ; channel set $chan $char(a)badquitpart ; channel set $chan $char(a)antijoinpart ; channel set $chan $char(a)antispam ; channel set $chan $char(a)antirepeat ; channel set $chan $char(a)anticolor ; channel set $chan $char(a)antibold ; channel set $chan $char(a)antiunderline ; channel set $chan $char(a)anticaps ; channel set $chan $char(a)badnick ; channel set $chan $char(a)badfullname ; channel set $chan $char(a)antijoinflood ; channel set $chan $char(a)antichanflood ; channel set $chan $char(a)badident
  7289. blacktools:tell $nick $host $hand $chan $chan1 secure.5 none
  7290. }
  7291. if {[string match -nocase "$what" "off"]} {
  7292. set char(a) "-"
  7293. channel set $chan $char(a)antipub ; channel set $chan $char(a)antinotice ; channel set $chan $char(a)antictcp ; channel set $chan $char(a)antibadword ; channel set $chan $char(a)antibadword ; channel set $chan $char(a)antilongtext ; channel set $chan $char(a)badquitpart ; channel set $chan $char(a)antijoinpart ; channel set $chan $char(a)antispam ; channel set $chan $char(a)antirepeat ; channel set $chan $char(a)anticolor ; channel set $chan $char(a)antibold ; channel set $chan $char(a)antiunderline ; channel set $chan $char(a)anticaps ; channel set $chan $char(a)badnick ; channel set $chan $char(a)badfullname ; channel set $chan $char(a)antijoinflood ; channel set $chan $char(a)antichanflood ; channel set $chan $char(a)badident
  7294. blacktools:tell $nick $host $hand $chan $chan1 secure.6 none
  7295. }
  7296. }
  7297. proc hpublic {nick host hand chan arg} {
  7298. global black botnick
  7299. set chan1 "$chan"
  7300. set command [lindex [split $arg] 0]
  7301. h:process $nick $host $hand $chan $chan1 $command
  7302. }
  7303. proc unset:floodcmd {host chan} {
  7304. global count
  7305. if {[info exists count(floodcmd:$host:$chan)]} {
  7306. unset count(floodcmd:$host:$chan)
  7307. }
  7308. }
  7309. proc h:process {nick host hand chan chan1 command} {
  7310. global black botnick count
  7311. set char(p) [lindex $black(cmdchar) 0]
  7312. set number [scan $black(antiflood:cmd) %\[^:\]]
  7313. set timer [scan $black(antiflood:cmd) %*\[^:\]:%s]
  7314. if {[string match -nocase "none" "$char(p)"]} {
  7315. set char(p) ""
  7316. }
  7317. if {[info exists black(flood:activ:$host)]} {
  7318. foreach tmr [utimers] {
  7319. if {[string match "*black(flood:activ:$host)*" [join [lindex $tmr 1]]]} {
  7320. set time [lindex $tmr 0]
  7321. }
  7322. }
  7323. blacktools:tell $nick $host $hand $chan $chan1 h.16 "$time h"
  7324. return
  7325. }
  7326. foreach tmr [utimers] {
  7327. if {[string match "*count(floodcmd:$host:$chan)*" [join [lindex $tmr 1]]]} {
  7328. killutimer [lindex $tmr 2]
  7329. }
  7330. }
  7331. if {![info exists count(floodcmd:$host:$chan)]} {
  7332. set count(floodcmd:$host:$chan) 0
  7333. }
  7334. incr count(floodcmd:$host:$chan)
  7335. utimer $timer [list unset:floodcmd $host $chan]
  7336. if {$count(floodcmd:$host:$chan) == "$number"} {
  7337. blacktools:tell $nick $host $hand $chan $chan1 h.16 "30 h"
  7338. set black(flood:activ:$host) 1
  7339. utimer 30 [list unset black(flood:activ:$host)]
  7340. return
  7341. }
  7342. set replace(%chan%) $chan
  7343. set replace(%char%) $char(p)
  7344. set greeting [getuser $hand XTRA GREET]
  7345. set chanlang [string tolower [channel get $chan lang]]
  7346. if {$chanlang == ""} { set chanlang "[string tolower $black(default_lang)]" }
  7347. if {$greeting == ""} {
  7348. if {[matchattr $hand n]} {
  7349. putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.1)]"
  7350. putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.2)]"
  7351. putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.3)]"
  7352. putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.5)]"
  7353. putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.4)]"
  7354. setuser $hand XTRA GREET 1
  7355. return
  7356. }
  7357. putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.1)]"
  7358. putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.2)]"
  7359. putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.3)]"
  7360. putserv "PRIVMSG $nick :[string map [array get replace] $black(say.$chanlang.greeting.4)]"
  7361. setuser $hand XTRA GREET 1
  7362. return
  7363. }
  7364. set getlang [string tolower [getuser $hand XTRA OUTPUT_LANG]]
  7365. set replace(%char%) "$char(p)"
  7366. if {$getlang == ""} { set getlang "[string tolower $black(default_lang)]" }
  7367. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  7368. return
  7369. }
  7370. if {$command == ""} {
  7371. if {[matchattr $hand n|- $chan]} {
  7372. blacktools:tell $nick $host $hand $chan $chan1 h.1 none
  7373. blacktools:tell $nick $host $hand $chan $chan1 h.2 none
  7374. return
  7375. }
  7376. if {[matchattr $hand m|- $chan]} {
  7377. blacktools:tell $nick $host $hand $chan $chan1 h.3 none
  7378. blacktools:tell $nick $host $hand $chan $chan1 h.4 none
  7379. return
  7380. }
  7381. if {[matchattr $hand -|V $chan]} {
  7382. blacktools:tell $nick $host $hand $chan $chan1 h.5 none
  7383. blacktools:tell $nick $host $hand $chan $chan1 h.6 none
  7384. return
  7385. }
  7386. if {[matchattr $hand -|O $chan]} {
  7387. blacktools:tell $nick $host $hand $chan $chan1 h.7 none
  7388. blacktools:tell $nick $host $hand $chan $chan1 h.8 none
  7389. return
  7390. }
  7391. if {[matchattr $hand -|S $chan]} {
  7392. blacktools:tell $nick $host $hand $chan $chan1 h.9 none
  7393. blacktools:tell $nick $host $hand $chan $chan1 h.10 none
  7394. return
  7395. }
  7396. if {[matchattr $hand -|A $chan]} {
  7397. blacktools:tell $nick $host $hand $chan $chan1 h.11 none
  7398. blacktools:tell $nick $host $hand $chan $chan1 h.12 none
  7399. return
  7400. }
  7401. if {[matchattr $hand -|M $chan]} {
  7402. blacktools:tell $nick $host $hand $chan $chan1 h.13 none
  7403. blacktools:tell $nick $host $hand $chan $chan1 h.14 none
  7404. return
  7405. }
  7406. return
  7407. }
  7408. switch -exact -- [string tolower $command] {
  7409. cmds {
  7410. if {[matchattr $hand -|V $chan]} {
  7411. blacktools:tell $nick $host $hand $chan $chan1 cmdsvoice none
  7412. blacktools:tell $nick $host $hand $chan $chan1 h.15 $black(say.$getlang.cmds_more_1)
  7413. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7414. return
  7415. }
  7416. if {[matchattr $hand -|O $chan]} {
  7417. blacktools:tell $nick $host $hand $chan $chan1 h.15 [string map [array get replace] $black(say.$getlang.cmdsop)]
  7418. blacktools:tell $nick $host $hand $chan $chan1 h.15 $black(say.$getlang.cmds_more)
  7419. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7420. return
  7421. }
  7422. if {[matchattr $hand -|S $chan]} {
  7423. blacktools:tell $nick $host $hand $chan $chan1 h.15 [string map [array get replace] $black(say.$getlang.cmdsenior)]
  7424. blacktools:tell $nick $host $hand $chan $chan1 h.15 $black(say.$getlang.cmds_more)
  7425. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7426. return
  7427. }
  7428. if {[matchattr $hand -|A $chan]} {
  7429. blacktools:tell $nick $host $hand $chan $chan1 h.15 [string map [array get replace] $black(say.$getlang.cmdadmin)]
  7430. blacktools:tell $nick $host $hand $chan $chan1 h.15 $black(say.$getlang.cmds_more)
  7431. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7432. return
  7433. }
  7434. if {[matchattr $hand -|M $chan]} {
  7435. blacktools:tell $nick $host $hand $chan $chan1 h.15 [string map [array get replace] $black(say.$getlang.cmdmanager)]
  7436. blacktools:tell $nick $host $hand $chan $chan1 h.15 $black(say.$getlang.cmds_more)
  7437. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7438. return
  7439. }
  7440. if {[matchattr $hand n|- $chan]} {
  7441. blacktools:tell $nick $host $hand $chan $chan1 h.15 [string map [array get replace] $black(say.$getlang.cmdbossowner)]
  7442. blacktools:tell $nick $host $hand $chan $chan1 h.15 $black(say.$getlang.cmds_more)
  7443. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7444. return
  7445. }
  7446. if {[matchattr $hand m|- $chan]} {
  7447. blacktools:tell $nick $host $hand $chan $chan1 h.15 [string map [array get replace] $black(say.$getlang.cmdowner)]
  7448. blacktools:tell $nick $host $hand $chan $chan1 h.15 $black(say.$getlang.cmds_more)
  7449. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7450. return
  7451. }
  7452. }
  7453. ban {
  7454. if {[matchattr $hand -|V $chan]} {
  7455. foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banvoice)] " "] 450] {
  7456. blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
  7457. }
  7458. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7459. return
  7460. }
  7461. if {[matchattr $hand -|O $chan]} {
  7462. foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banop)] " "] 300] {
  7463. blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
  7464. }
  7465. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7466. return
  7467. }
  7468. if {[matchattr $hand -|S $chan]} {
  7469. foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.bansenior)] " "] 300] {
  7470. blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
  7471. }
  7472. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7473. return
  7474. }
  7475. if {[matchattr $hand -|A $chan]} {
  7476. foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banadmin)] " "] 300] {
  7477. blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
  7478. }
  7479. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7480. return
  7481. }
  7482. if {[matchattr $hand -|M $chan]} {
  7483. foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banmanager)] " "] 300] {
  7484. blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
  7485. }
  7486. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7487. return
  7488. }
  7489. if {[matchattr $hand n|- $chan]} {
  7490. foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banbossowner)] " "] 440] {
  7491. blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
  7492. }
  7493. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7494. return
  7495. }
  7496. if {[matchattr $hand m|- $chan]} {
  7497. foreach txt [wordwrap [join [string map [array get replace] $black(say.$getlang.banowner)] " "] 440] {
  7498. blacktools:tell $nick $host $hand $chan $chan1 h.15 $txt
  7499. }
  7500. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7501. return
  7502. }
  7503. }
  7504. add {
  7505. if {[matchattr $hand -|A $chan]} {
  7506. blacktools:tell $nick $host $hand $chan $chan1 addadmin none
  7507. return
  7508. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7509. }
  7510. if {[matchattr $hand -|M $chan]} {
  7511. blacktools:tell $nick $host $hand $chan $chan1 addmanager none
  7512. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7513. return
  7514. }
  7515. if {[matchattr $hand n|- $chan]} {
  7516. blacktools:tell $nick $host $hand $chan $chan1 addbossowner none
  7517. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7518. return
  7519. }
  7520. if {[matchattr $hand m|- $chan]} {
  7521. blacktools:tell $nick $host $hand $chan $chan1 addowner none
  7522. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7523. return
  7524. }
  7525. }
  7526. owner {
  7527. if {[matchattr $hand nm|- $chan]} {
  7528. blacktools:tell $nick $host $hand $chan $chan1 howner none
  7529. blacktools:tell $nick $host $hand $chan $chan1 howner_1 none
  7530. blacktools:tell $nick $host $hand $chan $chan1 hcommand.1 none
  7531. }
  7532. }
  7533. top {
  7534. if {[matchattr $hand nm|MASOV $chan]} {
  7535. if {[matchattr $hand nm|M $chan]} {
  7536. blacktools:tell $nick $host $hand $chan $chan1 htop none
  7537. blacktools:tell $nick $host $hand $chan $chan1 htop_1 none
  7538. return
  7539. }
  7540. blacktools:tell $nick $host $hand $chan $chan1 htop none
  7541. blacktools:tell $nick $host $hand $chan $chan1 htop_2 none
  7542. }
  7543. }
  7544. blacktools {
  7545. if {[matchattr $hand nm|MAOS $chan]} {
  7546. if {[channel get $chan antipub]} { set pubstatus "+antipub" } else { set pubstatus "-antipub" }
  7547. if {[channel get $chan antinotice]} { set noticestatus "+antinotice" } else { set noticestatus "-antinotice" }
  7548. if {[channel get $chan antictcp]} { set ctcpstatus "+antictcp" } else { set ctcpstatus "-antictcp" }
  7549. if {[channel get $chan antibadword]} { set badwordstatus "+antibadword" } else { set badwordstatus "-antibadword" }
  7550. if {[channel get $chan antilongtext]} { set longtextstatus "+antilongtext" } else { set longtextstatus "-antilongtext" }
  7551. if {[channel get $chan badquitpart]} { set badquitpartstatus "+badquitpart" } else { set badquitpartstatus "-badquitpart" }
  7552. if {[channel get $chan antijoinpart]} { set joinpartstatus "+antijoinpart" } else { set joinpartstatus "-antijoinpart" }
  7553. if {[channel get $chan antispam]} { set antispamstatus "+antispam" } else { set antispamstatus "-antispam" }
  7554. if {[channel get $chan antirepeat]} { set repeatstatus "+antirepeat" } else { set repeatstatus "-antirepeat" }
  7555. if {[channel get $chan anticolor]} { set colorstatus "+anticolor" } else { set colorstatus "-anticolor" }
  7556. if {[channel get $chan antibold]} { set boldstatus "+antibold" } else { set boldstatus "-antibold" }
  7557. if {[channel get $chan antiunderline]} { set underlinestatus "+antiunderline" } else { set underlinestatus "-antiunderline" }
  7558. if {[channel get $chan anticaps]} { set capsstatus "+anticaps" } else { set capsstatus "-anticaps" }
  7559. if {[channel get $chan badnick]} { set nickstatus "+badnick" } else { set nickstatus "-badnick" }
  7560. if {[channel get $chan badfullname]} { set fullnamestatus "+badfullname" } else { set fullnamestatus "-badfullname" }
  7561. if {[channel get $chan autoop]} { set opstatus "+autoop" } else { set opstatus "-autoop" }
  7562. if {[channel get $chan autovoice]} { set voicestatus "+autovoice" } else { set voicestatus "-autovoice" }
  7563. if {[channel get $chan antijoinflood]} { set joinfloodstatus "+antijoinflood" } else { set joinfloodstatus "-antijoinflood" }
  7564. if {[channel get $chan antichanflood]} { set chanfloodstatus "+antichanflood" } else { set chanfloodstatus "-antichanflood" }
  7565. if {[channel get $chan badident]} { set badidentstatus "+badident" } else { set badidentstatus "-badident" }
  7566. if {[channel get $chan showtime]} { set showtimestatus "+showtime" } else { set showtimestatus "-showtime" }
  7567. if {[channel get $chan showhandle]} { set showhandlestatus "+showhandle" } else { set showhandlestatus "-showhandle" }
  7568. if {[channel get $chan showcount]} { set showhandlestatus "+showcount" } else { set showcountstatus "-showcount" }
  7569. set xbantime [channel get $chan xbantime]
  7570. if {$xbantime == "0"} { set xbantime 1 }
  7571. set xbanlevel [channel get $chan xbanlevel]
  7572. if {$xbanlevel == "0"} { set xbanlevel 100 }
  7573. set oprotect [channel get $chan oprotect]
  7574. if {$oprotect == ""} { set oprotect "ON" }
  7575. set vprotect [channel get $chan vprotect]
  7576. if {$vprotect == ""} { set vprotect "ON" }
  7577. if {[matchattr $hand -|AOS $chan]} {
  7578. blacktools:tell $nick $host $hand $chan $chan1 hblacktools.1 "$pubstatus \002$noticestatus\002 $ctcpstatus \002$badwordstatus\002 $longtextstatus \002$badquitpartstatus\002 $joinpartstatus \002$antispamstatus\002 $repeatstatus \002$colorstatus\002 $boldstatus \002$underlinestatus\002 $capsstatus \002$nickstatus\002 $fullnamestatus \002$opstatus\002 $voicestatus \002$joinfloodstatus\002 $chanfloodstatus \002$badidentstatus\002 $showtimestatus \002$showhandlestatus\002 $showcountstatus \[\002xbantime\002 $xbantime\] \[\002xbanlevel\002 $xbanlevel\] \[\002oprotect\002 $oprotect\] \[\002vprotect\002 $vprotect\]."
  7579. return
  7580. }
  7581. blacktools:tell $nick $host $hand $chan $chan1 hblacktools.1 "$pubstatus \002$noticestatus\002 $ctcpstatus \002$badwordstatus\002 $longtextstatus \002$badquitpartstatus\002 $joinpartstatus \002$antispamstatus\002 $repeatstatus \002$colorstatus\002 $boldstatus \002$underlinestatus\002 $capsstatus \002$nickstatus\002 $fullnamestatus \002$opstatus\002 $voicestatus \002$joinfloodstatus\002 $chanfloodstatus \002$badidentstatus\002 $showtimestatus \002$showhandlestatus\002 $showcountstatus \[\002xbantime\002 $xbantime\] \[\002xbanlevel\002 $xbanlevel\] \[\002oprotect\002 $oprotect\] \[\002vprotect\002 $vprotect\]."
  7582. blacktools:tell $nick $host $hand $chan $chan1 hblacktools.2 none
  7583. blacktools:tell $nick $host $hand $chan $chan1 hblacktools.3 none
  7584. }
  7585. }
  7586. standard {
  7587. if {[matchattr $hand nm|MAOS $chan]} {
  7588. set blacktools_flags {
  7589. antipub
  7590. antinotice
  7591. antictcp
  7592. antilongtext
  7593. antibadword
  7594. antijoinpart
  7595. antispam
  7596. antirepeat
  7597. badquitpart
  7598. anticolor
  7599. antibold
  7600. antiunderline
  7601. anticaps
  7602. badfullname
  7603. badnick
  7604. badident
  7605. antijoinflood
  7606. antichanflood
  7607. xtools
  7608. topicrefresh
  7609. count
  7610. antibadchan
  7611. anunt
  7612. limit
  7613. refresh
  7614. clonescan
  7615. seen
  7616. antidle
  7617. antividle
  7618. antididle
  7619. autoop
  7620. autovoice
  7621. leave
  7622. chanreport
  7623. topwords
  7624. xban
  7625. protectop
  7626. protectvoice
  7627. dontop
  7628. dontdeop
  7629. private
  7630. silent
  7631. showtime
  7632. showhandle
  7633. showcount
  7634. next
  7635. topiclock
  7636. }
  7637. foreach info [channel info $chan] {
  7638. if {[regexp {^[+ -]} $info]} {
  7639. set trim_info [string trim $info {
  7640. "+"
  7641. "-"}]
  7642. if {[lsearch -exact $blacktools_flags $trim_info] == -1} {
  7643. if {[channel get $chan chanmode] != $info} {
  7644. lappend flag_list $info
  7645. }
  7646. }
  7647. }
  7648. }
  7649. set bantime [channel get $chan ban-time]
  7650. set floodchan [channel get $chan flood-chan]
  7651. set floodjoin [channel get $chan flood-join]
  7652. set floodkick [channel get $chan flood-kick]
  7653. set floodctcp [channel get $chan flood-ctcp]
  7654. set floodnick [channel get $chan flood-nick]
  7655. set flooddeop [channel get $chan flood-deop]
  7656. set chanmode [channel get $chan chanmode]
  7657. set floodchan [string map {" " ":"} $floodchan]
  7658. set floodjoin [string map {" " ":"} $floodjoin]
  7659. set floodkick [string map {" " ":"} $floodkick]
  7660. set floodctcp [string map {" " ":"} $floodctcp]
  7661. set floodnick [string map {" " ":"} $floodnick]
  7662. set flooddeop [string map {" " ":"} $flooddeop]
  7663. if {[matchattr $hand -|AOS $chan]} {
  7664. blacktools:tell $nick $host $hand $chan $chan1 hstandard.1 none
  7665. blacktools:tell $nick $host $hand $chan $chan1 hstandard.4 "flood-chan $floodchan flood-join $floodjoin flood-kick $floodkick flood-ctcp $floodctcp flood-nick $floodnick flood-deop $flooddeop ; bantime $bantime chanmode $chanmode"
  7666. foreach flag [wordwrap $flag_list 400] {
  7667. if {$flag != ""} {
  7668. blacktools:tell $nick $host $hand $chan $chan1 hstandard.3 $flag
  7669. }
  7670. }
  7671. return
  7672. }
  7673. blacktools:tell $nick $host $hand $chan $chan1 hstandard.1 none
  7674. blacktools:tell $nick $host $hand $chan $chan1 hstandard.4 "flood-chan $floodchan flood-join $floodjoin flood-kick $floodkick flood-ctcp $floodctcp flood-nick $floodnick flood-deop $flooddeop ; bantime $bantime chanmode $chanmode"
  7675. foreach flag [wordwrap $flag_list 400] {
  7676. if {$flag != ""} {
  7677. blacktools:tell $nick $host $hand $chan $chan1 hstandard.3 $flag
  7678. }
  7679. }
  7680. blacktools:tell $nick $host $hand $chan $chan1 hstandard.5 none
  7681. }
  7682. }
  7683. chaninfo {
  7684. if {[matchattr $hand nm|MAOS $chan]} {
  7685. blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.1 none
  7686. blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.2 none
  7687. blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.3 none
  7688. blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.4 none
  7689. blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.5 none
  7690. blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.6 none
  7691. return
  7692. }
  7693. if {[matchattr $hand -|V $chan]} {
  7694. blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.1 none
  7695. blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.7 none
  7696. blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.5 none
  7697. blacktools:tell $nick $host $hand $chan $chan1 hchaninfo.6 none
  7698. }
  7699. }
  7700. module {
  7701. set module_manager "\002TopicRefresh\002 Count \002XtoolS\002 BadChan \002Anunt\002 Limit \002CloneScan\002 Seen \002Greet\002 Leave \002Idle\002 Chanreport \002TopWords\002 Xban \002AntiTake\002 Private \002Next\002 AutoBroadcast \002AntiBotIdle\002 Language \002Topic\002 BadWordAdd \002AntipubExcept\002 TCL"
  7702. foreach mod $module_manager {
  7703. switch [string tolower [antibadword:filter $mod]] {
  7704. topicrefresh {
  7705. if {[channel get $chan topicrefresh]} { set status "ON"} else { set status "OFF"}
  7706. lappend module_list "$mod\[$status\] |"
  7707. }
  7708. count {
  7709. if {[channel get $chan count]} { set status "ON"} else { set status "OFF"}
  7710. lappend module_list "$mod\[$status\] |"
  7711. }
  7712. xtools {
  7713. if {[channel get $chan xtools]} { set status "ON"} else { set status "OFF"}
  7714. lappend module_list "$mod\[$status\] |"
  7715. }
  7716. badchan {
  7717. if {[channel get $chan antibadchan]} { set status "ON"} else { set status "OFF"}
  7718. lappend module_list "$mod\[$status\] |"
  7719. }
  7720. anunt {
  7721. if {[channel get $chan anunt]} { set status "ON"} else { set status "OFF"}
  7722. lappend module_list "$mod\[$status\] |"
  7723. }
  7724. limit {
  7725. if {[channel get $chan limit]} { set status "ON"} else { set status "OFF"}
  7726. lappend module_list "$mod\[$status\] |"
  7727. }
  7728. clonescan {
  7729. if {[channel get $chan clonescan]} { set status "ON"} else { set status "OFF"}
  7730. lappend module_list "$mod\[$status\] |"
  7731. }
  7732. seen {
  7733. if {[channel get $chan seen]} { set status "ON"} else { set status "OFF"}
  7734. lappend module_list "$mod\[$status\] |"
  7735. }
  7736. greet {
  7737. if {[channel get $chan greet]} { set status "ON"} else { set status "OFF"}
  7738. lappend module_list "$mod\[$status\] |"
  7739. }
  7740. leave {
  7741. if {[channel get $chan leave]} { set status "ON"} else { set status "OFF"}
  7742. lappend module_list "$mod\[$status\] |"
  7743. }
  7744. idle {
  7745. if {[channel get $chan antidle]} { set status "ON"} else { set status "OFF"}
  7746. if {[channel get $chan antididle]} { set statuso "ON"} else { set statuso "OFF"}
  7747. if {[channel get $chan antividle]} { set statusv "ON"} else { set statusv "OFF"}
  7748. lappend module_list "$mod\[$status\] (OP\[$statuso\] - VOICE\[$statusv\]) |"
  7749. }
  7750. chanreport {
  7751. if {[channel get $chan chanreport]} { set status "ON"} else { set status "OFF"}
  7752. lappend module_list "$mod\[$status\] |"
  7753. }
  7754. topwords {
  7755. if {[channel get $chan topwords]} { set status "ON"} else { set status "OFF"}
  7756. lappend module_list "$mod\[$status\] |"
  7757. }
  7758. xban {
  7759. if {[channel get $chan xban]} { set status "ON"} else { set status "OFF"}
  7760. lappend module_list "$mod\[$status\] |"
  7761. }
  7762. antitake {
  7763. if {[channel get $chan dontop] || [channel get $chan dontdeop]} { set status "ON"} else { set status "OFF"}
  7764. if {[channel get $chan dontop]} { set statusdo "ON"} else { set statusdo "OFF"}
  7765. if {[channel get $chan dontdeop]} { set statusde "ON"} else { set statusde "OFF"}
  7766. lappend module_list "$mod\[$status\] (DONTOP\[$statusdo\] - DONTDEOP\[$statusde\]) |"
  7767. }
  7768. private {
  7769. if {[channel get $chan private]} { set status "ON"} else { set status "OFF"}
  7770. lappend module_list "$mod\[$status\] |"
  7771. }
  7772. next {
  7773. if {[channel get $chan next]} { set status "ON"} else { set status "OFF"}
  7774. lappend module_list "$mod\[$status\] |"
  7775. }
  7776. language {
  7777. if {[channel get $chan lang] == ""} {
  7778. set lang $black(default_lang)
  7779. } else { set lang [channel get $chan lang] }
  7780. lappend module_list "$mod\[[string toupper $lang]\] |"
  7781. }
  7782. antibotidle {
  7783. if {[matchattr $hand m|- $chan]} {
  7784. set status "OFF"
  7785. foreach tmr [timers] {
  7786. if {[string match "*antibotidle:module*" [join [lindex $tmr 1]]]} {
  7787. set status "ON"
  7788. }
  7789. }
  7790. lappend module_list "$mod\[$status\] |"
  7791. }
  7792. }
  7793. autobroadcast {
  7794. if {[matchattr $hand m|- $chan]} {
  7795. set status "OFF"
  7796. foreach tmr [timers] {
  7797. if {[string match "*broadcastpublic:show*" [join [lindex $tmr 1]]]} {
  7798. set status "ON"
  7799. }
  7800. }
  7801. lappend module_list "$mod\[$status\] |"
  7802. }
  7803. }
  7804. }
  7805. }
  7806. lappend module_list "\002Topic\002 | BadWordAdd | \002AntipubExcept\002"
  7807. if {[matchattr $hand n|- $chan]} {
  7808. lappend module_list "| TCL"
  7809. }
  7810. blacktools:tell $nick $host $hand $chan $chan1 hmodule.1 $module_list
  7811. blacktools:tell $nick $host $hand $chan $chan1 hmodule.3 none
  7812. }
  7813. }
  7814. }
  7815. proc manpublic {nick host hand chan arg} {
  7816. global black
  7817. set command [lindex [split $arg] 0]
  7818. set type 0
  7819. set chan1 $chan
  7820. man:process $nick $host $hand $chan $chan1 $type $command
  7821. }
  7822. proc man:process {nick host hand chan chan1 type command} {
  7823. global black count
  7824. set number [scan $black(antiflood:cmd) %\[^:\]]
  7825. set timer [scan $black(antiflood:cmd) %*\[^:\]:%s]
  7826. set char(p) [lindex $black(cmdchar) 0]
  7827. if {[info exists black(flood:activ:$host)]} {
  7828. foreach tmr [utimers] {
  7829. if {[string match "*black(flood:activ:$host)*" [join [lindex $tmr 1]]]} {
  7830. set time [lindex $tmr 0]
  7831. }
  7832. }
  7833. blacktools:tell $nick $host $hand $chan $chan1 h.16 "$time man"
  7834. return
  7835. }
  7836. foreach tmr [utimers] {
  7837. if {[string match "*count(floodcmd:$host:$chan)*" [join [lindex $tmr 1]]]} {
  7838. killutimer [lindex $tmr 2]
  7839. }
  7840. }
  7841. if {![info exists count(floodcmd:$host:$chan)]} {
  7842. set count(floodcmd:$host:$chan) 0
  7843. }
  7844. incr count(floodcmd:$host:$chan)
  7845. utimer $timer [list unset:floodcmd $host $chan]
  7846. if {$count(floodcmd:$host:$chan) == "$number"} {
  7847. blacktools:tell $nick $host $hand $chan $chan1 h.16 "30 man"
  7848. set black(flood:activ:$host) 1
  7849. utimer 30 [list unset black(flood:activ:$host)]
  7850. return
  7851. }
  7852. if {$command == ""} {
  7853. if {$type == 0} {
  7854. blacktools:tell $nick $host $hand $chan $chan1 man.1 none
  7855. return
  7856. } else {
  7857. blacktools:tell $nick $host $hand $chan $chan1 man.2 none
  7858. return
  7859. }
  7860. }
  7861. set command [string trim $command {
  7862. "+"
  7863. "-"
  7864. "."
  7865. "!"}]
  7866. switch [string tolower $command] {
  7867. man {
  7868. if {[matchattr $hand nm|MASOV $chan]} {
  7869. blacktools:tell $nick $host $hand $chan $chan1 man.3 none
  7870. blacktools:tell $nick $host $hand $chan $chan1 man.4 none
  7871. }
  7872. }
  7873. h {
  7874. if {[matchattr $hand nm|MASOV $chan]} {
  7875. blacktools:tell $nick $host $hand $chan $chan1 man.5 none
  7876. blacktools:tell $nick $host $hand $chan $chan1 man.6 none
  7877. blacktools:tell $nick $host $hand $chan $chan1 man.7 none
  7878. }
  7879. }
  7880. v {
  7881. if {[matchattr $hand nm|MASOV $chan]} {
  7882. blacktools:tell $nick $host $hand $chan $chan1 man.8 none
  7883. blacktools:tell $nick $host $hand $chan $chan1 man.9 none
  7884. }
  7885. }
  7886. o {
  7887. if {[matchattr $hand nm|MASO $chan]} {
  7888. blacktools:tell $nick $host $hand $chan $chan1 man.10 none
  7889. blacktools:tell $nick $host $hand $chan $chan1 man.11 none
  7890. }
  7891. }
  7892. userlist {
  7893. if {[matchattr $hand nm|MASO $chan]} {
  7894. blacktools:tell $nick $host $hand $chan $chan1 man.12 none
  7895. blacktools:tell $nick $host $hand $chan $chan1 man.13 none
  7896. if {[matchattr $hand nm|MASO $chan]} {
  7897. blacktools:tell $nick $host $hand $chan $chan1 man.15 none
  7898. } else { blacktools:tell $nick $host $hand $chan $chan1 man.14 none }
  7899. }
  7900. }
  7901. version {
  7902. if {[matchattr $hand nm|MASOV $chan]} {
  7903. blacktools:tell $nick $host $hand $chan $chan1 man.16 none
  7904. blacktools:tell $nick $host $hand $chan $chan1 man.17 none
  7905. }
  7906. }
  7907. info {
  7908. if {[matchattr $hand nm|MASOV $chan]} {
  7909. blacktools:tell $nick $host $hand $chan $chan1 man.18 none
  7910. blacktools:tell $nick $host $hand $chan $chan1 man.19 none
  7911. }
  7912. }
  7913. ping {
  7914. if {[matchattr $hand nm|MASOV $chan]} {
  7915. blacktools:tell $nick $host $hand $chan $chan1 man.20 none
  7916. blacktools:tell $nick $host $hand $chan $chan1 man.21 none
  7917. }
  7918. }
  7919. act {
  7920. if {[matchattr $hand nm|MAS $chan]} {
  7921. blacktools:tell $nick $host $hand $chan $chan1 man.22 none
  7922. blacktools:tell $nick $host $hand $chan $chan1 man.23 none
  7923. }
  7924. }
  7925. t {
  7926. if {[matchattr $hand nm|MASOV $chan]} {
  7927. blacktools:tell $nick $host $hand $chan $chan1 man.24 none
  7928. blacktools:tell $nick $host $hand $chan $chan1 man.25 none
  7929. blacktools:tell $nick $host $hand $chan $chan1 man.26 none
  7930. }
  7931. }
  7932. l {
  7933. if {[matchattr $hand nm|MASOV $chan]} {
  7934. blacktools:tell $nick $host $hand $chan $chan1 man.27 $black(lmode)
  7935. blacktools:tell $nick $host $hand $chan $chan1 man.28 none
  7936. }
  7937. }
  7938. ul {
  7939. if {[matchattr $hand nm|MASOV $chan]} {
  7940. blacktools:tell $nick $host $hand $chan $chan1 man.29 $black(lmode)
  7941. blacktools:tell $nick $host $hand $chan $chan1 man.30 none
  7942. }
  7943. }
  7944. cycle {
  7945. if {[matchattr $hand nm|MASO $chan]} {
  7946. blacktools:tell $nick $host $hand $chan $chan1 man.31 none
  7947. blacktools:tell $nick $host $hand $chan $chan1 man.32 none
  7948. }
  7949. }
  7950. mode {
  7951. if {[matchattr $hand nm|MASO $chan]} {
  7952. blacktools:tell $nick $host $hand $chan $chan1 man.33 none
  7953. blacktools:tell $nick $host $hand $chan $chan1 man.34 none
  7954. }
  7955. }
  7956. i {
  7957. if {[matchattr $hand nm|MAVSO $chan]} {
  7958. blacktools:tell $nick $host $hand $chan $chan1 man.35 none
  7959. blacktools:tell $nick $host $hand $chan $chan1 man.36 none
  7960. }
  7961. }
  7962. vers {
  7963. if {[matchattr $hand nm|MAVSO $chan]} {
  7964. blacktools:tell $nick $host $hand $chan $chan1 man.37 none
  7965. blacktools:tell $nick $host $hand $chan $chan1 man.38 none
  7966. }
  7967. }
  7968. whois {
  7969. if {[matchattr $hand nm|MAVSO $chan]} {
  7970. blacktools:tell $nick $host $hand $chan $chan1 man.39 none
  7971. blacktools:tell $nick $host $hand $chan $chan1 man.40 none
  7972. }
  7973. }
  7974. cc {
  7975. if {[matchattr $hand nm|MASO $chan]} {
  7976. blacktools:tell $nick $host $hand $chan $chan1 man.41 none
  7977. blacktools:tell $nick $host $hand $chan $chan1 man.42 none
  7978. }
  7979. }
  7980. time {
  7981. if {[matchattr $hand nm|MASOV $chan]} {
  7982. blacktools:tell $nick $host $hand $chan $chan1 man.43 none
  7983. blacktools:tell $nick $host $hand $chan $chan1 man.44 none
  7984. }
  7985. }
  7986. clear {
  7987. if {[matchattr $hand nm|M $chan]} {
  7988. blacktools:tell $nick $host $hand $chan $chan1 man.45 none
  7989. blacktools:tell $nick $host $hand $chan $chan1 man.46 none
  7990. blacktools:tell $nick $host $hand $chan $chan1 man.47 none
  7991. }
  7992. }
  7993. op {
  7994. if {[matchattr $hand nm|MASO $chan]} {
  7995. blacktools:tell $nick $host $hand $chan $chan1 man.48 none
  7996. blacktools:tell $nick $host $hand $chan $chan1 man.49 none
  7997. }
  7998. }
  7999. voice {
  8000. if {[matchattr $hand nm|MAVSO $chan]} {
  8001. blacktools:tell $nick $host $hand $chan $chan1 man.50 none
  8002. blacktools:tell $nick $host $hand $chan $chan1 man.51 none
  8003. }
  8004. }
  8005. deop {
  8006. if {[matchattr $hand nm|MASO $chan]} {
  8007. blacktools:tell $nick $host $hand $chan $chan1 man.52 none
  8008. blacktools:tell $nick $host $hand $chan $chan1 man.53 none
  8009. }
  8010. }
  8011. devoice {
  8012. if {[matchattr $hand nm|MAVSO $chan]} {
  8013. blacktools:tell $nick $host $hand $chan $chan1 man.54 none
  8014. blacktools:tell $nick $host $hand $chan $chan1 man.55 none
  8015. }
  8016. }
  8017. k {
  8018. if {[matchattr $hand nm|MAVSO $chan]} {
  8019. blacktools:tell $nick $host $hand $chan $chan1 man.56 none
  8020. blacktools:tell $nick $host $hand $chan $chan1 man.57 none
  8021. blacktools:tell $nick $host $hand $chan $chan1 man.58 none
  8022. blacktools:tell $nick $host $hand $chan $chan1 man.59 none
  8023. blacktools:tell $nick $host $hand $chan $chan1 man.60 none
  8024. }
  8025. }
  8026. w {
  8027. if {[matchattr $hand nm|MAVSO $chan]} {
  8028. blacktools:tell $nick $host $hand $chan $chan1 man.61 none
  8029. blacktools:tell $nick $host $hand $chan $chan1 man.62 none
  8030. blacktools:tell $nick $host $hand $chan $chan1 man.63 none
  8031. blacktools:tell $nick $host $hand $chan $chan1 man.64 none
  8032. blacktools:tell $nick $host $hand $chan $chan1 man.65 none
  8033. }
  8034. }
  8035. check {
  8036. if {[matchattr $hand nm|MASO $chan]} {
  8037. blacktools:tell $nick $host $hand $chan $chan1 man.66 none
  8038. blacktools:tell $nick $host $hand $chan $chan1 man.67 none
  8039. blacktools:tell $nick $host $hand $chan $chan1 man.68 none
  8040. blacktools:tell $nick $host $hand $chan $chan1 man.69 none
  8041. blacktools:tell $nick $host $hand $chan $chan1 man.70 none
  8042. }
  8043. }
  8044. sb {
  8045. if {[matchattr $hand nm|MAVSO $chan]} {
  8046. blacktools:tell $nick $host $hand $chan $chan1 man.71 none
  8047. if {[matchattr $hand nm|- $chan]} {
  8048. blacktools:tell $nick $host $hand $chan $chan1 man.73 none
  8049. } else {
  8050. blacktools:tell $nick $host $hand $chan $chan1 man.72 none
  8051. }
  8052. blacktools:tell $nick $host $hand $chan $chan1 man.74 none
  8053. }
  8054. }
  8055. id {
  8056. if {[matchattr $hand nm|MASO $chan]} {
  8057. blacktools:tell $nick $host $hand $chan $chan1 man.75 none
  8058. blacktools:tell $nick $host $hand $chan $chan1 man.76 none
  8059. blacktools:tell $nick $host $hand $chan $chan1 man.77 none
  8060. blacktools:tell $nick $host $hand $chan $chan1 man.78 none
  8061. blacktools:tell $nick $host $hand $chan $chan1 man.79 none
  8062. }
  8063. }
  8064. n {
  8065. if {[matchattr $hand nm|MASO $chan]} {
  8066. blacktools:tell $nick $host $hand $chan $chan1 man.80 none
  8067. blacktools:tell $nick $host $hand $chan $chan1 man.81 none
  8068. blacktools:tell $nick $host $hand $chan $chan1 man.82 none
  8069. blacktools:tell $nick $host $hand $chan $chan1 man.83 none
  8070. blacktools:tell $nick $host $hand $chan $chan1 man.84 none
  8071. }
  8072. }
  8073. spam {
  8074. if {[matchattr $hand nm|MASO $chan]} {
  8075. blacktools:tell $nick $host $hand $chan $chan1 man.85 none
  8076. blacktools:tell $nick $host $hand $chan $chan1 man.86 none
  8077. blacktools:tell $nick $host $hand $chan $chan1 man.88 none
  8078. blacktools:tell $nick $host $hand $chan $chan1 man.89 none
  8079. blacktools:tell $nick $host $hand $chan $chan1 man.90 none
  8080. }
  8081. }
  8082. dr {
  8083. if {[matchattr $hand nm|MASO $chan]} {
  8084. blacktools:tell $nick $host $hand $chan $chan1 man.91 none
  8085. blacktools:tell $nick $host $hand $chan $chan1 man.92 none
  8086. blacktools:tell $nick $host $hand $chan $chan1 man.94 none
  8087. blacktools:tell $nick $host $hand $chan $chan1 man.95 none
  8088. blacktools:tell $nick $host $hand $chan $chan1 man.96 none
  8089. }
  8090. }
  8091. b {
  8092. if {[matchattr $hand nm|MASO $chan]} {
  8093. blacktools:tell $nick $host $hand $chan $chan1 man.97 none
  8094. if {[matchattr $hand nm|- $chan]} {
  8095. blacktools:tell $nick $host $hand $chan $chan1 man.99 none
  8096. } else { blacktools:tell $nick $host $hand $chan $chan1 man.98 none }
  8097. blacktools:tell $nick $host $hand $chan $chan1 man.101 none
  8098. blacktools:tell $nick $host $hand $chan $chan1 man.102 none
  8099. blacktools:tell $nick $host $hand $chan $chan1 man.103 none
  8100. }
  8101. }
  8102. ub {
  8103. if {[matchattr $hand nm|MASO $chan]} {
  8104. blacktools:tell $nick $host $hand $chan $chan1 man.104 none
  8105. if {[matchattr $hand nm|- $chan]} {
  8106. blacktools:tell $nick $host $hand $chan $chan1 man.106 none
  8107. } else { blacktools:tell $nick $host $hand $chan $chan1 man.105 none }
  8108. blacktools:tell $nick $host $hand $chan $chan1 man.107 none
  8109. }
  8110. }
  8111. d {
  8112. if {[matchattr $hand nm|MAS $chan]} {
  8113. blacktools:tell $nick $host $hand $chan $chan1 man.108 none
  8114. blacktools:tell $nick $host $hand $chan $chan1 man.109 non
  8115. blacktools:tell $nick $host $hand $chan $chan1 man.111 none
  8116. blacktools:tell $nick $host $hand $chan $chan1 man.112 none
  8117. blacktools:tell $nick $host $hand $chan $chan1 man.113 none
  8118. }
  8119. }
  8120. bot {
  8121. if {[matchattr $hand nm|MASO $chan]} {
  8122. blacktools:tell $nick $host $hand $chan $chan1 man.114 none
  8123. blacktools:tell $nick $host $hand $chan $chan1 man.115 none
  8124. blacktools:tell $nick $host $hand $chan $chan1 man.117 none
  8125. blacktools:tell $nick $host $hand $chan $chan1 man.118 none
  8126. blacktools:tell $nick $host $hand $chan $chan1 man.119 none
  8127. }
  8128. }
  8129. bw {
  8130. if {[matchattr $hand nm|MASO $chan]} {
  8131. blacktools:tell $nick $host $hand $chan $chan1 man.120 none
  8132. blacktools:tell $nick $host $hand $chan $chan1 man.121 none
  8133. blacktools:tell $nick $host $hand $chan $chan1 man.123 none
  8134. blacktools:tell $nick $host $hand $chan $chan1 man.124 none
  8135. blacktools:tell $nick $host $hand $chan $chan1 man.125 none
  8136. }
  8137. }
  8138. black {
  8139. if {[matchattr $hand nm|MAS $chan]} {
  8140. blacktools:tell $nick $host $hand $chan $chan1 man.126 none
  8141. blacktools:tell $nick $host $hand $chan $chan1 man.127 none
  8142. blacktools:tell $nick $host $hand $chan $chan1 man.129 none
  8143. blacktools:tell $nick $host $hand $chan $chan1 man.130 none
  8144. blacktools:tell $nick $host $hand $chan $chan1 man.131 none
  8145. }
  8146. }
  8147. stick {
  8148. if {[matchattr $hand nm|MAS $chan]} {
  8149. blacktools:tell $nick $host $hand $chan $chan1 man.132 none
  8150. blacktools:tell $nick $host $hand $chan $chan1 man.133 none
  8151. blacktools:tell $nick $host $hand $chan $chan1 man.134 none
  8152. blacktools:tell $nick $host $hand $chan $chan1 man.135 none
  8153. blacktools:tell $nick $host $hand $chan $chan1 man.136 none
  8154. }
  8155. }
  8156. gag {
  8157. if {[matchattr $hand nm|MASO $chan]} {
  8158. blacktools:tell $nick $host $hand $chan $chan1 man.137 none
  8159. blacktools:tell $nick $host $hand $chan $chan1 man.138 none
  8160. blacktools:tell $nick $host $hand $chan $chan1 man.139 none
  8161. blacktools:tell $nick $host $hand $chan $chan1 man.140 none
  8162. blacktools:tell $nick $host $hand $chan $chan1 man.141 none
  8163. }
  8164. }
  8165. ungag {
  8166. if {[matchattr $hand nm|MASO $chan]} {
  8167. blacktools:tell $nick $host $hand $chan $chan1 man.159 none
  8168. blacktools:tell $nick $host $hand $chan $chan1 man.160 none
  8169. }
  8170. }
  8171. add {
  8172. if {[matchattr $hand nm|MA $chan]} {
  8173. blacktools:tell $nick $host $hand $chan $chan1 man.142 "$black(chanserv) $black(hostadd)"
  8174. blacktools:tell $nick $host $hand $chan $chan1 man.143 none
  8175. if {[matchattr $hand n| $chan]} {
  8176. blacktools:tell $nick $host $hand $chan $chan1 man.144 none
  8177. } elseif {[matchattr $hand m| $chan]} {
  8178. blacktools:tell $nick $host $hand $chan $chan1 man.145 none
  8179. } elseif {[matchattr $hand -|M $chan]} {
  8180. blacktools:tell $nick $host $hand $chan $chan1 man.146 none
  8181. } elseif {[matchattr $hand -|A $chan]} {
  8182. blacktools:tell $nick $host $hand $chan $chan1 man.147 none
  8183. }
  8184. }
  8185. }
  8186. adduser {
  8187. if {[matchattr $hand nm|MA $chan]} {
  8188. blacktools:tell $nick $host $hand $chan $chan1 man.148 none
  8189. blacktools:tell $nick $host $hand $chan $chan1 man.149 none
  8190. if {[matchattr $hand n| $chan]} {
  8191. blacktools:tell $nick $host $hand $chan $chan1 man.150 none
  8192. } elseif {[matchattr $hand m| $chan]} {
  8193. blacktools:tell $nick $host $hand $chan $chan1 man.151 none
  8194. } elseif {[matchattr $hand -|M $chan]} {
  8195. blacktools:tell $nick $host $hand $chan $chan1 man.152 none
  8196. } elseif {[matchattr $hand -|A $chan]} {
  8197. blacktools:tell $nick $host $hand $chan $chan1 man.153 none
  8198. }
  8199. }
  8200. }
  8201. delacc {
  8202. if {[matchattr $hand nm|MA $chan]} {
  8203. blacktools:tell $nick $host $hand $chan $chan1 man.154 none
  8204. blacktools:tell $nick $host $hand $chan $chan1 man.155 none
  8205. if {[matchattr $hand nm]} {
  8206. blacktools:tell $nick $host $hand $chan $chan1 man.156 none
  8207. }
  8208. }
  8209. }
  8210. del {
  8211. if {[matchattr $hand nm|M $chan]} {
  8212. blacktools:tell $nick $host $hand $chan $chan1 man.157 none
  8213. blacktools:tell $nick $host $hand $chan $chan1 man.158 none
  8214. }
  8215. }
  8216. banlist {
  8217. if {[matchattr $hand nm|MAOS $chan]} {
  8218. blacktools:tell $nick $host $hand $chan $chan1 man.161 none
  8219. if {[matchattr $hand nm]} {
  8220. blacktools:tell $nick $host $hand $chan $chan1 man.163 none
  8221. } else {
  8222. blacktools:tell $nick $host $hand $chan $chan1 man.162 none
  8223. }
  8224. }
  8225. }
  8226. addhost {
  8227. if {[matchattr $hand nm|MA $chan]} {
  8228. blacktools:tell $nick $host $hand $chan $chan1 man.164 none
  8229. blacktools:tell $nick $host $hand $chan $chan1 man.165 none
  8230. }
  8231. }
  8232. delhost {
  8233. if {[matchattr $hand nm|MA $chan]} {
  8234. blacktools:tell $nick $host $hand $chan $chan1 man.166 none
  8235. blacktools:tell $nick $host $hand $chan $chan1 man.167 none
  8236. }
  8237. }
  8238. chuser {
  8239. if {[matchattr $hand nm|M $chan]} {
  8240. blacktools:tell $nick $host $hand $chan $chan1 man.168 none
  8241. blacktools:tell $nick $host $hand $chan $chan1 man.169 none
  8242. }
  8243. }
  8244. s {
  8245. if {[matchattr $hand nm|MA $chan]} {
  8246. blacktools:tell $nick $host $hand $chan $chan1 man.170 none
  8247. blacktools:tell $nick $host $hand $chan $chan1 man.171 none
  8248. }
  8249. }
  8250. us {
  8251. if {[matchattr $hand nm|MA $chan]} {
  8252. blacktools:tell $nick $host $hand $chan $chan1 man.172 none
  8253. blacktools:tell $nick $host $hand $chan $chan1 man.173 none
  8254. }
  8255. }
  8256. auto {
  8257. if {[matchattr $hand nm|MA $chan]} {
  8258. blacktools:tell $nick $host $hand $chan $chan1 man.174 none
  8259. if {[matchattr $hand nm]} {
  8260. blacktools:tell $nick $host $hand $chan $chan1 man.177 none
  8261. blacktools:tell $nick $host $hand $chan $chan1 man.178 none
  8262. } else {
  8263. blacktools:tell $nick $host $hand $chan $chan1 man.175 none
  8264. blacktools:tell $nick $host $hand $chan $chan1 man.176 none
  8265. }
  8266. }
  8267. }
  8268. antipub {
  8269. if {[matchattr $hand nm|M $chan]} {
  8270. blacktools:tell $nick $host $hand $chan $chan1 man.179 none
  8271. blacktools:tell $nick $host $hand $chan $chan1 man.180 none
  8272. blacktools:tell $nick $host $hand $chan $chan1 man.181 none
  8273. blacktools:tell $nick $host $hand $chan $chan1 man.182 none
  8274. blacktools:tell $nick $host $hand $chan $chan1 man.183 none
  8275. }
  8276. }
  8277. antinotice {
  8278. if {[matchattr $hand nm|M $chan]} {
  8279. blacktools:tell $nick $host $hand $chan $chan1 man.184 none
  8280. blacktools:tell $nick $host $hand $chan $chan1 man.185 none
  8281. blacktools:tell $nick $host $hand $chan $chan1 man.186 none
  8282. blacktools:tell $nick $host $hand $chan $chan1 man.187 none
  8283. blacktools:tell $nick $host $hand $chan $chan1 man.188 none
  8284. }
  8285. }
  8286. antictcp {
  8287. if {[matchattr $hand nm|M $chan]} {
  8288. blacktools:tell $nick $host $hand $chan $chan1 man.189 none
  8289. blacktools:tell $nick $host $hand $chan $chan1 man.190 none
  8290. blacktools:tell $nick $host $hand $chan $chan1 man.191 none
  8291. blacktools:tell $nick $host $hand $chan $chan1 man.192 none
  8292. blacktools:tell $nick $host $hand $chan $chan1 man.193 none
  8293. }
  8294. }
  8295. antibadword {
  8296. if {[matchattr $hand nm|M $chan]} {
  8297. blacktools:tell $nick $host $hand $chan $chan1 man.194 none
  8298. blacktools:tell $nick $host $hand $chan $chan1 man.195 none
  8299. blacktools:tell $nick $host $hand $chan $chan1 man.196 none
  8300. blacktools:tell $nick $host $hand $chan $chan1 man.197 none
  8301. blacktools:tell $nick $host $hand $chan $chan1 man.198 none
  8302. }
  8303. }
  8304. antilongtext {
  8305. if {[matchattr $hand nm|M $chan]} {
  8306. blacktools:tell $nick $host $hand $chan $chan1 man.199 none
  8307. blacktools:tell $nick $host $hand $chan $chan1 man.200 none
  8308. blacktools:tell $nick $host $hand $chan $chan1 man.201 none
  8309. blacktools:tell $nick $host $hand $chan $chan1 man.202 none
  8310. blacktools:tell $nick $host $hand $chan $chan1 man.203 none
  8311. }
  8312. }
  8313. badquitpart {
  8314. if {[matchattr $hand nm|M $chan]} {
  8315. blacktools:tell $nick $host $hand $chan $chan1 man.204 none
  8316. blacktools:tell $nick $host $hand $chan $chan1 man.205 none
  8317. blacktools:tell $nick $host $hand $chan $chan1 man.206 none
  8318. blacktools:tell $nick $host $hand $chan $chan1 man.207 none
  8319. blacktools:tell $nick $host $hand $chan $chan1 man.208 none
  8320. }
  8321. }
  8322. antijoinpart {
  8323. if {[matchattr $hand nm|M $chan]} {
  8324. blacktools:tell $nick $host $hand $chan $chan1 man.209 none
  8325. blacktools:tell $nick $host $hand $chan $chan1 man.210 none
  8326. blacktools:tell $nick $host $hand $chan $chan1 man.211 none
  8327. blacktools:tell $nick $host $hand $chan $chan1 man.212 none
  8328. blacktools:tell $nick $host $hand $chan $chan1 man.213 none
  8329. }
  8330. }
  8331. antispam {
  8332. if {[matchattr $hand nm|M $chan]} {
  8333. blacktools:tell $nick $host $hand $chan $chan1 man.214 none
  8334. blacktools:tell $nick $host $hand $chan $chan1 man.215 none
  8335. blacktools:tell $nick $host $hand $chan $chan1 man.216 none
  8336. blacktools:tell $nick $host $hand $chan $chan1 man.217 none
  8337. blacktools:tell $nick $host $hand $chan $chan1 man.218 none
  8338. }
  8339. }
  8340. antirepeat {
  8341. if {[matchattr $hand nm|M $chan]} {
  8342. blacktools:tell $nick $host $hand $chan $chan1 man.219 none
  8343. blacktools:tell $nick $host $hand $chan $chan1 man.220 none
  8344. blacktools:tell $nick $host $hand $chan $chan1 man.221 none
  8345. blacktools:tell $nick $host $hand $chan $chan1 man.222 none
  8346. blacktools:tell $nick $host $hand $chan $chan1 man.223 none
  8347. }
  8348. }
  8349. anticolor {
  8350. if {[matchattr $hand nm|M $chan]} {
  8351. blacktools:tell $nick $host $hand $chan $chan1 man.224 none
  8352. blacktools:tell $nick $host $hand $chan $chan1 man.225 none
  8353. blacktools:tell $nick $host $hand $chan $chan1 man.226 none
  8354. blacktools:tell $nick $host $hand $chan $chan1 man.227 none
  8355. blacktools:tell $nick $host $hand $chan $chan1 man.228 none
  8356. }
  8357. }
  8358. antibold {
  8359. if {[matchattr $hand nm|M $chan]} {
  8360. blacktools:tell $nick $host $hand $chan $chan1 man.229 none
  8361. blacktools:tell $nick $host $hand $chan $chan1 man.230 none
  8362. blacktools:tell $nick $host $hand $chan $chan1 man.231 none
  8363. blacktools:tell $nick $host $hand $chan $chan1 man.232 none
  8364. blacktools:tell $nick $host $hand $chan $chan1 man.233 none
  8365. }
  8366. }
  8367. antiunderline {
  8368. if {[matchattr $hand nm|M $chan]} {
  8369. blacktools:tell $nick $host $hand $chan $chan1 man.234 none
  8370. blacktools:tell $nick $host $hand $chan $chan1 man.235 none
  8371. blacktools:tell $nick $host $hand $chan $chan1 man.236 none
  8372. blacktools:tell $nick $host $hand $chan $chan1 man.237 none
  8373. blacktools:tell $nick $host $hand $chan $chan1 man.238 none
  8374. }
  8375. }
  8376. anticaps {
  8377. if {[matchattr $hand nm|M $chan]} {
  8378. blacktools:tell $nick $host $hand $chan $chan1 man.239 none
  8379. blacktools:tell $nick $host $hand $chan $chan1 man.240 none
  8380. blacktools:tell $nick $host $hand $chan $chan1 man.241 none
  8381. blacktools:tell $nick $host $hand $chan $chan1 man.242 none
  8382. blacktools:tell $nick $host $hand $chan $chan1 man.243 none
  8383. }
  8384. }
  8385. badnick {
  8386. if {[matchattr $hand nm|M $chan]} {
  8387. blacktools:tell $nick $host $hand $chan $chan1 man.244 none
  8388. blacktools:tell $nick $host $hand $chan $chan1 man.245 none
  8389. blacktools:tell $nick $host $hand $chan $chan1 man.246 none
  8390. blacktools:tell $nick $host $hand $chan $chan1 man.247 none
  8391. blacktools:tell $nick $host $hand $chan $chan1 man.248 none
  8392. }
  8393. }
  8394. badfullname {
  8395. if {[matchattr $hand nm|M $chan]} {
  8396. blacktools:tell $nick $host $hand $chan $chan1 man.249 none
  8397. blacktools:tell $nick $host $hand $chan $chan1 man.250 none
  8398. blacktools:tell $nick $host $hand $chan $chan1 man.251 none
  8399. blacktools:tell $nick $host $hand $chan $chan1 man.252 none
  8400. blacktools:tell $nick $host $hand $chan $chan1 man.253 none
  8401. }
  8402. }
  8403. autoop {
  8404. if {[matchattr $hand nm|M $chan]} {
  8405. blacktools:tell $nick $host $hand $chan $chan1 man.254 none
  8406. blacktools:tell $nick $host $hand $chan $chan1 man.255 none
  8407. }
  8408. }
  8409. autovoice {
  8410. if {[matchattr $hand nm|M $chan]} {
  8411. blacktools:tell $nick $host $hand $chan $chan1 man.256 none
  8412. blacktools:tell $nick $host $hand $chan $chan1 man.257 none
  8413. }
  8414. }
  8415. antijoinflood {
  8416. if {[matchattr $hand nm|M $chan]} {
  8417. blacktools:tell $nick $host $hand $chan $chan1 man.258 none
  8418. blacktools:tell $nick $host $hand $chan $chan1 man.259 none
  8419. blacktools:tell $nick $host $hand $chan $chan1 man.260 none
  8420. blacktools:tell $nick $host $hand $chan $chan1 man.261 none
  8421. blacktools:tell $nick $host $hand $chan $chan1 man.262 none
  8422. }
  8423. }
  8424. antichanflood {
  8425. if {[matchattr $hand nm|M $chan]} {
  8426. blacktools:tell $nick $host $hand $chan $chan1 man.263 none
  8427. blacktools:tell $nick $host $hand $chan $chan1 man.264 none
  8428. blacktools:tell $nick $host $hand $chan $chan1 man.265 none
  8429. blacktools:tell $nick $host $hand $chan $chan1 man.266 none
  8430. blacktools:tell $nick $host $hand $chan $chan1 man.267 none
  8431. }
  8432. }
  8433. badident {
  8434. if {[matchattr $hand nm|M $chan]} {
  8435. blacktools:tell $nick $host $hand $chan $chan1 man.268 none
  8436. blacktools:tell $nick $host $hand $chan $chan1 man.269 none
  8437. blacktools:tell $nick $host $hand $chan $chan1 man.270 none
  8438. blacktools:tell $nick $host $hand $chan $chan1 man.271 none
  8439. blacktools:tell $nick $host $hand $chan $chan1 man.272 none
  8440. }
  8441. }
  8442. showtime {
  8443. if {[matchattr $hand nm|M $chan]} {
  8444. blacktools:tell $nick $host $hand $chan $chan1 man.273 none
  8445. blacktools:tell $nick $host $hand $chan $chan1 man.274 none
  8446. }
  8447. }
  8448. showhandle {
  8449. if {[matchattr $hand nm|M $chan]} {
  8450. blacktools:tell $nick $host $hand $chan $chan1 man.275 none
  8451. blacktools:tell $nick $host $hand $chan $chan1 man.276 none
  8452. }
  8453. }
  8454. showcount {
  8455. if {[matchattr $hand nm|M $chan]} {
  8456. blacktools:tell $nick $host $hand $chan $chan1 man.277 none
  8457. blacktools:tell $nick $host $hand $chan $chan1 man.278 none
  8458. }
  8459. }
  8460. xbantime {
  8461. if {[matchattr $hand nm|M $chan]} {
  8462. blacktools:tell $nick $host $hand $chan $chan1 man.279 none
  8463. blacktools:tell $nick $host $hand $chan $chan1 man.280 none
  8464. }
  8465. }
  8466. xbanlevel {
  8467. if {[matchattr $hand nm|M $chan]} {
  8468. blacktools:tell $nick $host $hand $chan $chan1 man.281 none
  8469. blacktools:tell $nick $host $hand $chan $chan1 man.282 none
  8470. }
  8471. }
  8472. oprotect {
  8473. if {[matchattr $hand nm|M $chan]} {
  8474. blacktools:tell $nick $host $hand $chan $chan1 man.283 none
  8475. blacktools:tell $nick $host $hand $chan $chan1 man.284 none
  8476. }
  8477. }
  8478. vprotect {
  8479. if {[matchattr $hand nm|M $chan]} {
  8480. blacktools:tell $nick $host $hand $chan $chan1 man.285 none
  8481. blacktools:tell $nick $host $hand $chan $chan1 man.286 none
  8482. }
  8483. }
  8484. topicrefresh {
  8485. if {[matchattr $hand nm|M $chan]} {
  8486. blacktools:tell $nick $host $hand $chan $chan1 man.287 none
  8487. blacktools:tell $nick $host $hand $chan $chan1 man.288 none
  8488. }
  8489. }
  8490. count {
  8491. if {[matchattr $hand nm|M $chan]} {
  8492. blacktools:tell $nick $host $hand $chan $chan1 man.289 none
  8493. blacktools:tell $nick $host $hand $chan $chan1 man.290 none
  8494. blacktools:tell $nick $host $hand $chan $chan1 man.291 none
  8495. blacktools:tell $nick $host $hand $chan $chan1 man.292 none
  8496. blacktools:tell $nick $host $hand $chan $chan1 man.293 none
  8497. blacktools:tell $nick $host $hand $chan $chan1 man.294 none
  8498. }
  8499. }
  8500. xtools {
  8501. if {[matchattr $hand nm|M $chan]} {
  8502. blacktools:tell $nick $host $hand $chan $chan1 man.295 none
  8503. blacktools:tell $nick $host $hand $chan $chan1 man.296 none
  8504. }
  8505. }
  8506. badchan {
  8507. if {[matchattr $hand nm|M $chan]} {
  8508. blacktools:tell $nick $host $hand $chan $chan1 man.297 none
  8509. blacktools:tell $nick $host $hand $chan $chan1 man.298 none
  8510. if {[matchattr $hand nm]} {
  8511. blacktools:tell $nick $host $hand $chan $chan1 man.299 none
  8512. blacktools:tell $nick $host $hand $chan $chan1 man.301 none
  8513. } else {
  8514. blacktools:tell $nick $host $hand $chan $chan1 man.300 none
  8515. blacktools:tell $nick $host $hand $chan $chan1 man.302 none
  8516. }
  8517. blacktools:tell $nick $host $hand $chan $chan1 man.303 none
  8518. }
  8519. }
  8520. anunt {
  8521. if {[matchattr $hand nm|M $chan]} {
  8522. blacktools:tell $nick $host $hand $chan $chan1 man.304 none
  8523. blacktools:tell $nick $host $hand $chan $chan1 man.305 none
  8524. blacktools:tell $nick $host $hand $chan $chan1 man.306 none
  8525. blacktools:tell $nick $host $hand $chan $chan1 man.307 none
  8526. }
  8527. }
  8528. limit {
  8529. if {[matchattr $hand nm|M $chan]} {
  8530. blacktools:tell $nick $host $hand $chan $chan1 man.308 none
  8531. blacktools:tell $nick $host $hand $chan $chan1 man.309 none
  8532. blacktools:tell $nick $host $hand $chan $chan1 man.310 none
  8533. }
  8534. }
  8535. topic {
  8536. if {[matchattr $hand nm|M $chan]} {
  8537. blacktools:tell $nick $host $hand $chan $chan1 man.311 none
  8538. blacktools:tell $nick $host $hand $chan $chan1 man.312 none
  8539. blacktools:tell $nick $host $hand $chan $chan1 man.313 none
  8540. blacktools:tell $nick $host $hand $chan $chan1 man.313_1 none
  8541. }
  8542. }
  8543. clonescan {
  8544. if {[matchattr $hand nm|M $chan]} {
  8545. blacktools:tell $nick $host $hand $chan $chan1 man.314 none
  8546. blacktools:tell $nick $host $hand $chan $chan1 man.315 none
  8547. blacktools:tell $nick $host $hand $chan $chan1 man.316 none
  8548. blacktools:tell $nick $host $hand $chan $chan1 man.317 none
  8549. blacktools:tell $nick $host $hand $chan $chan1 man.318 none
  8550. }
  8551. }
  8552. seen {
  8553. if {[matchattr $hand nm|M $chan]} {
  8554. blacktools:tell $nick $host $hand $chan $chan1 man.319 none
  8555. blacktools:tell $nick $host $hand $chan $chan1 man.320 none
  8556. blacktools:tell $nick $host $hand $chan $chan1 man.321 none
  8557. blacktools:tell $nick $host $hand $chan $chan1 man.322 none
  8558. blacktools:tell $nick $host $hand $chan $chan1 man.323 none
  8559. }
  8560. }
  8561. greet {
  8562. if {[matchattr $hand nm|M $chan]} {
  8563. blacktools:tell $nick $host $hand $chan $chan1 man.324 none
  8564. blacktools:tell $nick $host $hand $chan $chan1 man.325 none
  8565. blacktools:tell $nick $host $hand $chan $chan1 man.326 none
  8566. blacktools:tell $nick $host $hand $chan $chan1 man.327 none
  8567. blacktools:tell $nick $host $hand $chan $chan1 man.328 none
  8568. }
  8569. }
  8570. leave {
  8571. if {[matchattr $hand nm|M $chan]} {
  8572. blacktools:tell $nick $host $hand $chan $chan1 man.329 none
  8573. blacktools:tell $nick $host $hand $chan $chan1 man.330 none
  8574. blacktools:tell $nick $host $hand $chan $chan1 man.331 none
  8575. blacktools:tell $nick $host $hand $chan $chan1 man.332 none
  8576. blacktools:tell $nick $host $hand $chan $chan1 man.333 none
  8577. }
  8578. }
  8579. idle {
  8580. if {[matchattr $hand nm|M $chan]} {
  8581. blacktools:tell $nick $host $hand $chan $chan1 man.334 none
  8582. blacktools:tell $nick $host $hand $chan $chan1 man.335 none
  8583. blacktools:tell $nick $host $hand $chan $chan1 man.335_1 none
  8584. blacktools:tell $nick $host $hand $chan $chan1 man.336 none
  8585. blacktools:tell $nick $host $hand $chan $chan1 man.336_1 none
  8586. }
  8587. }
  8588. chanreport {
  8589. if {[matchattr $hand nm|M $chan]} {
  8590. blacktools:tell $nick $host $hand $chan $chan1 man.337 none
  8591. blacktools:tell $nick $host $hand $chan $chan1 man.338 none
  8592. blacktools:tell $nick $host $hand $chan $chan1 man.339 none
  8593. blacktools:tell $nick $host $hand $chan $chan1 man.340 none
  8594. }
  8595. }
  8596. topwords {
  8597. if {[matchattr $hand nm|M $chan]} {
  8598. blacktools:tell $nick $host $hand $chan $chan1 man.341 none
  8599. blacktools:tell $nick $host $hand $chan $chan1 man.342 none
  8600. blacktools:tell $nick $host $hand $chan $chan1 man.343 none
  8601. }
  8602. }
  8603. xban {
  8604. if {[matchattr $hand nm|M $chan]} {
  8605. blacktools:tell $nick $host $hand $chan $chan1 man.344 none
  8606. blacktools:tell $nick $host $hand $chan $chan1 man.345 none
  8607. blacktools:tell $nick $host $hand $chan $chan1 man.346 none
  8608. blacktools:tell $nick $host $hand $chan $chan1 man.347 none
  8609. blacktools:tell $nick $host $hand $chan $chan1 man.348 none
  8610. }
  8611. }
  8612. antitake {
  8613. if {[matchattr $hand nm|M $chan]} {
  8614. blacktools:tell $nick $host $hand $chan $chan1 man.349 none
  8615. blacktools:tell $nick $host $hand $chan $chan1 man.350 none
  8616. }
  8617. }
  8618. private {
  8619. if {[matchattr $hand nm|M $chan]} {
  8620. blacktools:tell $nick $host $hand $chan $chan1 man.351 none
  8621. blacktools:tell $nick $host $hand $chan $chan1 man.352 none
  8622. blacktools:tell $nick $host $hand $chan $chan1 man.353 none
  8623. blacktools:tell $nick $host $hand $chan $chan1 man.353_1 none
  8624. blacktools:tell $nick $host $hand $chan $chan1 man.353_2 none
  8625. blacktools:tell $nick $host $hand $chan $chan1 man.353_3 none
  8626. }
  8627. }
  8628. autobroadcast {
  8629. if {[matchattr $hand nm|- $chan]} {
  8630. blacktools:tell $nick $host $hand $chan $chan1 man.354 none
  8631. blacktools:tell $nick $host $hand $chan $chan1 man.355 none
  8632. blacktools:tell $nick $host $hand $chan $chan1 man.356 none
  8633. blacktools:tell $nick $host $hand $chan $chan1 man.357 none
  8634. }
  8635. }
  8636. antibotidle {
  8637. if {[matchattr $hand nm|- $chan]} {
  8638. blacktools:tell $nick $host $hand $chan $chan1 man.358 none
  8639. blacktools:tell $nick $host $hand $chan $chan1 man.359 none
  8640. }
  8641. }
  8642. language {
  8643. if {[matchattr $hand nm|M $chan]} {
  8644. blacktools:tell $nick $host $hand $chan $chan1 man.360 none
  8645. blacktools:tell $nick $host $hand $chan $chan1 man.361 none
  8646. }
  8647. }
  8648. badwordadd {
  8649. if {[matchattr $hand nm|M $chan]} {
  8650. blacktools:tell $nick $host $hand $chan $chan1 man.362 none
  8651. blacktools:tell $nick $host $hand $chan $chan1 man.363 none
  8652. }
  8653. }
  8654. antipubexcept {
  8655. if {[matchattr $hand nm|M $chan]} {
  8656. blacktools:tell $nick $host $hand $chan $chan1 man.364 none
  8657. blacktools:tell $nick $host $hand $chan $chan1 man.365 none
  8658. }
  8659. }
  8660. tcl {
  8661. if {[matchattr $hand n|- $chan]} {
  8662. blacktools:tell $nick $host $hand $chan $chan1 man.366 none
  8663. blacktools:tell $nick $host $hand $chan $chan1 man.367 none
  8664. }
  8665. }
  8666. next {
  8667. if {[matchattr $hand nm|M $chan]} {
  8668. blacktools:tell $nick $host $hand $chan $chan1 man.368 none
  8669. blacktools:tell $nick $host $hand $chan $chan1 man.369 none
  8670. blacktools:tell $nick $host $hand $chan $chan1 man.370 none
  8671. blacktools:tell $nick $host $hand $chan $chan1 man.371 none
  8672. blacktools:tell $nick $host $hand $chan $chan1 man.372 none
  8673. blacktools:tell $nick $host $hand $chan $chan1 man.373 none
  8674. }
  8675. }
  8676. uptime {
  8677. if {[matchattr $hand nm|- $chan]} {
  8678. blacktools:tell $nick $host $hand $chan $chan1 man.374 none
  8679. blacktools:tell $nick $host $hand $chan $chan1 man.375 none
  8680. }
  8681. }
  8682. status {
  8683. if {[matchattr $hand nm|- $chan]} {
  8684. blacktools:tell $nick $host $hand $chan $chan1 man.376 none
  8685. blacktools:tell $nick $host $hand $chan $chan1 man.377 none
  8686. }
  8687. }
  8688. set {
  8689. if {[matchattr $hand nm|M $chan]} {
  8690. blacktools:tell $nick $host $hand $chan $chan1 man.378 none
  8691. blacktools:tell $nick $host $hand $chan $chan1 man.379 none
  8692. if {[matchattr $hand nm|- $chan]} {
  8693. blacktools:tell $nick $host $hand $chan $chan1 man.380 none
  8694. } else { blacktools:tell $nick $host $hand $chan $chan1 man.381 none }
  8695. }
  8696. }
  8697. away {
  8698. if {[matchattr $hand nm|- $chan]} {
  8699. blacktools:tell $nick $host $hand $chan $chan1 man.382 none
  8700. blacktools:tell $nick $host $hand $chan $chan1 man.383 none
  8701. blacktools:tell $nick $host $hand $chan $chan1 man.384 none
  8702. }
  8703. }
  8704. silence {
  8705. if {[matchattr $hand nm|- $chan]} {
  8706. blacktools:tell $nick $host $hand $chan $chan1 man.385 none
  8707. blacktools:tell $nick $host $hand $chan $chan1 man.386 none
  8708. }
  8709. }
  8710. jump {
  8711. if {[matchattr $hand nm|- $chan]} {
  8712. blacktools:tell $nick $host $hand $chan $chan1 man.387 none
  8713. blacktools:tell $nick $host $hand $chan $chan1 man.388 none
  8714. }
  8715. }
  8716. msg {
  8717. if {[matchattr $hand nm|- $chan]} {
  8718. blacktools:tell $nick $host $hand $chan $chan1 man.389 none
  8719. blacktools:tell $nick $host $hand $chan $chan1 man.390 none
  8720. }
  8721. }
  8722. broadcast {
  8723. if {[matchattr $hand nm|- $chan]} {
  8724. blacktools:tell $nick $host $hand $chan $chan1 man.391 none
  8725. blacktools:tell $nick $host $hand $chan $chan1 man.392 none
  8726. }
  8727. }
  8728. ignore {
  8729. if {[matchattr $hand nm|- $chan]} {
  8730. blacktools:tell $nick $host $hand $chan $chan1 man.393 none
  8731. blacktools:tell $nick $host $hand $chan $chan1 man.394 none
  8732. }
  8733. }
  8734. chat {
  8735. if {[matchattr $hand nm|- $chan]} {
  8736. blacktools:tell $nick $host $hand $chan $chan1 man.395 none
  8737. blacktools:tell $nick $host $hand $chan $chan1 man.396 none
  8738. }
  8739. }
  8740. login {
  8741. if {[matchattr $hand nm|- $chan]} {
  8742. blacktools:tell $nick $host $hand $chan $chan1 man.397 none
  8743. blacktools:tell $nick $host $hand $chan $chan1 man.398 none
  8744. }
  8745. }
  8746. channels {
  8747. if {[matchattr $hand nm|- $chan]} {
  8748. blacktools:tell $nick $host $hand $chan $chan1 man.399 none
  8749. blacktools:tell $nick $host $hand $chan $chan1 man.400 none
  8750. }
  8751. }
  8752. nick {
  8753. if {[matchattr $hand nm|- $chan]} {
  8754. blacktools:tell $nick $host $hand $chan $chan1 man.401 none
  8755. blacktools:tell $nick $host $hand $chan $chan1 man.402 none
  8756. }
  8757. }
  8758. restart {
  8759. if {[matchattr $hand nm|- $chan]} {
  8760. blacktools:tell $nick $host $hand $chan $chan1 man.403 none
  8761. blacktools:tell $nick $host $hand $chan $chan1 man.404 none
  8762. }
  8763. }
  8764. rehash {
  8765. if {[matchattr $hand nm|- $chan]} {
  8766. blacktools:tell $nick $host $hand $chan $chan1 man.405 none
  8767. blacktools:tell $nick $host $hand $chan $chan1 man.406 none
  8768. }
  8769. }
  8770. die {
  8771. if {[matchattr $hand nm|- $chan]} {
  8772. blacktools:tell $nick $host $hand $chan $chan1 man.407 none
  8773. blacktools:tell $nick $host $hand $chan $chan1 man.408 none
  8774. }
  8775. }
  8776. suspend {
  8777. if {[matchattr $hand nm|- $chan]} {
  8778. blacktools:tell $nick $host $hand $chan $chan1 man.409 none
  8779. blacktools:tell $nick $host $hand $chan $chan1 man.410 none
  8780. }
  8781. }
  8782. unsuspend {
  8783. if {[matchattr $hand nm|- $chan]} {
  8784. blacktools:tell $nick $host $hand $chan $chan1 man.411 none
  8785. blacktools:tell $nick $host $hand $chan $chan1 man.412 none
  8786. }
  8787. }
  8788. save {
  8789. if {[matchattr $hand nm|- $chan]} {
  8790. blacktools:tell $nick $host $hand $chan $chan1 man.413 none
  8791. blacktools:tell $nick $host $hand $chan $chan1 man.414 none
  8792. }
  8793. }
  8794. addchan {
  8795. if {[matchattr $hand nm|- $chan]} {
  8796. blacktools:tell $nick $host $hand $chan $chan1 man.415 none
  8797. blacktools:tell $nick $host $hand $chan $chan1 man.416 none
  8798. blacktools:tell $nick $host $hand $chan $chan1 man.417 none
  8799. }
  8800. }
  8801. delchan {
  8802. if {[matchattr $hand nm|- $chan]} {
  8803. blacktools:tell $nick $host $hand $chan $chan1 man.418 none
  8804. blacktools:tell $nick $host $hand $chan $chan1 man.419 none
  8805. }
  8806. }
  8807. find {
  8808. if {[matchattr $hand nm|- $chan]} {
  8809. blacktools:tell $nick $host $hand $chan $chan1 man.420 none
  8810. blacktools:tell $nick $host $hand $chan $chan1 man.421 none
  8811. }
  8812. }
  8813. purge {
  8814. if {[matchattr $hand nm|- $chan]} {
  8815. blacktools:tell $nick $host $hand $chan $chan1 man.422 none
  8816. blacktools:tell $nick $host $hand $chan $chan1 man.423 none
  8817. }
  8818. }
  8819. addinfo {
  8820. if {[matchattr $hand nm|- $chan]} {
  8821. blacktools:tell $nick $host $hand $chan $chan1 man.424 none
  8822. blacktools:tell $nick $host $hand $chan $chan1 man.425 none
  8823. blacktools:tell $nick $host $hand $chan $chan1 man.426 none
  8824. }
  8825. }
  8826. invite {
  8827. if {[matchattr $hand nm|- $chan]} {
  8828. blacktools:tell $nick $host $hand $chan $chan1 man.427 none
  8829. blacktools:tell $nick $host $hand $chan $chan1 man.428 none
  8830. }
  8831. }
  8832. }
  8833. }
  8834. proc comand:pubme {nick host hand chan arg} {
  8835. global botnick wordsdir sdir black seendir count server uptime {server-online}
  8836. set arg [split $arg]
  8837. set bnick [lindex [split $arg] 0]
  8838. set what [lindex [split $arg] 1]
  8839. if {([lsearch -exact [string tolower $bnick] [string tolower $botnick]] == 0)} {
  8840. switch -exact -- [string tolower $what] {
  8841. man {
  8842. if {[matchattr $hand nm|MASOV $chan]} {
  8843. set command [lindex [split $arg] 2]
  8844. set type 1
  8845. set chan1 $chan
  8846. man:process $nick $host $hand $chan $chan1 $type $command
  8847. }
  8848. }
  8849. auto {
  8850. if {[matchattr $hand nm|MA $chan]} {
  8851. set type 0
  8852. set chan1 "$chan"
  8853. set user [lindex [split $arg] 3]
  8854. set option [lindex [split $arg] 2]
  8855. set global [lindex [split $arg] 4]
  8856. if {[regexp {^[&#]} $option] && [matchattr $hand nm|- $chan] && ![string equal -nocase $global "-global"]} {
  8857. set chan "$option"
  8858. set user [lindex [split $arg] 4]
  8859. set option [lindex [split $arg] 3]
  8860. set global [lindex [split $arg] 5]
  8861. }
  8862. auto:process $nick $host $hand $chan $chan1 $user $option $global $type
  8863. }
  8864. }
  8865. antipub {
  8866. if {[matchattr $hand nm|M $chan]} {
  8867. set type 1
  8868. set chan1 "$chan"
  8869. set why [lindex [split $arg] 2]
  8870. set except [lrange [split $arg] 3 end]
  8871. if {[regexp {^[&#]} $why] && [matchattr $hand nm|- $chan]} {
  8872. set chan "$why"
  8873. set why [lindex [split $arg] 3]
  8874. set except [lrange [split $arg] 4 end]
  8875. }
  8876. antipub:module:process $nick $host $hand $chan $chan1 $why $except $type
  8877. }
  8878. }
  8879. clear {
  8880. if {[matchattr $hand nm|M $chan]} {
  8881. set why [lindex [split $arg] 2]
  8882. set type 1
  8883. set chan1 "$chan"
  8884. if {[regexp {^[&#]} $why] && [matchattr $hand nm|- $chan]} {
  8885. set chan "$why"
  8886. set why [lindex [split $arg] 3]
  8887. }
  8888. clear:process $nick $host $hand $chan $chan1 $why $type
  8889. }
  8890. }
  8891. private {
  8892. if {[matchattr $hand nm|M $chan]} {
  8893. set type 1
  8894. set chan1 "$chan"
  8895. set why [lindex [split $arg] 2]
  8896. set user [lindex [split $arg] 3]
  8897. set host [lindex [split $arg] 4]
  8898. if {[regexp {^[&#]} $why] && [matchattr $hand nm|- $chan]} {
  8899. set chan "$why"
  8900. set why [lindex [split $arg] 3]
  8901. set user [lindex [split $arg] 4]
  8902. set host [lindex [split $arg] 5]
  8903. }
  8904. private:process $nick $host $hand $chan $chan1 $why $user $host $type
  8905. }
  8906. }
  8907. tcl {
  8908. if {[matchattr $hand n|- $chan]} {
  8909. set type 1
  8910. set chan1 "$chan"
  8911. set the_script [lindex [split $arg] 3]
  8912. set who [lindex [split $arg] 2]
  8913. tcl:process $nick $host $hand $chan $chan1 $type $the_script $who
  8914. }
  8915. }
  8916. find {
  8917. if {[matchattr $hand nm|- $chan]} {
  8918. set info [lindex [split $arg] 2]
  8919. set type 1
  8920. set chan1 "$chan"
  8921. find:process $info $nick $hand $host $chan $chan1 $type
  8922. }
  8923. }
  8924. login {
  8925. if {[matchattr $hand nm|- $chan]} {
  8926. putquick "$black(login)"
  8927. putquick "MODE $botnick :$black(xmod)"
  8928. blacktools:tell:prv $nick $host $hand login.1 $black(chanserv)
  8929. }
  8930. }
  8931. h {
  8932. if {[matchattr $hand nm|MSOAV $chan]} {
  8933. set chan1 "$chan"
  8934. set command [lindex [split $arg] 2]
  8935. h:process $nick $host $hand $chan $chan1 $command
  8936. }
  8937. }
  8938. secure {
  8939. if {[matchattr $hand nm|M $chan]} {
  8940. set what [lindex [split $arg] 2]
  8941. set type 1
  8942. set chan1 "$chan"
  8943. if {[regexp {^[&#]} $what] && [matchattr $hand nm|- $chan]} {
  8944. set chan "$what"
  8945. set what [lindex [split $arg] 3]
  8946. }
  8947. secure:process $nick $host $hand $chan $chan1 $what $type
  8948. }
  8949. }
  8950. ignore {
  8951. if {[matchattr $hand nm|- $chan]} {
  8952. set chan1 "$chan"
  8953. set what [lindex [split $arg] 2]
  8954. set mask [lindex [split $arg] 3]
  8955. set time [lindex [split $arg] 4]
  8956. set reason [join [lrange [split $arg] 5 end]]
  8957. if {$what == ""} { blacktools:tell $nick $host $hand $chan $chan1 ignore.2 none
  8958. return 0
  8959. }
  8960. ignore:process $nick $host $hand $chan $chan1 $what $mask $time $reason
  8961. }
  8962. }
  8963. idle {
  8964. if {[matchattr $hand nm|M $chan]} {
  8965. set char(p) [lindex $black(cmdchar) 0]
  8966. set flag "-|f"
  8967. set type1 1
  8968. set chan1 "$chan"
  8969. set why [lindex [split $arg] 2]
  8970. set type [lindex [split $arg] 3]
  8971. set user [lindex [split $arg] 3]
  8972. set host [lindex [split $arg] 4]
  8973. if {[regexp {^[&#]} $why] && [matchattr $hand nm|- $chan]} {
  8974. set chan "$why"
  8975. set why [lindex [split $arg] 3]
  8976. set type [lindex [split $arg] 4]
  8977. set user [lindex [split $arg] 4]
  8978. set host [lindex [split $arg] 5]
  8979. }
  8980. antidle:process $why $type $type1 $user $host $nick $hand $chan $chan1
  8981. }
  8982. }
  8983. version {
  8984. if {[matchattr $hand nm|MASOV $chan]} {
  8985. set chan1 "$chan"
  8986. version:process $nick $host $hand $chan $chan1
  8987. }
  8988. }
  8989. cc {
  8990. if {[matchattr $hand nm|MASO $chan]} {
  8991. set ::chan $chan
  8992. set chan1 "$chan"
  8993. set c [lindex [split $arg] 2]
  8994. if {$c == ""} { blacktools:tell $nick $host $hand $chan $chan1 cc.2 none
  8995. return 0
  8996. }
  8997. if {![regexp {^[&#]} $c]} {
  8998. set c #$c
  8999. }
  9000. putquick "MODE $c"
  9001. bind raw - 329 createdpublic
  9002. bind raw - 403 nocreatedpublic
  9003. }
  9004. }
  9005. activ {
  9006. if {[matchattr $hand nm|MASOV $chan]} {
  9007. set type 1
  9008. set chan1 "$chan"
  9009. set user [lindex [split $arg] 2]
  9010. set option [lindex [split $arg] 3]
  9011. if {[regexp {^[&#]} $user] && [matchattr $hand nm|- $chan]} {
  9012. set chan "$user"
  9013. set user [lindex [split $arg] 3]
  9014. set option [lindex [split $arg] 4]
  9015. }
  9016. activ:process $nick $host $hand $chan $chan1 $user $option $type
  9017. }
  9018. }
  9019. leave {
  9020. if {[matchattr $hand nm|M $chan]} {
  9021. set type 1
  9022. set chan1 "$chan"
  9023. set who [lindex [split $arg] 2]
  9024. set leave [join [lrange [split $arg] 3 end]]
  9025. set number [lindex [split $arg] 3]
  9026. if {[regexp {^[&#]} $who] && [matchattr $hand nm|M $who]} {
  9027. set chan "$who"
  9028. set who [lindex [split $arg] 3]
  9029. set leave [join [lrange [split $arg] 4 end]]
  9030. set number [lindex [split $arg] 4]
  9031. }
  9032. leave:process $who $leave $number $type $nick $host $hand $chan $chan1
  9033. }
  9034. }
  9035. greet {
  9036. if {[matchattr $hand nm|M $chan]} {
  9037. set who [lindex [split $arg] 2]
  9038. set type 1
  9039. set chan1 "$chan"
  9040. set greet [join [lrange [split $arg] 3 end]]
  9041. set number [lindex [split $arg] 3]
  9042. if {[regexp {^[&#]} $who] && [matchattr $hand nm|M $who]} {
  9043. set chan "$who"
  9044. set who [lindex [split $arg] 3]
  9045. set greet [join [lrange [split $arg] 4 end]]
  9046. set number [lindex [split $arg] 4]
  9047. }
  9048. greet:process $who $greet $number $type $nick $host $hand $chan $chan1
  9049. }
  9050. }
  9051. chat {
  9052. if {[matchattr $hand nm|- $chan]} {
  9053. *ctcp:CHAT $nick $host $hand $botnick CHAT $arg
  9054. blacktools:tell $nick $host $hand $chan $chan1 chat.1 none
  9055. }
  9056. }
  9057. seen {
  9058. if {[matchattr $hand -|- $chan]} {
  9059. if {![channel get $chan seen]} {
  9060. return 0
  9061. }
  9062. set type 1
  9063. set wseen [lindex $arg 2]
  9064. set chan1 "$chan"
  9065. if {[regexp {^[&#]} $wseen] && [matchattr $hand nm|- $chan]} {
  9066. set chan1 "$chan"
  9067. set chan "$wseen"
  9068. set wseen [lindex $arg 3]
  9069. }
  9070. seen:process $nick $host $hand $chan $chan1 $wseen $type
  9071. }
  9072. }
  9073. topic {
  9074. if {[matchattr $hand nm|M $chan]} {
  9075. set nop [lindex [split $arg] 2]
  9076. set type 1
  9077. set chan1 "$chan"
  9078. set tp [join [lrange [split $arg] 3 end]]
  9079. set number [lindex [split $arg] 3]
  9080. if {[regexp {^[&#]} $nop] && [matchattr $hand nm|M $nop]} {
  9081. set chan "$nop"
  9082. set nop [lindex [split $arg] 3]
  9083. set tp [join [lrange [split $arg] 4 end]]
  9084. set number [lindex [split $arg] 4]
  9085. }
  9086. topic:process $nick $host $hand $chan $chan1 $nop $tp $number $type
  9087. }
  9088. }
  9089. limit {
  9090. if {[matchattr $hand nm|M $chan]} {
  9091. set why [lindex [split $arg] 2]
  9092. set lm [lindex [split $arg] 3]
  9093. set type 1
  9094. set chan1 "$chan"
  9095. if {[regexp {^[&#]} $why] && [matchattr $hand nm|- $chan]} {
  9096. set chan "$why"
  9097. set why [lindex [split $arg] 3]
  9098. set lm [lindex [split $arg] 4]
  9099. }
  9100. limit:process $nick $host $hand $chan $chan1 $why $lm $type
  9101. }
  9102. }
  9103. anunt {
  9104. if {[matchattr $hand nm|M $chan]} {
  9105. set type 1
  9106. set chan1 "$chan"
  9107. set who [lindex [split $arg] 2]
  9108. set message [join [lrange [split $arg] 3 end]]
  9109. set number [lindex [split $arg] 3]
  9110. if {[regexp {^[&#]} $who] && [matchattr $hand nm|M $who]} {
  9111. set chan "$who"
  9112. set who [lindex [split $arg] 3]
  9113. set message [join [lrange [split $arg] 4 end]]
  9114. set number [lindex [split $arg] 4]
  9115. }
  9116. anunt:process $nick $host $hand $chan $chan1 $who $message $number $type
  9117. }
  9118. }
  9119. bt {
  9120. if {[matchattr $hand nm|- $chan]} {
  9121. set who [lindex [split $arg] 2]
  9122. set chan1 "$chan"
  9123. set message [join [lrange [split $arg] 3 end]]
  9124. set number [lindex [split $arg] 3]
  9125. if {$who == ""} { blacktools:tell $nick $host $hand $chan $chan1 autobroadcast.2 none
  9126. return 0
  9127. }
  9128. broadcast:process $nick $host $hand $chan $chan1 $who $message $number
  9129. }
  9130. }
  9131. badchan {
  9132. if {[matchattr $hand nm|M $chan]} {
  9133. set why [lindex [split $arg] 2]
  9134. set type1 0
  9135. set chan1 "$chan"
  9136. set bdchan [join [lindex [split $arg] 3]]
  9137. set type [lindex [split $arg] 4]
  9138. set reason [join [lrange [split $arg] 4 end]]
  9139. if {[string equal -nocase $why "list"] || [string equal -nocase $why "status"]} {
  9140. set type [lindex [split $arg] 3]
  9141. }
  9142. if {[string equal -nocase $type "-global"]} {
  9143. set reason [join [lrange [split $arg] 5 end]]
  9144. }
  9145. if {[regexp {^[&#]} $why] && [matchattr $hand nm|M $why]} {
  9146. set chan "$why"
  9147. set why [lindex [split $arg] 3]
  9148. set bdchan [join [lindex [split $arg] 4]]
  9149. set type [lindex [split $arg] 5]
  9150. set reason [join [lrange [split $arg] 5 end]]
  9151. if {[string equal -nocase $why "list"] || [string equal -nocase $why "status"]} {
  9152. set type [lindex [split $arg] 4]
  9153. }
  9154. if {[string equal -nocase $type "-global"]} {
  9155. set reason [join [lrange [split $arg] 6 end]]
  9156. }
  9157. }
  9158. badchan:process $nick $host $hand $chan $chan1 $why $bdchan $type $type1 $reason
  9159. }
  9160. }
  9161. count {
  9162. if {[matchattr $hand nm|M $chan]} {
  9163. set why [lindex [split $arg] 2]
  9164. set type 1
  9165. set chan1 "$chan"
  9166. if {[regexp {^[&#]} $why] && [matchattr $hand nm|M $why]} {
  9167. set chan "$why"
  9168. set why [lindex [split $arg] 3]
  9169. }
  9170. count:process $nick $host $hand $chan $chan1 $why $type
  9171. }
  9172. }
  9173. whois {
  9174. if {[matchattr $hand nm|MAOS $chan]} {
  9175. set chan1 "$chan"
  9176. set who [lindex [split $arg] 2]
  9177. if {$who == ""} { blacktools:tell $nick $host $hand $chan $chan1 whois.2 none
  9178. return 0
  9179. }
  9180. whois:process $nick $host $hand $chan $chan1 $who
  9181. }
  9182. }
  9183. vers {
  9184. if {[matchattr $hand nm|MAOS $chan]} {
  9185. set chan1 "$chan"
  9186. set why [lindex [split $arg] 2]
  9187. if {$why == ""} { blacktools:tell $nick $host $hand $chan $chan1 vers.2 none
  9188. return 0
  9189. }
  9190. vers:process $nick $host $hand $chan $chan1 $why
  9191. }
  9192. }
  9193. time {
  9194. if {[matchattr $hand nm|MAOSV $chan]} {
  9195. set chan1 "$chan"
  9196. set time [ctime [unixtime]]
  9197. blacktools:tell $nick $host $hand $chan $chan1 time.1 $time
  9198. }
  9199. }
  9200. ping {
  9201. if {[matchattr $hand nm|MAOSV $chan]} {
  9202. putquick "PRIVMSG $nick :\001PING [expr {abs([clock clicks -milliseconds])}]\001"
  9203. return 0
  9204. }
  9205. }
  9206. us {
  9207. if {[matchattr $hand nm|MA $chan]} {
  9208. set type 1
  9209. set chan1 "$chan"
  9210. set users [lindex [split $arg] 2]
  9211. if {[regexp {^[&#]} $users] && [matchattr $hand nm|- $chan]} {
  9212. set chan "$users"
  9213. set users [lindex [split $arg] 3]
  9214. }
  9215. us:process $nick $host $hand $chan $chan1 $users $type
  9216. }
  9217. }
  9218. s {
  9219. if {[matchattr $hand nm|MA $chan]} {
  9220. set type 1
  9221. set chan1 "$chan"
  9222. set users [lindex [split $arg] 2]
  9223. if {[regexp {^[&#]} $users] && [matchattr $hand nm|- $chan]} {
  9224. set chan "$users"
  9225. set users [lindex [split $arg] 3]
  9226. }
  9227. s:process $nick $host $hand $chan $chan1 $users $type
  9228. }
  9229. }
  9230. info {
  9231. if {[matchattr $hand nm|MASOV $chan]} {
  9232. set user [lindex [split $arg] 2]
  9233. set type 1
  9234. set chan1 "$chan"
  9235. if {[regexp {^[&#]} $user] && [matchattr $hand nm|MASO $user] && ([lindex [split $arg] 3] == "")} {
  9236. set chan $user
  9237. stats:process $nick $host $hand $chan $chan1
  9238. return
  9239. }
  9240. if {[regexp {^[&#]} $user] && [matchattr $hand nm|- $chan]} {
  9241. set chan "$user"
  9242. set user [lindex [split $arg] 3]
  9243. }
  9244. info:process $nick $host $hand $chan $chan1 $user $type
  9245. }
  9246. }
  9247. channels {
  9248. if {[matchattr $hand nm|MASOV $chan]} {
  9249. set chan1 "$chan"
  9250. channels:process $nick $host $hand $chan $chan1
  9251. }
  9252. }
  9253. userlist {
  9254. if {[matchattr $hand nm|MASOV $chan]} {
  9255. set level [lindex [split $arg] 2]
  9256. set type 1
  9257. set chan1 "$chan"
  9258. if {[regexp {^[&#]} $level] && [matchattr $hand nm|- $chan]} {
  9259. set chan "$level"
  9260. set level [lindex [split $arg] 3]
  9261. }
  9262. userlist:execute $hand $host $level $chan $chan1 $nick $type
  9263. }
  9264. }
  9265. chuser {
  9266. if {[matchattr $hand nm|M $chan]} {
  9267. set user [lindex [split $arg] 2]
  9268. set type 1
  9269. set chan1 "$chan"
  9270. set chandle [lindex [split $arg] 3]
  9271. chuser:process $nick $host $hand $chan $chan1 $user $chandle $type
  9272. }
  9273. }
  9274. delhost {
  9275. if {[matchattr $hand nm|MA $chan]} {
  9276. set user [lindex [split $arg] 2]
  9277. set type 1
  9278. set chan1 "$chan"
  9279. set hosts [lrange [split $arg] 3 end]
  9280. delhost:process $nick $host $hand $chan $chan1 $user $hosts $type
  9281. }
  9282. }
  9283. botidle {
  9284. if {[matchattr $hand nm|M $chan]} {
  9285. set chan1 "$chan"
  9286. set what [lindex [split $arg] 2]
  9287. if {$what == ""} { blacktools:tell $nick $host $hand $chan $chan1 antibotidle.2 none
  9288. return 0
  9289. }
  9290. botidle:process $nick $host $hand $chan $chan1 $what
  9291. }
  9292. }
  9293. addhost {
  9294. if {[matchattr $hand nm|MA $chan]} {
  9295. set type 1
  9296. set chan1 "$chan"
  9297. set user [lindex [split $arg] 2]
  9298. set hosts [lrange [split $arg] 3 end]
  9299. addhost:process $nick $host $hand $chan $chan1 $user $hosts $type
  9300. }
  9301. }
  9302. del {
  9303. if {[matchattr $hand nm|M $chan]} {
  9304. set args [lrange [split $arg] 2 end]
  9305. set type 1
  9306. set chan1 "$chan"
  9307. del:process $nick $host $hand $chan $chan1 $args $type
  9308. }
  9309. }
  9310. delacc {
  9311. if {[matchattr $hand nm|MA $chan]} {
  9312. set args [lrange [split $arg] 2 end]
  9313. set type 1
  9314. set chan1 "$chan"
  9315. set c [lindex [split $arg] 2]
  9316. if {[string equal -nocase "owner" $c] && [matchattr $hand n|- $chan]} {
  9317. set args [lrange [split $arg] 3 end]
  9318. delacc:owner $nick $host $hand $chan $chan1 $args $type
  9319. return
  9320. }
  9321. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  9322. set chan "$c"
  9323. set args [lrange [split $arg] 3 end]
  9324. }
  9325. delacc:process $nick $host $hand $chan $chan1 $args $type
  9326. }
  9327. }
  9328. adduser {
  9329. if {[matchattr $hand nm|MA $chan]} {
  9330. set chan1 "$chan"
  9331. set level [lindex [split $arg] 2]
  9332. set args [lrange [split $arg] 3 end]
  9333. set c [lindex [split $arg] 3]
  9334. set type 1
  9335. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  9336. set chan "$c"
  9337. set args [lrange [split $arg] 4 end]
  9338. }
  9339. adduser:process $nick $host $hand $chan $chan1 $args $level $type
  9340. }
  9341. }
  9342. add {
  9343. if {[matchattr $hand nm|MA $chan]} {
  9344. set level [lindex [split $arg] 2]
  9345. set time [ctime [unixtime]]
  9346. set type 1
  9347. set chan1 "$chan"
  9348. set args [lrange [split $arg] 3 end]
  9349. set c [lindex [split $arg] 3]
  9350. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  9351. set chan "$c"
  9352. set args [lrange [split $arg] 4 end]
  9353. }
  9354. if {[matchattr $hand -|q $chan]} {
  9355. blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  9356. return 0
  9357. }
  9358. add:process $args $time $level $hand $host $chan $chan1 $nick $type
  9359. }
  9360. }
  9361. unsuspend {
  9362. if {[matchattr $hand nm|- $chan]} {
  9363. set chans [lindex [split $arg] 2]
  9364. set chan1 "$chan"
  9365. if {$chans == ""} {blacktools:tell $nick $host $hand $chan $chan1 unsuspend.5 none
  9366. return
  9367. }
  9368. if {![regexp {^[&#]} $chans]} {
  9369. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  9370. return
  9371. }
  9372. if {![validchan $chans]} { blacktools:tell $nick $host $hand $chan $chan1 unsuspend.2 $chans
  9373. return
  9374. }
  9375. if {![channel get $chans inactive]} {
  9376. blacktools:tell $nick $host $hand $chan $chan1 unsuspend.3 $chans
  9377. return
  9378. }
  9379. unsuspend:stats $chans $hand $host
  9380. channel set $chans -inactive
  9381. blacktools:tell $nick $host $hand $chan $chan1 unsuspend.4 $chans
  9382. }
  9383. }
  9384. suspend {
  9385. if {[matchattr $hand nm|- $chan]} {
  9386. set chans [lindex [split $arg] 2]
  9387. set reason [join [lrange [split $arg] 3 end]]
  9388. set chan1 "$chan"
  9389. if {$chans == ""} {blacktools:tell $nick $host $hand $chan $chan1 suspend.5 none
  9390. return
  9391. }
  9392. if {![regexp {^[&#]} $chans]} {
  9393. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  9394. return
  9395. }
  9396. if {![validchan $chans]} { blacktools:tell $nick $host $hand $chan $chan1 suspend.2 $chans
  9397. return
  9398. }
  9399. if { [channel get $chans inactive]} {
  9400. blacktools:tell $nick $host $hand $chan $chan1 suspend.3 $chans
  9401. return
  9402. }
  9403. if {$reason == ""} {
  9404. blacktools:tell $nick $host $hand $chan $chan1 suspend.1 $chans
  9405. return
  9406. }
  9407. suspend:stats $chans $hand $host $reason
  9408. channel set $chans +inactive
  9409. blacktools:tell $nick $host $hand $chan $chan1 suspend.4 $chans
  9410. }
  9411. }
  9412. delchan {
  9413. if {[matchattr $hand nm|- $chan]} {
  9414. set chans [encoding convertto "utf-8" [lindex [split $arg] 2]]
  9415. set chan1 "$chan"
  9416. set reason [join [lrange [split $arg] 3 end]]
  9417. if {$chans == ""} {blacktools:tell $nick $host $hand $chan $chan1 delchan.4 none
  9418. return
  9419. }
  9420. if {![regexp {^[&#]} $chans]} {
  9421. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  9422. return
  9423. }
  9424. if {![validchan $chans]} { blacktools:tell $nick $host $hand $chan $chan1 delchan.2 $chans
  9425. return
  9426. }
  9427. if {$reason == ""} {
  9428. blacktools:tell:prv $nick $host $hand delchan.4 none
  9429. return
  9430. }
  9431. if {!($black(homechan) == "") && ![string equal -nocase $black(homechan) "#no_home_chan"]} {
  9432. if {[string equal -nocase $chans $black(homechan)]} {
  9433. blacktools:tell:prv $nick $host $hand delchan.5 $chans
  9434. return
  9435. }
  9436. }
  9437. channel remove $chans
  9438. delchan:stats $chans $hand $host $reason
  9439. blacktools:tell $nick $host $hand $chan $chan1 delchan.3 $chans
  9440. }
  9441. }
  9442. addchan {
  9443. if {[matchattr $hand nm|- $chan]} {
  9444. set chans [encoding convertto "utf-8" [lindex [split $arg] 2]]
  9445. set key [lindex [split $arg] 3]
  9446. set chan1 "$chan"
  9447. if {$chans == ""} {blacktools:tell $nick $host $hand $chan $chan1 addchan.4 none
  9448. return
  9449. }
  9450. if {![regexp {^[&#]} $chans]} {
  9451. blacktools:tell $nick $host $hand $chan $chan1 gl.novalidchan none
  9452. return
  9453. }
  9454. if {[validchan $chans]} {
  9455. blacktools:tell $nick $host $hand $chan $chan1 addchan.2 $chans
  9456. return
  9457. } else {
  9458. channel add $chans
  9459. addchan:stats $chans $hand $host
  9460. blacktools:tell $nick $host $hand $chan $chan1 addchan.3 $chans
  9461. if {$key != ""} {
  9462. putquick "JOIN $chans :$key"
  9463. channel set $chans chanmode "+ntk $key"
  9464. }
  9465. }
  9466. }
  9467. }
  9468. die {
  9469. if {[matchattr $hand nm|- $chan]} {
  9470. set chan1 "$chan"
  9471. blacktools:tell $nick $host $hand $chan $chan1 die.1 none
  9472. utimer 3 [list die "byeeee"]
  9473. }
  9474. }
  9475. jump {
  9476. if {[matchattr $hand nm|- $chan]} {
  9477. set chan1 "$chan"
  9478. set serv [lindex [split $arg] 2]
  9479. blacktools:tell $nick $host $hand $chan $chan1 jump.1 none
  9480. utimer 3 [list jump $serv]
  9481. }
  9482. }
  9483. save {
  9484. if {[matchattr $hand nm|- $chan]} {
  9485. set chan1 "$chan"
  9486. blacktools:tell $nick $host $hand $chan $chan1 save.1 none
  9487. save
  9488. }
  9489. }
  9490. restart {
  9491. if {[matchattr $hand nm|- $chan]} {
  9492. set chan1 "$chan"
  9493. blacktools:tell $nick $host $hand $chan $chan1 restart.1 none
  9494. utimer 3 [list restart]
  9495. }
  9496. }
  9497. rehash {
  9498. if {[matchattr $hand nm|- $chan]} {
  9499. set chan1 "$chan"
  9500. blacktools:tell $nick $host $hand $chan $chan1 rehash.1 none
  9501. rehash
  9502. }
  9503. }
  9504. nick {
  9505. if {[matchattr $hand nm|- $chan]} {
  9506. set who "$nick"
  9507. set newnick [lindex [split $arg] 2]
  9508. nick:process $who $newnick $host $hand $chan
  9509. }
  9510. }
  9511. msg {
  9512. if {[matchattr $hand nm|- $chan]} {
  9513. set nicks [lindex [split $arg] 2]
  9514. set chan1 "$chan"
  9515. set msg [join [lrange [split $arg] 3 end]]
  9516. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  9517. return
  9518. }
  9519. if {$nicks == ""} {blacktools:tell $nick $host $hand $chan $chan1 msg.2 none
  9520. return
  9521. }
  9522. if {[isbotnick $nicks]} {
  9523. return 0
  9524. }
  9525. putquick "PRIVMSG $nicks :$msg"
  9526. }
  9527. }
  9528. silence {
  9529. if {[matchattr $hand nm|- $chan]} {
  9530. set value [lindex [split $arg] 2]
  9531. set chan1 "$chan"
  9532. if {$value == ""} { blacktools:tell $nick $host $hand $chan $chan1 silence.2 none
  9533. return
  9534. }
  9535. silence:process $nick $host $hand $chan $chan1 $value
  9536. }
  9537. }
  9538. set {
  9539. if {[matchattr $hand nm|M $chan]} {
  9540. set flags [lindex [split $arg] 2]
  9541. set type [join [lrange [split $arg] 3 end]]
  9542. set type1 1
  9543. set chan1 "$chan"
  9544. if {[regexp {^[&#]} $flags] && [matchattr $hand nm|M $flags]} {
  9545. set chan "$flags"
  9546. set flags [lindex [split $arg] 3]
  9547. set type [join [lrange [split $arg] 4 end]]
  9548. }
  9549. if {[matchattr $hand mn]} {
  9550. if {[string equal -nocase "global" $flags]} {
  9551. set chan "$flags"
  9552. set flags [lindex [split $arg] 3]
  9553. set type [join [lrange [split $arg] 4 end]]
  9554. foreach c [channels] {
  9555. set:process $nick $host $hand $c $chan1 $flags $type $type1
  9556. }
  9557. return
  9558. }
  9559. }
  9560. set:process $nick $host $hand $chan $chan1 $flags $type $type1
  9561. }
  9562. }
  9563. mode {
  9564. if {[matchattr $hand nm|OSMA $chan]} {
  9565. set modes [lindex [split $arg] 2]
  9566. set type 1
  9567. set chan1 "$chan"
  9568. foreach c [channels] {
  9569. set backchan [channel get $c backchan]
  9570. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  9571. set chan "$c"
  9572. }
  9573. }
  9574. if {[regexp {^[&#]} $modes] && [matchattr $hand nm|- $chan]} {
  9575. set chan "$modes"
  9576. set modes [lindex [split $arg] 3]
  9577. }
  9578. mode:process $nick $host $hand $chan $chan1 $modes $type
  9579. }
  9580. }
  9581. away {
  9582. if {[matchattr $hand nm|- $chan]} {
  9583. set chan1 "$chan"
  9584. set aw [join [lrange [split $arg] 2 end]]
  9585. if {$aw == "" } {blacktools:tell $nick $host $hand $chan $chan1 away.2 none
  9586. return
  9587. }
  9588. away:process $nick $host $hand $chan $chan1 $aw
  9589. }
  9590. }
  9591. cycle {
  9592. if {[matchattr $hand nm|OSMA $chan]} {
  9593. set reason [join [lrange [split $arg] 2 end]]
  9594. set c [lindex [split $arg] 2]
  9595. set chan1 "$chan"
  9596. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  9597. set chan "$c"
  9598. set reason [join [lrange [split $arg] 3 end]]
  9599. }
  9600. cycle:process $nick $host $hand $chan $chan1 $reason
  9601. }
  9602. }
  9603. purge {
  9604. if {[matchattr $hand nm|M $chan]} {
  9605. set c [lindex [split $arg] 2]
  9606. set reason [join [lrange [split $arg] 2 end]]
  9607. set chan1 "$chan"
  9608. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  9609. set chan "$c"
  9610. set reason [join [lrange [split $arg] 3 end]]
  9611. }
  9612. if {$reason == ""} {
  9613. blacktools:tell $nick $host $hand $chan $chan1 purge.1 none
  9614. return
  9615. }
  9616. purge:process $nick $host $hand $chan $chan1 $reason
  9617. }
  9618. }
  9619. check {
  9620. if {[matchattr $hand nm|OSMA $chan]} {
  9621. set checked [lindex [split $arg] 2]
  9622. if {[regexp {^[&#]} $checked] && [matchattr $hand nm|- $chan]} {
  9623. set chan "$checked"
  9624. set checked [lindex [split $arg] 3]
  9625. }
  9626. set chan1 "$chan"
  9627. if {$checked == ""} { blacktools:tell $nick $host $hand $chan $chan1 check.1 none
  9628. return
  9629. }
  9630. check:process $nick $host $hand $chan $chan1 $checked
  9631. }
  9632. }
  9633. broadcast {
  9634. if {[matchattr $hand nm|- $chan]} {
  9635. set chan1 "$chan"
  9636. set text [join [lrange [split $arg] 2 end]]
  9637. if {$text == ""} {
  9638. blacktools:tell $nick $host $hand $chan $chan1 broadcast.2 none
  9639. return 0
  9640. }
  9641. broadcast:cmd:process $nick $host $hand $chan $chan1 $text
  9642. }
  9643. }
  9644. act {
  9645. if {[matchattr $hand nm|SMA $chan]} {
  9646. set text [join [lrange [split $arg] 2 end]]
  9647. set c [lindex [split $arg] 2]
  9648. set type 1
  9649. set chan1 "$chan"
  9650. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  9651. set chan "$c"
  9652. set text [join [lrange [split $arg] 3 end]]
  9653. }
  9654. act:process $nick $host $hand $chan $chan1 $text $type
  9655. }
  9656. }
  9657. say {
  9658. if {[matchattr $hand nm|SMA $chan]} {
  9659. set text [join [lrange [split $arg] 2 end]]
  9660. set c [lindex [split $arg] 2]
  9661. set type 1
  9662. set chan1 "$chan"
  9663. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  9664. set chan "$c"
  9665. set text [join [lrange [split $arg] 3 end]]
  9666. }
  9667. say:process $nick $host $hand $chan $chan1 $text $type
  9668. }
  9669. }
  9670. v {
  9671. if {[matchattr $hand nm|VOSMA $chan]} {
  9672. set voicex [lrange $arg 2 end]
  9673. set c [lindex [split $arg] 2]
  9674. set nick [split $nick]
  9675. set chan1 "$chan"
  9676. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  9677. set chan "$c"
  9678. set voicex [lrange $arg 3 end]
  9679. }
  9680. v:process $nick $host $hand $chan $chan1 $voicex
  9681. }
  9682. }
  9683. o {
  9684. if {[matchattr $hand nm|OSMA $chan]} {
  9685. set opex [lrange $arg 2 end]
  9686. set c [lindex [split $arg] 2]
  9687. set nick [split $nick]
  9688. set chan1 "$chan"
  9689. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  9690. set chan "$c"
  9691. set opex [lrange $arg 3 end]
  9692. }
  9693. o:process $nick $host $hand $chan $chan1 $opex
  9694. }
  9695. }
  9696. uptime {
  9697. if {[matchattr $hand nm|- $chan]} {
  9698. set chan1 "$chan"
  9699. set up [duration [expr [unixtime] - $uptime]]
  9700. set on [duration [expr [unixtime] - ${server-online}]]
  9701. blacktools:tell $nick $host $hand $chan $chan1 status.1 $up
  9702. blacktools:tell $nick $host $hand $chan $chan1 status.2 $server
  9703. blacktools:tell $nick $host $hand $chan $chan1 status.3 $on
  9704. }
  9705. }
  9706. status {
  9707. if {[matchattr $hand nm|- $chan]} {
  9708. set chan1 "$chan"
  9709. catch {exec uptime} shelluptime
  9710. set up [duration [expr [unixtime] - $uptime]]
  9711. set on [duration [expr [unixtime] - ${server-online}]]
  9712. blacktools:tell $nick $host $hand $chan $chan1 status.1 $up
  9713. blacktools:tell $nick $host $hand $chan $chan1 status.2 $server
  9714. blacktools:tell $nick $host $hand $chan $chan1 status.3 $on
  9715. blacktools:tell $nick $host $hand $chan $chan1 status.4 [channels]
  9716. blacktools:tell $nick $host $hand $chan $chan1 status.5 $shelluptime
  9717. }
  9718. }
  9719. t {
  9720. if {[matchattr $hand nm|VOSMA $chan]} {
  9721. set topics [join [lrange [split $arg] 2 end]]
  9722. set type 1
  9723. set chan1 "$chan"
  9724. if {[regexp {^[&#]} $topics] && [matchattr $hand nm|- $chan]} {
  9725. set chan "$topics"
  9726. set topics [join [lrange [split $arg] 3 end]]
  9727. }
  9728. t:process $nick $host $hand $chan $chan1 $topics $type
  9729. }
  9730. }
  9731. d {
  9732. if {[matchattr $hand nm|SMA $chan]} {
  9733. set days [lindex [split $arg] 2]
  9734. set dnick [lindex [split $arg] 3]
  9735. set type 1
  9736. set mask [lindex [split $arg] 3]
  9737. set reason [join [lrange [split $arg] 4 end]]
  9738. set handle [nick2hand $dnick]
  9739. set chan1 "$chan"
  9740. foreach c [channels] {
  9741. set backchan [channel get $c backchan]
  9742. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  9743. set chan "$c"
  9744. }
  9745. }
  9746. if {[regexp {^[&#]} $days] && [matchattr $hand nm|- $chan]} {
  9747. set chan "$days"
  9748. set days [lindex [split $arg] 3]
  9749. set mask [lindex [split $arg] 4]
  9750. set dnick [lindex [split $arg] 4]
  9751. set reason [join [lrange [split $arg] 5 end]]
  9752. if {![regexp {^[0-9]} $days]} {
  9753. set mask [lindex [split $arg] 3]
  9754. set dnick [lindex [split $arg] 3]
  9755. set reason [join [lrange [split $arg] 4 end]]
  9756. }
  9757. }
  9758. if {![regexp {^[0-9]} $days]} {
  9759. set mask [lindex [split $arg] 2]
  9760. set dnick [lindex [split $arg] 2]
  9761. set reason [join [lrange [split $arg] 3 end]]
  9762. }
  9763. set split_text [split $dnick ","]
  9764. if {$split_text != ""} {
  9765. foreach txt $split_text {
  9766. d:process $txt $txt $days $reason $nick $hand $host $chan $chan1 $type
  9767. }
  9768. } else { d:process $dnick $mask $days $reason $nick $hand $host $chan $chan1 $type }
  9769. }
  9770. }
  9771. sb {
  9772. if {[matchattr $hand nm|VOSMA $chan]} {
  9773. set bhost [string tolower [lindex [split $arg] 2]]
  9774. set what [lindex [split $arg] 3]
  9775. set type 1
  9776. set chan1 "$chan"
  9777. foreach c [channels] {
  9778. set backchan [channel get $c backchan]
  9779. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  9780. set chan "$c"
  9781. }
  9782. }
  9783. if {[regexp {^[&#]} $bhost] && [matchattr $hand nm|- $chan]} {
  9784. set chan "$bhost"
  9785. set bhost [string tolower [lindex [split $arg] 3]]
  9786. set what [lindex [split $arg] 4]
  9787. }
  9788. if {$bhost != ""} {
  9789. if {(![regexp {\*} $bhost]) && ![onchan $bhost $chan]} {
  9790. if {[onchan $bhost $chan]} {
  9791. set bhost "$nick![getchanhost $bhost $chan]"
  9792. sb:process $bhost $what $nick $hand $host $chan $chan1 $type
  9793. return
  9794. }
  9795. putquick "WHOIS $bhost $bhost"
  9796. set ::bhost $bhost
  9797. set ::getnick $nick
  9798. set ::hand $hand
  9799. set ::host $host
  9800. set ::chan $chan
  9801. set ::chan1 $chan1
  9802. set ::type $type
  9803. set ::what $what
  9804. bind RAW - 311 sb:get:host
  9805. }
  9806. if {[regexp {\*} $bhost]} {
  9807. sb:process $bhost $what $nick $hand $host $chan $chan1 $type
  9808. }
  9809. } else { sb:process $bhost $what $nick $hand $host $chan $chan1 $type }
  9810. utimer 1 [list check:if:bind "sb:get:host" "311"]
  9811. }
  9812. }
  9813. ub {
  9814. if {[matchattr $hand nm|OSMA $chan]} {
  9815. set ban [lindex [split $arg] 2]
  9816. set why [lindex [split $arg] 3]
  9817. set type 1
  9818. set chan1 "$chan"
  9819. foreach c [channels] {
  9820. set backchan [channel get $c backchan]
  9821. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  9822. set chan "$c"
  9823. }
  9824. }
  9825. if {[regexp {^[&#]} $ban] && [matchattr $hand nm|- $chan]} {
  9826. set chan "$ban"
  9827. set ban [lindex [split $arg] 3]
  9828. }
  9829. if {$ban != ""} {
  9830. if {(![regexp {\*} $ban]) && ![onchan $ban $chan]} {
  9831. if {[onchan $ban $chan]} {
  9832. set ban "$nick![getchanhost $ban $chan]"
  9833. ub:process $ban $why $nick $hand $host $chan $chan1 $type
  9834. return
  9835. }
  9836. putquick "WHOIS $ban $ban"
  9837. set ::ban $ban
  9838. set ::getnick $nick
  9839. set ::hand $hand
  9840. set ::host $host
  9841. set ::chan $chan
  9842. set ::chan1 $chan1
  9843. set ::type $type
  9844. set ::why $why
  9845. bind RAW - 311 ub:get:host
  9846. }
  9847. if {[regexp {\*} $ban]} {
  9848. ub:process $ban $why $nick $hand $host $chan $chan1 $type
  9849. }
  9850. } else { ub:process $ban $why $nick $hand $host $chan $chan1 $type }
  9851. utimer 1 [list check:if:bind "ub:get:host" "311"]
  9852. }
  9853. }
  9854. bw {
  9855. if {[matchattr $hand nm|OSMA $chan]} {
  9856. set abuser [lindex [split $arg] 2]
  9857. set mask [lindex [split $arg] 2]
  9858. set type 1
  9859. set chan1 "$chan"
  9860. set handle [nick2hand $abuser]
  9861. foreach c [channels] {
  9862. set backchan [channel get $c backchan]
  9863. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  9864. set chan "$c"
  9865. }
  9866. }
  9867. if {[regexp {^[&#]} $abuser] && [matchattr $hand nm|- $chan]} {
  9868. set chan "$abuser"
  9869. set abuser [lindex [split $arg] 3]
  9870. set mask [lindex [split $arg] 3]
  9871. }
  9872. set split_text [split $abuser ","]
  9873. if {$split_text != ""} {
  9874. foreach txt $split_text {
  9875. bw:process $txt $txt $nick $hand $host $chan $chan1 $type
  9876. }
  9877. } else { bw:process $abuser $mask $nick $hand $host $chan $chan1 $type}
  9878. }
  9879. }
  9880. stick {
  9881. if {[matchattr $hand nm|SMA $chan]} {
  9882. set snick [lindex [split $arg] 2]
  9883. set mask [lindex [split $arg] 2]
  9884. set type 1
  9885. set time [lindex [split $arg] 3]
  9886. set reason [join [lrange [split $arg] 4 end]]
  9887. set handle [nick2hand $snick]
  9888. set list [userlist $black(exceptflags) $chan]
  9889. set chan1 "$chan"
  9890. foreach c [channels] {
  9891. set backchan [channel get $c backchan]
  9892. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  9893. set chan "$c"
  9894. }
  9895. }
  9896. if {[regexp {^[&#]} $snick] && [matchattr $hand nm|- $chan]} {
  9897. set chan "$snick"
  9898. set time [lindex [split $arg] 4]
  9899. set mask [lindex [split $arg] 3]
  9900. set snick [lindex [split $arg] 3]
  9901. set reason [join [lrange [split $arg] 5 end]]
  9902. if {![regexp {^[0-9]} $time]} {
  9903. set reason [join [lrange [split $arg] 4 end]]
  9904. }
  9905. }
  9906. if {![regexp {^[0-9]} $time]} {
  9907. set reason [join [lrange [split $arg] 3 end]]
  9908. }
  9909. set split_text [split $snick ","]
  9910. if {$split_text != ""} {
  9911. foreach txt $split_text {
  9912. stick:process $txt $txt $time $reason $nick $hand $host $chan $chan1 $type
  9913. }
  9914. } else { stick:process $snick $mask $time $reason $nick $hand $host $chan $chan1 $type }
  9915. }
  9916. }
  9917. k {
  9918. if {[matchattr $hand nm|VOSMA $chan]} {
  9919. set knick [lindex [split $arg] 2]
  9920. set type 1
  9921. set reason [join [lrange [split $arg] 3 end]]
  9922. set handle [nick2hand $knick]
  9923. set chan1 "$chan"
  9924. foreach c [channels] {
  9925. set backchan [channel get $c backchan]
  9926. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  9927. set chan "$c"
  9928. }
  9929. }
  9930. if {[regexp {^[&#]} $knick] && [matchattr $hand nm|- $chan]} {
  9931. set chan "$knick"
  9932. set knick [lindex [split $arg] 3]
  9933. set reason [join [lrange [split $arg] 4 end]]
  9934. }
  9935. set split_text [split $knick ","]
  9936. if {$split_text != ""} {
  9937. foreach txt $split_text {
  9938. k:process $txt $nick $hand $host $reason $chan $chan1 $type
  9939. }
  9940. } else {k:process $knick $nick $hand $host $reason $chan $chan1 $type}
  9941. }
  9942. }
  9943. spam {
  9944. if {[matchattr $hand nm|OSMA $chan]} {
  9945. set spammer [lindex [split $arg] 2]
  9946. set type 1
  9947. set mask [lindex [split $arg] 2]
  9948. set handle [nick2hand $spammer]
  9949. set chan1 "$chan"
  9950. foreach c [channels] {
  9951. set backchan [channel get $c backchan]
  9952. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  9953. set chan "$c"
  9954. }
  9955. }
  9956. if {[regexp {^[&#]} $spammer] && [matchattr $hand nm|- $chan]} {
  9957. set chan "$spammer"
  9958. set spammer [lindex [split $arg] 2]
  9959. set mask [lindex [split $arg] 2]
  9960. }
  9961. set split_text [split $spammer ","]
  9962. if {$split_text != ""} {
  9963. foreach txt $split_text {
  9964. spam:process $txt $txt $nick $hand $host $chan $chan1 $type
  9965. }
  9966. } else { spam:process $spammer $mask $nick $hand $host $chan $chan1 $type }
  9967. }
  9968. }
  9969. w {
  9970. if {[matchattr $hand nm|OVSMA $chan]} {
  9971. set wnick [lindex [split $arg] 2]
  9972. set type 1
  9973. set chan1 "$chan"
  9974. set handle [nick2hand $wnick]
  9975. foreach c [channels] {
  9976. set backchan [channel get $c backchan]
  9977. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  9978. set chan "$c"
  9979. }
  9980. }
  9981. if {[regexp {^[&#]} $wnick] && [matchattr $hand nm|- $chan]} {
  9982. set chan "$wnick"
  9983. set wnick [lindex [split $arg] 3]
  9984. }
  9985. set split_text [split $wnick ","]
  9986. if {$split_text != ""} {
  9987. foreach txt $split_text {
  9988. w:process $txt $nick $hand $host $chan $chan1 $type
  9989. }
  9990. } else { w:process $wnick $nick $hand $host $chan $chan1 $type }
  9991. }
  9992. }
  9993. black {
  9994. if {[matchattr $hand nm|SMA $chan]} {
  9995. set blnick [lindex [split $arg] 2]
  9996. set mask [lindex [split $arg] 2]
  9997. set type 1
  9998. set reason [join [lrange [split $arg] 3 end]]
  9999. set handle [nick2hand $blnick]
  10000. set chan1 "$chan"
  10001. foreach c [channels] {
  10002. set backchan [channel get $c backchan]
  10003. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  10004. set chan "$c"
  10005. }
  10006. }
  10007. if {[regexp {^[&#]} $blnick] && [matchattr $hand nm|- $chan]} {
  10008. set chan "$blnick"
  10009. set blnick [lindex [split $arg] 3]
  10010. set mask [lindex [split $arg] 3]
  10011. set reason [join [lrange [split $arg] 4 end]]
  10012. }
  10013. set split_text [split $blnick ","]
  10014. if {$split_text != ""} {
  10015. foreach txt $split_text {
  10016. black:process $txt $nick $txt $hand $host $chan $chan1 $reason $type
  10017. }
  10018. } else { black:process $blnick $nick $mask $hand $host $chan $chan1 $reason $type }
  10019. }
  10020. }
  10021. bl {
  10022. if {[matchattr $hand nm|SMA $chan]} {
  10023. set blnick [lindex [split $arg] 2]
  10024. set mask [lindex [split $arg] 2]
  10025. set type 1
  10026. set chan1 "$chan"
  10027. set reason [join [lrange [split $arg] 3 end]]
  10028. set handle [nick2hand $blnick]
  10029. foreach c [channels] {
  10030. set backchan [channel get $c backchan]
  10031. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  10032. set chan "$c"
  10033. }
  10034. }
  10035. if {[regexp {^[&#]} $blnick] && [matchattr $hand nm|- $chan]} {
  10036. set chan "$blnick"
  10037. set blnick [lindex [split $arg] 3]
  10038. set mask [lindex [split $arg] 3]
  10039. set reason [join [lrange [split $arg] 4 end]]
  10040. }
  10041. set split_text [split $blnick ","]
  10042. if {$split_text != ""} {
  10043. foreach txt $split_text {
  10044. black:process $txt $nick $txt $hand $host $chan $chan1 $reason $type
  10045. }
  10046. } else { black:process $blnick $nick $mask $hand $host $chan $chan1 $reason $type }
  10047. }
  10048. }
  10049. id {
  10050. if {[matchattr $hand nm|OSMA $chan]} {
  10051. set idnick [lindex [split $arg] 2]
  10052. set handle [nick2hand $idnick]
  10053. set type 1
  10054. set chan1 "$chan"
  10055. foreach c [channels] {
  10056. set backchan [channel get $c backchan]
  10057. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  10058. set chan "$c"
  10059. }
  10060. }
  10061. if {[regexp {^[&#]} $idnick] && [matchattr $hand nm|- $chan]} {
  10062. set chan "$idnick"
  10063. set idnick [lindex [split $arg] 3]
  10064. }
  10065. set split_text [split $idnick ","]
  10066. if {$split_text != ""} {
  10067. foreach txt $split_text {
  10068. id:process $txt $nick $hand $host $chan $chan1 $type
  10069. }
  10070. } else { id:process $idnick $nick $hand $host $chan $chan1 $type }
  10071. }
  10072. }
  10073. bot {
  10074. if {[matchattr $hand nm|OSMA $chan]} {
  10075. set bot [lindex [split $arg] 2]
  10076. set mask [lindex [split $arg] 2]
  10077. set type 1
  10078. set chan1 "$chan"
  10079. foreach c [channels] {
  10080. set backchan [channel get $c backchan]
  10081. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  10082. set chan "$c"
  10083. }
  10084. }
  10085. if {[regexp {^[&#]} $bot] && [matchattr $hand nm|- $chan]} {
  10086. set chan "$bot"
  10087. set bot [lindex [split $arg] 3]
  10088. set mask [lindex [split $arg] 3]
  10089. }
  10090. set split_text [split $bot ","]
  10091. foreach txt $split_text {
  10092. bot:process $txt $txt $nick $hand $host $chan $chan1 $type
  10093. }
  10094. if {$bot == ""} {
  10095. bot:process $bot $bot $nick $hand $host $chan $chan1 $type
  10096. }
  10097. }
  10098. }
  10099. dr {
  10100. if {[matchattr $hand nm|OSMA $chan]} {
  10101. set drone [lindex [split $arg] 2]
  10102. set mask [lindex [split $arg] 2]
  10103. set type "1"
  10104. set chan1 "$chan"
  10105. foreach c [channels] {
  10106. set backchan [channel get $c backchan]
  10107. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  10108. set chan "$c"
  10109. }
  10110. }
  10111. if {[regexp {^[&#]} $drone] && [matchattr $hand nm|- $chan]} {
  10112. set chan "$drone"
  10113. set drone [lindex [split $arg] 3]
  10114. set mask [lindex [split $arg] 3]
  10115. }
  10116. set split_text [split $drone ","]
  10117. foreach txt $split_text {
  10118. dr:process $txt $txt $nick $hand $host $chan $chan1 $type
  10119. }
  10120. if {$drone == ""} {
  10121. dr:process $drone $drone $nick $hand $host $chan $chan1 $type
  10122. }
  10123. }
  10124. }
  10125. b {
  10126. if {[matchattr $hand nm|OSMA $chan]} {
  10127. set bnick [lindex [split $arg] 2]
  10128. set mask [lindex [split $arg] 2]
  10129. set time [lindex [split $arg] 3]
  10130. set type 1
  10131. set chan1 "$chan"
  10132. set type1 [lindex [split $arg] 3]
  10133. set type2 [lindex [split $arg] 4]
  10134. set reason [join [lrange [split $arg] 4 end]]
  10135. set handle [nick2hand $bnick]
  10136. if {[string match -nocase "global" $type1] || [string match -nocase "global" $type2] && [matchattr $hand nm|- $chan]} {
  10137. if {[string match -nocase $type1 "global"]} {
  10138. set reason [join [lrange [split $arg] 4 end]]
  10139. }
  10140. if {[string match -nocase $type2 "global"]} {
  10141. set reason [join [lrange [split $arg] 5 end]]
  10142. }
  10143. if {![regexp {^[0-9]} $time]} {
  10144. set reason [join [lrange [split $arg] 4 end]]
  10145. }
  10146. set split_text [split $bnick ","]
  10147. foreach txt $split_text {
  10148. b:global $txt $txt $time $nick $reason $hand $host $chan $chan1 $type1 $type2
  10149. }
  10150. return
  10151. }
  10152. set chan1 "$chan"
  10153. foreach c [channels] {
  10154. set backchan [channel get $c backchan]
  10155. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  10156. set chan "$c"
  10157. }
  10158. }
  10159. if {[regexp {^[&#]} $bnick] && [matchattr $hand nm|- $chan]} {
  10160. set chan "$bnick"
  10161. set bnick [lindex [split $arg] 3]
  10162. set mask [lindex [split $arg] 3]
  10163. set time [lindex [split $arg] 4]
  10164. set reason [join [lrange [split $arg] 5 end]]
  10165. if {![regexp {^[0-9]} $time]} {
  10166. set reason [join [lrange [split $arg] 4 end]]
  10167. }
  10168. }
  10169. if {![regexp {^[0-9]} $time]} {
  10170. set reason [join [lrange [split $arg] 3 end]]
  10171. }
  10172. set split_text [split $bnick ","]
  10173. foreach txt $split_text {
  10174. b:local $txt $txt $time $nick $reason $hand $host $chan $chan1 $type
  10175. }
  10176. if {$bnick == ""} {
  10177. b:local $bnick $bnick $time $nick $reason $hand $host $chan $chan1 $type
  10178. }
  10179. }
  10180. }
  10181. n {
  10182. if {[matchattr $hand nm|OSMA $chan]} {
  10183. set bnick [lindex [split $arg] 2]
  10184. set type 1
  10185. set handle [nick2hand $bnick]
  10186. set chan1 "$chan"
  10187. foreach c [channels] {
  10188. set backchan [channel get $c backchan]
  10189. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  10190. set chan "$c"
  10191. }
  10192. }
  10193. if {[regexp {^[&#]} $bnick] && [matchattr $hand nm|- $chan]} {
  10194. set chan "$bnick"
  10195. set bnick [lindex [split $arg] 3]
  10196. }
  10197. set split_text [split $bnick ","]
  10198. if {$split_text != ""} {
  10199. foreach txt $split_text {
  10200. n:process $txt $nick $hand $host $chan $chan1 $type
  10201. }
  10202. } else { n:process $bnick $nick $hand $host $chan $chan1 $type }
  10203. }
  10204. }
  10205. ungag {
  10206. if {[matchattr $hand nm|OSMA $chan]} {
  10207. set gagger [lindex [split $arg] 2]
  10208. set type 1
  10209. set chan1 "$chan"
  10210. foreach c [channels] {
  10211. set backchan [channel get $c backchan]
  10212. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  10213. set chan "$c"
  10214. }
  10215. }
  10216. if {[regexp {^[&#]} $gagger] && [matchattr $hand nm|- $chan]} {
  10217. set chan "$gagger"
  10218. set gagger [lindex [split $arg] 3]
  10219. }
  10220. set split_text [split $gagger ","]
  10221. if {$split_text != ""} {
  10222. foreach txt $split_text {
  10223. ungag:process $txt $nick $hand $host $chan $chan1 $type
  10224. }
  10225. } else { ungag:process $gagger $nick $hand $host $chan $chan1 $type }
  10226. }
  10227. }
  10228. gag {
  10229. if {[matchattr $hand nm|OSMA $chan]} {
  10230. set gagger [lindex [split $arg] 2]
  10231. set time [lindex [split $arg] 3]
  10232. set reason [lrange [split $arg] 4 end]
  10233. set type 1
  10234. set handle [nick2hand $gagger]
  10235. set chan1 "$chan"
  10236. foreach c [channels] {
  10237. set backchan [channel get $c backchan]
  10238. if {[string match -nocase $chan $backchan] && [channel get $c chanreport]} {
  10239. set chan "$c"
  10240. }
  10241. }
  10242. if {[regexp {^[&#]} $gagger] && [matchattr $hand nm|- $chan]} {
  10243. set chan "$gagger"
  10244. set gagger [lindex [split $arg] 3]
  10245. set time [lindex [split $arg] 4]
  10246. set reason [lrange [split $arg] 5 end]
  10247. }
  10248. if {![regexp {^[0-9]} $time]} {
  10249. set reason [lrange [split $arg] 4 end]
  10250. set time [channel get $chan gag-time]
  10251. if {$time == "0"} {
  10252. set time $black(gag_time)
  10253. }
  10254. }
  10255. set split_text [split $gagger ","]
  10256. if {$split_text != ""} {
  10257. foreach txt $split_text {
  10258. gag:process $txt $time $reason $nick $hand $host $chan $chan1 $type
  10259. }
  10260. } else { gag:process $gagger $time $reason $nick $hand $host $chan $chan1 $type }
  10261. }
  10262. }
  10263. l {
  10264. if {[matchattr $hand nm|OSMA $chan]} {
  10265. set times [lindex [split $arg] 2]
  10266. set type 1
  10267. set chan1 "$chan"
  10268. if {[regexp {^[&#]} $times] && [matchattr $hand nm|- $chan]} {
  10269. set chan "$times"
  10270. set times [lindex [split $arg] 3]
  10271. }
  10272. l:process $nick $host $hand $chan $chan1 $times $type
  10273. }
  10274. }
  10275. ul {
  10276. if {[matchattr $hand nm|OSMA $chan]} {
  10277. set c [lindex [split $arg] 0]
  10278. set chan1 "$chan"
  10279. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  10280. set chan "$c"
  10281. }
  10282. ul:process $nick $host $hand $chan $chan1
  10283. }
  10284. }
  10285. show {
  10286. if {[matchattr $hand nm|OSMA $chan]} {
  10287. set wich [lindex [split $arg] 2]
  10288. set type 1
  10289. set chan1 "$chan"
  10290. if {[regexp {^[&#]} $wich] && [matchattr $hand nm|- $chan]} {
  10291. set chan "$wich"
  10292. set wich [lindex [split $arg] 3]
  10293. }
  10294. show:process $nick $host $hand $chan $chan1 $wich $type
  10295. }
  10296. }
  10297. reset {
  10298. if {[matchattr $hand nm|M $chan]} {
  10299. set dece [lindex [split $arg] 2]
  10300. set type 1
  10301. set chan1 "$chan"
  10302. if {[regexp {^[&#]} $dece] && [matchattr $hand nm|- $chan]} {
  10303. set chan "$dece"
  10304. set dece [lindex [split $arg] 3]
  10305. }
  10306. reset:process $nick $host $hand $chan $chan1 $dece $type
  10307. }
  10308. }
  10309. clonescan {
  10310. if {[matchattr $hand nm|M $chan]} {
  10311. set c [lindex [split $arg] 2]
  10312. set type 1
  10313. set chan1 "$chan"
  10314. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  10315. set chan "$c"
  10316. }
  10317. scanner:process $nick $host $hand $chan $chan1
  10318. }
  10319. }
  10320. top {
  10321. if {[matchattr $hand nm|AOSM $chan]} {
  10322. set cmd [lindex [split $arg] 2]
  10323. set del [lindex [split $arg] 3]
  10324. set type 1
  10325. set chan1 "$chan"
  10326. if {[regexp {^[&#]} $cmd] && [matchattr $hand nm|- $chan]} {
  10327. set chan "$cmd"
  10328. set cmd [lindex [split $arg] 3]
  10329. set del [lindex [split $arg] 4]
  10330. }
  10331. top:process $nick $host $hand $chan $chan1 $cmd $type $del
  10332. }
  10333. }
  10334. banlist {
  10335. if {[matchattr $hand nm|AOSM $chan]} {
  10336. set user [lindex [split $arg] 2]
  10337. set type 1
  10338. set chan1 "$chan"
  10339. if {[regexp {^[&#]} $user] && [matchattr $hand nm|- $chan]} {
  10340. set chan "$user"
  10341. set user [lindex [split $arg] 3]
  10342. }
  10343. banlist:process $nick $host $hand $chan $chan1 $user $type
  10344. }
  10345. }
  10346. myset {
  10347. if {[matchattr $hand nm|VAOSM $chan]} {
  10348. set chan1 "$chan"
  10349. set flags [lindex [split $arg] 2]
  10350. set type [lindex [split $arg] 3]
  10351. if {$type == ""} {
  10352. blacktools:tell $nick $host $hand $chan $chan1 myset.4 none
  10353. return 0
  10354. }
  10355. myset:process $nick $host $hand $chan $chan1 $flags $type
  10356. }
  10357. }
  10358. i {
  10359. if {[matchattr $hand nm|VAOSM $chan]} {
  10360. set type 1
  10361. set chan1 "$chan"
  10362. set inick [lrange [split $arg] 2 end]
  10363. set c [lindex [split $arg] 2]
  10364. if {[regexp {^[&#]} $c] && [matchattr $hand nm|- $chan]} {
  10365. set chan "$c"
  10366. set inick [join [lrange [split $arg] 3 end]]
  10367. }
  10368. i:process $nick $host $hand $chan $chan1 $inick $type
  10369. }
  10370. }
  10371. addinfo {
  10372. if {[matchattr $hand nm|VAOSM $chan]} {
  10373. set info [join [lrange [split $arg] 2 end]]
  10374. set chan1 "$chan"
  10375. if {[matchattr $hand -|q $chan]} { blacktools:tell $nick $host $hand $chan $chan1 gl.suspend none
  10376. return 0
  10377. }
  10378. if {$info == ""} {
  10379. blacktools:tell $nick $host $hand $chan $chan1 addinfo.2 none
  10380. return 0
  10381. }
  10382. addinfo:process $nick $host $hand $chan $chan1 $info
  10383. }
  10384. }
  10385. badword {
  10386. if {[matchattr $hand nm|M $chan]} {
  10387. set why [lindex [split $arg] 2]
  10388. set type 1
  10389. set chan1 "$chan"
  10390. set bdword [lrange [split $arg] 3 end]
  10391. set bdnumber [lindex [split $arg] 3]
  10392. if {[regexp {^[&#]} $why] && [matchattr $hand nm|- $chan]} {
  10393. set chan "$why"
  10394. set why [lindex [split $arg] 3]
  10395. set bdnumber [lindex [split $arg] 4]
  10396. set bdword [lrange [split $arg] 4 end]
  10397. }
  10398. antibadword:command:process $nick $host $hand $chan $chan1 $why $bdword $bdnumber $type
  10399. }
  10400. }
  10401. next {
  10402. if {[matchattr $hand nm|MSAO $chan]} {
  10403. set option [lindex [split $arg] 2]
  10404. set chan1 $chan
  10405. foreach c [channels] {
  10406. set backchan [channel get $c next-backchan]
  10407. if {[string match -nocase $chan $backchan] && [channel get $c next]} {
  10408. set chan "$c"
  10409. }
  10410. }
  10411. nextpublic:process $nick $host $hand $chan $chan1 $option
  10412. }
  10413. }
  10414. helped {
  10415. if {[matchattr $hand nm|MSAO $chan]} {
  10416. set user [lindex [split $arg] 2]
  10417. set chan1 $chan
  10418. foreach c [channels] {
  10419. set backchan [channel get $c next-backchan]
  10420. if {[string match -nocase $chan $backchan] && [channel get $c next]} {
  10421. set chan "$c"
  10422. }
  10423. }
  10424. helpedpublic:process $nick $host $hand $chan $chan1 $user
  10425. }
  10426. }
  10427. noidle {
  10428. if {[matchattr $hand nm|MSAO $chan]} {
  10429. set user [lindex [split $arg] 2]
  10430. set chan1 $chan
  10431. foreach c [channels] {
  10432. set backchan [channel get $c next-backchan]
  10433. if {[string match -nocase $chan $backchan] && [channel get $c next]} {
  10434. set chan "$c"
  10435. }
  10436. }
  10437. noidlepublic:process $nick $host $hand $chan $chan1 $user
  10438. }
  10439. }
  10440. skip {
  10441. if {[matchattr $hand nm|MSAO $chan]} {
  10442. set user [lindex [split $arg] 2]
  10443. set chan1 $chan
  10444. foreach c [channels] {
  10445. set backchan [channel get $c next-backchan]
  10446. if {[string match -nocase $chan $backchan] && [channel get $c next]} {
  10447. set chan "$c"
  10448. }
  10449. }
  10450. skippublic:process $nick $host $hand $chan $chan1 $user
  10451. }
  10452. }
  10453. }
  10454. }
  10455. }
  10456. proc check:if:bind {bind type} {
  10457. set found_it 0
  10458. set binds [binds raw]
  10459. foreach b $binds {
  10460. if {$bind == [lindex $b 4]} {
  10461. unbind RAW - $type $bind
  10462. }
  10463. }
  10464. }