class EventHandler:
    def __init__(self, actionHandler, battleQuery):
        self.currentPlayers={}
        self.modLoader=ModLoader(actionHandler, battleQuery)

    def handle(self,packet):
        logging.debug(packet[3])

        if len(packet[3])>=2:
            event=packet[3]
            normalizedEvent=str(event[0]).replace(".o","O")
            
        
            logging.debug(normalizedEvent)
            
            if event!="punkBuster.onMessage":
                for m in self.modLoader.getMods():
                    try:
                        call = getattr(m, normalizedEvent)
                    except AttributeError:
                        logging.debug("unknown event")
                    else:
                        eventArgs=event[1:]
                        if "name" in eventArgs: #check for playerstats block and group it
                            nIndex=eventArgs.index("name")
                            playerStats=eventArgs[nIndex-1:]
                            eventArgs=eventArgs[:len(eventArgs)-len(playerStats)]
                            eventArgs.append(playerStats)
                            
                        call(*eventArgs)
                    m.onEveryEvent()
class EventHandler:
    def __init__(self, actionHandler, battleQuery):
        self.currentPlayers = {}
        self.modLoader = ModLoader(actionHandler, battleQuery)

    def handle(self, packet):
        logging.debug(packet[3])

        if len(packet[3]) >= 2:
            event = packet[3]
            normalizedEvent = str(event[0]).replace(".o", "O")

            logging.debug(normalizedEvent)

            if event != "punkBuster.onMessage":
                for m in self.modLoader.getMods():
                    try:
                        call = getattr(m, normalizedEvent)
                    except AttributeError:
                        logging.debug("unknown event")
                    else:
                        eventArgs = event[1:]
                        if "name" in eventArgs:  #check for playerstats block and group it
                            nIndex = eventArgs.index("name")
                            playerStats = eventArgs[nIndex - 1:]
                            eventArgs = eventArgs[:len(eventArgs) -
                                                  len(playerStats)]
                            eventArgs.append(playerStats)

                        call(*eventArgs)
                    m.onEveryEvent()
예제 #3
0
파일: client.py 프로젝트: Clarvel/PyRCbot
 def __init__(self):
     self.nickname = settings.NICKNAME
     self.channels = settings.CHANLIST
     self.server = settings.SERVER
     # open logger to server.txt
     self.logger = Logger(settings.SERVER)
     # open bot to console input
     self.console = Console(self)
     # load mods
     self.mods = ModLoader()
 def __init__(self, actionHandler, battleQuery):
     self.currentPlayers={}
     self.modLoader=ModLoader(actionHandler, battleQuery)
 def __init__(self, actionHandler, battleQuery):
     self.currentPlayers = {}
     self.modLoader = ModLoader(actionHandler, battleQuery)
예제 #6
0
파일: client.py 프로젝트: Clarvel/PyRCbot
class Bot(irc.IRCClient):
    #initialization
    def __init__(self):
        self.nickname = settings.NICKNAME
        self.channels = settings.CHANLIST
        self.server = settings.SERVER
        # open logger to server.txt
        self.logger = Logger(settings.SERVER)
        # open bot to console input
        self.console = Console(self)
        # load mods
        self.mods = ModLoader()

    #default message sender and autologger
    def sendMsg(self, channel, msg):
        self.msg(channel, msg)
        self.logger.log("[%s] <%s> %s" % (channel, self.nickname, msg))
    
    def connectionMade(self):
        irc.IRCClient.connectionMade(self)
        self.logger.log("[connected at %s]" % time.asctime(time.localtime(time.time())))

    def connectionLost(self, reason):
        irc.IRCClient.connectionLost(self, reason)
        self.logger.log("[disconnected at %s]" % time.asctime(time.localtime(time.time())))


    # callbacks for events

    def signedOn(self):
        """Called when bot has succesfully signed on to server."""
        for channel in settings.CHANLIST:
            self.join(channel)
        self.logger.log("[" + self.nickname + " has joined %s]" % self.server)

    def joined(self, channel):
        """This will get called when the bot joins the channel."""
        self.logger.log("[" + self.nickname + " has joined %s]" % channel)

    def action(self, user, channel, msg):
        """This will get called when the bot sees someone do an action."""
        user = user.split('!', 1)[0]
        self.logger.log("[%s] * %s %s" % (channel, user, msg))

    # irc callbacks

    def irc_NICK(self, prefix, params):
        """Called when an IRC user changes their nickname."""
        old_nick = prefix.split('!')[0]
        new_nick = params[0]
        self.logger.log("%s is now known as %s" % (old_nick, new_nick))

    # For fun, override the method that determines how a nickname is changed on
    # collisions. The default method appends an underscore.
    def alterCollidedNick(self, nickname):
        """
        Generate an altered version of a nickname that caused a collision in an
        effort to create an unused related name for subsequent registration.
        """
        return "_" + nickname

    
    def privmsg(self, user, channel, msg):
        #This will get called when the bot receives any message.
        user = user.split('!', 1)[0] #user is the person sending the message
        #log the message
        self.logger.log("[%s] <%s> %s" % (channel, user, msg))
        # Check to see if it is a command message
        reply = []
        if msg.startswith(settings.ALERTCHR):
            #if it is a command, set new variable to command name and trim message
            msg = msg.split(settings.ALERTCHR)
            msg.remove('')
            for a in msg:
                command = a.split(' ')[0]
                try:
                    message = a.split(command + ' ')[1]
                except IndexError:
                    pass
                else:
                    reply.append(self.mods.callMod(user, message, command))
        elif self.nickname in msg:
            reply.append(self.mods.callMod(user, msg, "@n"))
        else:
            reply.append(self.mods.callMod(user, msg, "@a"))
        #once messages gotten from mod, reply
        for msgs in reply:
            self.sendMsg(channel, msgs)