;ò > ÄDc@sZdkiZdkTdkiZdkiZdkiZdei fd„ƒYZ e Z dS(N(s*sTailcBs¹tZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z e e d gƒZ d „Z e e d gƒZ d „Z e e ehd d<ƒedƒgƒZ RS(NcCs„tt|ƒ|_|ii|ƒh|_|idƒ}t i |i |d|i ƒƒx$|idƒD]}|i|ƒqiWdS(Nsperiodsnamesfiles(ssupersTailsselfs _Tail__parents__init__sircsfiless registryValuesperiodsschedulesaddPeriodicEvents _checkFilessnamesfilenames_add(sselfsircsperiodsfilename((s./Tail/plugin.pys__init__&s cCsH|iiƒti|iƒƒx!|iiƒD]}|i ƒq0WdS(N( sselfs _Tail__parentsdiesschedules removeEventsnamesfilessvaluessfdsclose(sselfsfd((s./Tail/plugin.pysdie/s  cCs(ti||ƒ}||_||_dS(N(s callbackss SimpleProxysircsmsgsselfslastIrcslastMsg(sselfsircsmsg((s./Tail/plugin.pys__call__5s cCs;|iidƒx$|idƒD]}|i|ƒq WdS(NsChecking files.sfiles(sselfslogsdebugs registryValuesfilenames _checkFile(sselfsfilename((s./Tail/plugin.pys _checkFiles:scCsŠ|i|}|iƒ}|iƒ}xQ|oI|iƒ}|o|i |i ||ƒn|iƒ}|iƒ}q(W|i |ƒdS(N( sselfsfilessfilenamesfdstellspossreadlineslinesstrips_sendslastIrcsseek(sselfsfilenameslinesfdspos((s./Tail/plugin.pys _checkFile?s     cCsxyt|ƒ}Wn.tj o"}|iid||ƒ‚nX|iddƒ||i |<|i dƒi |ƒdS(NsCouldn't open %s: %siisfiles( sfilesfilenamesfdsEnvironmentErrorsesselfslogswarningsseeksfiless registryValuesadd(sselfsfilenamesesfd((s./Tail/plugin.pys_addKs cCs6|ii|ƒ}|iƒ|idƒi|ƒdS(Nsfiles(sselfsfilesspopsfilenamesfdscloses registryValuesremove(sselfsfilenamesfd((s./Tail/plugin.pys_removeUs c Cs|idƒoti|ƒ}n|idƒ}d||f}x6|idƒD]%}|i |d|d|dt ƒqRWdS(Nsboldsnotices%s: %sstargetsstosprivate( sselfs registryValuesircutilssboldsfilenamesnoticestextspayloadstargetsircsreplysTrue(sselfsircsfilenamestextsnoticestargetspayload((s./Tail/plugin.pys_sendZscCsQy|i|ƒWn/tj o#}|iti|ƒƒdSnX|i ƒdS(sU Basically does the equivalent of tail -f to the targets. N( sselfs_addsfilenamesEnvironmentErrorsesircserrorsutilss exnToStrings replySuccess(sselfsircsmsgsargssfilenamese((s./Tail/plugin.pysaddbs sfilenamecCsKy|i|ƒ|iƒWn)tj o|itd|ƒƒnXdS(sO Stops announcing the lines appended to . s I'm not currently announcing %s.N(sselfs_removesfilenamesircs replySuccesssKeyErrorserrorsformat(sselfsircsmsgsargssfilename((s./Tail/plugin.pysremoveos  c CsŸt}x+|D]#\}} |djo t}q q W| oT|idƒ}|o-t i t i |ƒ|itd|ƒƒq›|idƒn |ondS(sQ[--remove] [ ...] If given no arguments, returns the current list of targets for this plugin. If given any number of targets, will add these targets to the current list of targets. If given --remove and any number of targets, will remove those targets from the current list of targets. sremovestargetss%Ls%I'm not currently targeting anywhere.N(sFalsesremovesoptlistsoptionsargsTruestargetssselfs registryValuesLsutilsssortBysircutilsstoLowersircsreplysformat( sselfsircsmsgsargssoptliststargetssoptionsLsremovesarg((s./Tail/plugin.pystarget{s  sremovess something(s__name__s __module__s__init__sdies__call__s _checkFiless _checkFiles_adds_removes_sendsaddswrapsremovestargetsgetoptssany(((s./Tail/plugin.pysTail%s        ( s supybot.utilssutilsssupybot.commandsssupybot.ircutilssircutilsssupybot.schedulesschedulessupybot.callbackss callbackssPluginsTailsClass(sschedulesutilss callbackssTailsClasssircutils((s./Tail/plugin.pys?s    n