import sys

@plugin
class DynaCode(object):
    def __init__(self, server):
        self.server = server
        self.server.pluginManager.loadPlugin("auth")
        self.commands = [ "py" ]
        self.server.handle("command", self.handle_command, self.commands)
    
    def handle_command(self, channel, user, cmd, args):
        if self.server.getPlugin("auth").isOwner(user) and cmd == "py":
            if len(args) < 1:
                self.server.doMessage(channel, user+": Not enough arguments.")
                return
            
            backup = sys.stdout
            myout = OutputBuffer()
            sys.stdout = myout
            try:
                exec " ".join(args)
            except Exception,e:
                sys.stdout = backup
                self.server.doMessage(channel, user+": "+e.__class__.__name__+": "+e.__str__())
                
            sys.stdout = backup
            for line in myout.getOutput():
                self.server.doMessage(channel, user+": "+line)

class OutputBuffer(object):
    def __init__(self):
        self.__output = []
    
    def write(self, s):
        if s != "\n":
            self.__output.append(s)
    
    def getOutput(self):
        return self.__output