;๒ = ฤDc@sfdkiZdkTdkiZdkiZdkiZdk i Z dei fd„ƒYZ e Z dS(N(s*sBnccBs(tZeZd„Zd„ZeedgƒZd„ZeedgƒZd„ZeedddgƒZd„Z ee dd dgƒZ d „Z ee dgƒZ d „Z d „Z d „Z d„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(NcCs/tt|ƒ|_|ii|ƒg|_dS(N(ssupersBncsselfs _Bnc__parents__init__sircstargets(sselfsirc((s./Bnc/plugin.pys__init__*scCsฎ||ijo|ii|ƒ|iƒx}|iiiƒD]X\}}|i |||ddddd|i d|i d|id|id |iƒq=Wn|id ƒdS( NscommandsbouncesextrasbouncingsnickstopicsuserssmodessopssAlready bouncing you.(sconsselfstargetssappendsircs replySuccesssstateschannelss iteritemsschannelscsdoBouncesnickstopicsuserssmodessopssreply(sselfsircsmsgsargssconscschannel((s./Bnc/plugin.pysbounce/s   $s sshdSourcecCs?||ijo|ii|ƒ|iƒn|idƒdS(NsYou are not being bounced(sconsselfstargetssremovesircs replySuccesssreply(sselfsircsmsgsargsscon((s./Bnc/plugin.pysunbounce<scCs#ti||ƒ}|i|ƒdS(N(sircmsgssprivmsgschannelstextsmsircssendMsg(sselfsircsmsgsargssconschannelstextsm((s./Bnc/plugin.pysmsgDsschannelstextcCs#ti||ƒ}|i|ƒdS(N(sircmsgssprivmsgsnickstextsmsircssendMsg(sselfsircsmsgsargssconsnickstextsm((s./Bnc/plugin.pyspmsgIssnickcCs]||iijo9|ii|}x3|iD]}|id|ƒq-Wn|idƒdS(Ns%ssI am not on that channel(schannelsircsstateschannelsscsuserssusreply(sselfsircsmsgsargsschannelscsu((s./Bnc/plugin.pysnamesNs  cCs|iid|iƒdS(NsNick not found %s(sselfslogswarningsmsgscommand(sselfsircsmsg((s./Bnc/plugin.pysdo401WscCsti|ƒSdS(N(sircutilsstoLowerschannel(sselfsircschannel((s./Bnc/plugin.pysnormalizeChannelZscOs[|i||ƒ}t||Œ}x3|iD](}|i |i ƒddd||q+WdS(Nssourcesbncsinreply( sselfsnormalizeChannelsircschannelsformatsssargsstargetssts sendReplysstripskw(sselfsircschannelsssargsskwst((s./Bnc/plugin.pysdoLog]s  c Csร|i oด|i\}}xข|idƒD]}|ip|i}d}d}t i |ƒo d}nt i|ƒod}t i|ƒ}n|i|||d|d|d|ƒq*WndS( Ns,sprivmsgiisactionscommandsnicks importance(smsgsfromSshdsargss recipientsstextssplitschannelsnicksircscommands importancesircutilss isChannelsircmsgssisActionsunActionsselfsdoBounce( sselfsircsmsgs recipientss importancestextsnickscommandschannel((s./Bnc/plugin.pys doPrivmsgcs  cKs|i||ƒ}ti|ƒ}xW|iD]L}ti |ƒo |}n |d}|i |i ƒddd||q+WdS(Nsnickssourcesbncsinreply(sselfsnormalizeChannelsircschannelsircutilssstripFormattingssstargetssts isChannelsinreplyskws sendReplysstrip(sselfsircssschannelskwstsinreply((s./Bnc/plugin.pysdoBouncers   c CsO|i\}}x9|idƒD](}|i|||ddd|i ƒqWdS(Ns,scommandsNOTICEsnick( smsgsargss recipientsstextssplitschannelsselfsdoBouncesircsnick(sselfsircsmsgs recipientsstextschannel((s./Bnc/plugin.pysdoNotice|scCs…|i}|id}xh|iiiƒD]T\}}||i jo8|i |||ddd|id|d|ddƒq)q)WdS(Niscommandsnickshmsevalues importancei(smsgsnicksoldNicksargssnewNicksircsstateschannelss iteritemsschannelscsuserssselfsdoBouncesprefix(sselfsircsmsgscsnewNicksoldNickschannel((s./Bnc/plugin.pysdoNicks   c CsVxO|ididƒD]7}|i||i|d|iddd|ddƒqWdS( Nis,shmscommandsjoinsevalues importancei( smsgsargsssplitschannelsselfsdoBouncesircsnicksprefix(sselfsircsmsgschannel((s./Bnc/plugin.pysdoJoin‰scCs|t|iƒdjo|i\}}}n|i\}}d}|i|||d|i d|i d|dddd ƒdS( Nissnicksevaluesextrascommandskicks importancei( slensmsgsargsschannelstargetskickmsgsselfsdoBouncesircsnick(sselfsircsmsgstargetskickmsgschannel((s./Bnc/plugin.pysdoKickŽs !c CsYxR|ididƒD]:}|i||i|ddd|id|iddƒqWdS( Nis,scommandspartshmsnicks importancei( smsgsargsssplitschannelsselfsdoBouncesircsnicksprefix(sselfsircsmsgschannel((s./Bnc/plugin.pysdoPart—sc Cs|id}|i|ƒo |idoadi|iddi|idƒgƒ}|i|||ddd|i d|i d dƒndS( Niis iscommandsmodesnicksextras importance( smsgsargsschannelsircs isChannelsjoinsssselfsdoBouncesnick(sselfsircsmsgssschannel((s./Bnc/plugin.pysdoModeœs  ,c Cskt|iƒdjodSn|id}|i||id|ddd|iddd|idƒdS(Niiscommandstopicsnicks importance(slensmsgsargsschannelsselfsdoBouncesircsnick(sselfsircsmsgschannel((s./Bnc/plugin.pysdoTopicฃs  c Cssxl|i|iiƒD]T\}}|i|i jo5|i ||iddd|i d|iddƒqqWdS(Nscommandsquitshmsnicks importancei( sselfs lastStatessircschannelss iteritemsschannelschansmsgsnicksuserssdoBouncesprefix(sselfsircsmsgschanschannel((s./Bnc/plugin.pysdoQuitชs  cCsJ|iddfjo,tid|d|iƒ}|||ƒn|SdS(NsPRIVMSGsNOTICEsmsgsprefix(smsgscommandsircmsgssIrcMsgsircsprefixsmsself(sselfsircsmsgsm((s./Bnc/plugin.pys outFilterฑs(s__name__s __module__sTruesnoIgnores__init__sbounceswrapsunbouncesmsgspmsgsnamessdo401snormalizeChannelsdoLogs doPrivmsgsdoBouncesdoNoticesdoNicksdoJoinsdoKicksdoPartsdoModesdoTopicsdoQuits outFilter(((s./Bnc/plugin.pysBnc(s4                 (s supybot.utilssutilsssupybot.commandsssupybot.pluginsspluginsssupybot.ircutilssircutilsssupybot.callbackss callbacksssupybot.ircmsgssircmsgssPluginsBncsClass(sutilssircmsgss callbacksspluginssBncsClasssircutils((s./Bnc/plugin.pys?!s     ”