;ò = ÄDc@sõdkZdkZdkZdkZdkZdkiZdkiZdk Tdk i Z dk i Z dkiZdkiZdkiZdefd„ƒYZe idhde<ƒZdeifd„ƒYZdeifd„ƒYZeZdS( N(s*s DbmMarkovDBcBsztZd„Zd„Zd„Zd„Zeed„Zd„Zd„Z d„Z d „Z d „Z d „Z d „ZRS( NcCstiƒ|_||_dS(N(sircutilssIrcDictsselfsdbssfilename(sselfsfilename((s./Markov/plugin.pys__init__/scCs(x!|iiƒD]}|iƒqWdS(N(sselfsdbssvaluessdbsclose(sselfsdb((s./Markov/plugin.pysclose3scCsQ||ijo2ti|i|ƒ}ti|dƒ|i|cCsk|i|ƒ}gi}|iƒD]1}d|jo|t||i ƒƒƒq#q#~}t |ƒSdS(Ns ( sselfs_getDbschannelsdbsappends_[1]skeysskslenssplitsfollowsssum(sselfschannelsfollowssdbs_[1]sk((s./Markov/plugin.pysfollows}sN(s__name__s __module__s__init__scloses_getDbs_flushsFalsesaddPairs getFirstPairs_combines getFollowersfirstsslastsspairssfollows(((s./Markov/plugin.pys DbmMarkovDB.s         sMarkovsanydbmsMarkovWorkQueuecBs,tZd„Zd„Zd„Zd„ZRS(NcOswdti}tid7_tii|d|ƒt||Ž|_ t i ƒ|_ t |_|itƒ|iƒdS(NsThread #%s (MarkovWorkQueue)isname(sworldsthreadsSpawnedsnames threadingsThreads__init__sselfsMarkovDBsargsskwargssdbsQueuesqsFalseskilleds setDaemonsTruesstart(sselfsargsskwargssname((s./Markov/plugin.pys__init__‡s   cCst|_|iitƒdS(N(sTruesselfskilledsqsputsNone(sself((s./Markov/plugin.pysdie‘s cCs|ii|ƒdS(N(sselfsqsputsf(sselfsf((s./Markov/plugin.pysenqueue•scCsQx=|i o1|iiƒ}|tj o||iƒqqW|iiƒdS(N(sselfskilledsqsgetsfsNonesdbsclose(sselfsf((s./Markov/plugin.pysrun˜s   (s__name__s __module__s__init__sdiesenqueuesrun(((s./Markov/plugin.pysMarkovWorkQueue†s  cBsïtZd„Zd„Zd„Zd„Zeed„Zd„Ze ede dƒe dƒgƒZd „Z e e dgƒZ d „Z e e dgƒZ d „Ze edgƒZd „Ze edgƒZd „Ze edgƒZRS(NcCsAtƒ|_tt|ƒ|_|ii|ƒtiƒ|_ dS(N( sMarkovWorkQueuesselfsqssupersMarkovs_Markov__parents__init__sircstimes lastSpoke(sselfsirc((s./Markov/plugin.pys__init__ s cCs|iiƒ|iiƒdS(N(sselfsqsdies_Markov__parent(sself((s./Markov/plugin.pysdie¦s cCsTti|ƒoti|ƒiƒSn*ti|ƒogSn|idiƒSdS(Ni(sircmsgssisActionsmsunActionssplitsisCtcpsargs(sselfsm((s./Markov/plugin.pystokenizeªs c sÈ|i|idƒo­ti|idƒ‰t}t i ƒ}ˆi dˆƒ} ˆi dˆƒ} ˆi dˆƒ}ti||ƒ}|ˆi| jo t}n|otiƒ| joRˆiˆ|dtdˆdtƒ‰ti‡‡d†||ƒ||ˆ_nˆi|ƒ‰ˆidd ƒˆidd ƒˆid ƒˆ ptˆƒd jodSnˆi d ˆƒoti|i|ƒodSn‡‡d †}ˆi!i"|ƒndS( NisrandomSpeaking.throttleTimesrandomSpeaking.probabilitysrandomSpeaking.maxDelays prefixNickstosRandomcsˆiiˆƒS(N(sselfsqsenqueuesf((sselfsf(s./Markov/plugin.pysÁss isignoreBotCommandscsCx<tiiˆdƒD]%\}}}|iˆ|||ƒqWdS(Ni( sutilssseqswindowswordssfirstssecondsfollowersdbsaddPairschannel(sdbsfollowerssecondsfirst(swordsschannel(s./Markov/plugin.pys doPrivmsgÍs(#sircs isChannelsmsgsargsspluginss getChannelschannelsFalsescanSpeakstimesnowsselfs registryValuesthrottlesprobsdelays callbackss SimpleProxys lastSpokesTruesrandoms_markovsfsschedulesaddEventstokenizeswordssinsertsappendslens addressedsnicks doPrivmsgsqsenqueue( sselfsircsmsgs doPrivmsgsnowsfscanSpeaksdelayswordssthrottlesprobschannel((sselfschannelswordssfs./Markov/plugin.pys doPrivmsg²s4      )c s#‡‡‡‡‡‡d†}|SdS(Nc sGˆidˆƒ}ˆidˆƒ}ˆidtƒ}xÉ|djo»|d8}ˆoˆot }ˆˆg}n{ˆpˆot}dˆpˆg}nPt}yt|iˆƒƒ}Wn-tj o!ˆitdˆƒƒdSnX|d}t}g}xu| ol|i|ƒy'|iˆ|d |dƒ\}}Wn$tj oˆid ƒdSnX|i|ƒqW|oCt|d ƒ|jo%ˆid i|d ƒˆdSqýq9q9t|ƒ|jo!ˆid i|ƒˆdSq9q9q9W| o ˆitd |d fƒƒnˆiid|d fƒdS(NsminChainLengths maxAttemptssRandomiis s$I don't have any first pairs for %s.iÿÿÿÿiþÿÿÿs^I found a broken link in the Markov chain. Maybe I received two bad links to start the chain.s s9I was unable to generate a Markov chain at least %n long.swordsHNot randomSpeaking. Unable to generate a Markov chain at least %n long.( sselfs registryValueschannels minLengthsmaxTriesskwargsspopsNonesRandomsword1sword2sTrues givenPairswordssFalseslistsdbs getFirstPairsKeyErrorsircserrorsformatsfollowerslastsrespsappends getFollowerslensreplysjoinslogsdebug( sdbsrespsfollowersmaxTriess minLengthswordsslastsRandoms givenPair(sword1sword2sselfskwargssircschannel(s./Markov/plugin.pysfÓs\           (sf(sselfschannelsircsword1sword2skwargssf((sselfschannelsircsword1sword2skwargss./Markov/plugin.pys_markovÒs:c Cs8|i||||dtdtƒ}|ii |ƒdS(s/[] [word1 [word2]] Returns a randomly-generated Markov Chain generated sentence from the data kept on (which is only necessary if not sent in the channel itself). If word1 and word2 are specified, they will be used to start the Markov chain. s prefixNicksRandomN( sselfs_markovschannelsircsword1sword2sFalsesfsqsenqueue(sselfsircsmsgsargsschannelsword1sword2sf((s./Markov/plugin.pysmarkovss channeldbs somethingcs#‡‡d†}|ii|ƒdS(so[] Returns the number of Markov's first links in the database for . cs*d}ˆi||iˆƒˆfƒdS(Ns1There are %s firsts in my Markov database for %s.(sssircsreplysdbsfirstsschannel(sdbss(sircschannel(s./Markov/plugin.pysfirsts#sN(sfirstssselfsqsenqueue(sselfsircsmsgsargsschannelsfirsts((sircschannels./Markov/plugin.pysfirstsscs#‡‡d†}|ii|ƒdS(sn[] Returns the number of Markov's last links in the database for . cs&ˆitd|iˆƒˆƒƒdS(Ns0There are %i lasts in my Markov database for %s.(sircsreplysformatsdbslastsschannel(sdb(sircschannel(s./Markov/plugin.pyslasts/s N(slastssselfsqsenqueue(sselfsircsmsgsargsschannelslasts((sircschannels./Markov/plugin.pyslasts)scs#‡‡d†}|ii|ƒdS(so[] Returns the number of Markov's chain links in the database for . cs&ˆitd|iˆƒˆƒƒdS(Ns0There are %i pairs in my Markov database for %s.(sircsreplysformatsdbspairsschannel(sdb(sircschannel(s./Markov/plugin.pyspairs<s N(spairssselfsqsenqueue(sselfsircsmsgsargsschannelspairs((sircschannels./Markov/plugin.pyspairs6scs#‡‡d†}|ii|ƒdS(so[] Returns the number of Markov's third links in the database for . cs&ˆitd|iˆƒˆƒƒdS(Ns2There are %i follows in my Markov database for %s.(sircsreplysformatsdbsfollowsschannel(sdb(sircschannel(s./Markov/plugin.pysfollowsIs N(sfollowssselfsqsenqueue(sselfsircsmsgsargsschannelsfollows((sircschannels./Markov/plugin.pysfollowsCscs#‡‡d†}|ii|ƒdS(sx[] Returns all stats (firsts, lasts, pairs, follows) for 's Markov database. csGˆitd|iˆƒ|iˆƒ|iˆƒ|iˆƒƒƒdS(Ns-Firsts: %i; Lasts: %i; Pairs: %i; Follows: %i( sircsreplysformatsdbsfirstsschannelslastsspairssfollows(sdb(sircschannel(s./Markov/plugin.pysstatsVs N(sstatssselfsqsenqueue(sselfsircsmsgsargsschannelsstats((sircschannels./Markov/plugin.pysstatsPs(s__name__s __module__s__init__sdiestokenizes doPrivmsgsNones_markovsmarkovswrapsoptionals additionalsfirstsslastsspairssfollowssstats(((s./Markov/plugin.pysMarkovŸs"    = $     (stimesQueuesanydbmsrandoms threadings supybot.utilssutilss supybot.worldsworldssupybot.commandsssupybot.ircmsgssircmsgsssupybot.pluginsspluginsssupybot.ircutilssircutilsssupybot.schedulesschedulessupybot.callbackss callbackssobjects DbmMarkovDBsDBsMarkovDBsThreadsMarkovWorkQueuesPluginsMarkovsClass(sMarkovWorkQueuesanydbms DbmMarkovDBsschedulesutilssrandomsircmsgssClasssQueues threadings callbacksstimesworldsMarkovDBspluginssMarkovsircutils((s./Markov/plugin.pys?s"            VÀ