Beispiel #1
0
    def on_dccchat(self, c, e):
        """
            commands executed when the bot received a request for a new dcc chat
            currently does nothing

            @type c: ServerConnection
            @param c: connection object to the server

            @type e: Event
            @param e: event object that was fired
        """

        self.__privMsg(c, e, FEATURE_DISABLED)
        return

        # check parameters
        if len(e.arguments()) != 2:
            return

        # retrieve parameters
        args = e.arguments()[1].split()
        if len(args) == 4:
            try:
                address = ip_numstr_to_quad(args[2])
                port = int(args[3])
            except ValueError:
                return

            DCCQueue.append((address, port))
            self.__privMsg(c, e, DCC_CONNECTION_QUEUED)
Beispiel #2
0
 def on_ctcp(self, connection, event):
     if len(event.arguments()) < 2:
         return
     args = event.arguments()[1].split()
     if args[0] != "SEND":
         return
     print "\tCTCP ", event.source(), event.arguments()
     filename = os.path.basename(" ".join(args[1:-3]))
     if os.path.exists(filename):
         print "\tA file named", filename, "already exists. Renaming it."
         newname = filename
         counter = 0
         while os.path.exists(newname):
             postfix = re.search(r'(\d+)(\.?.{3})?$', newname)
             counter = counter + 1
             if postfix:
                 newname = newname.replace(postfix.group(1),
                     str(int(postfix.group(1)) + 1))
             else:
                 extention = re.search(r'\..{3}$', newname)
                 if extention:
                     newname = newname.replace(extention.group(),
                         "_{}{}".format(counter, extention.group()))
                 else:
                     newname = newname + "_{}".format(counter)
         os.rename(filename, newname)
     peeraddress = irclib.ip_numstr_to_quad(args[-3])
     peerport = int(args[-2])
     dcc = self.dcc_connect(peeraddress, peerport, "raw")
     if peeraddress not in self.file_list:
         file_obj = open(filename, "wb")
         self.file_list[peeraddress] = {
                 'filename': filename, 'file': file_obj, 'connection': dcc,
                 'received_bytes': 0}
Beispiel #3
0
    def on_ctcp(self, connection, event):
        log.info("CTCP Arg[0]: " + event.arguments()[0])
        if event.arguments()[0] != "DCC" or len(event.arguments()) < 2:
            return
        arg = event.arguments()[1]
        args = re.match(
            r"^(?P<cmd>\w+)\s+\"?(?P<filename>[^\"].*[^\"])\"?" +
            r"\s+(?P<ip>\d+)(\s+(?P<unkn1>\d+))?" +
            r"\s+(?P<port>\d+)\s+(?P<unkn2>\d+)\s*$", arg)
        if args is None or args.group('cmd').upper() != "SEND":
            log.info("CTCP Arg[1]: " + arg)
            return
        peeraddress = ip_numstr_to_quad(args.group('ip'))
        peerport = int(args.group('port'))
        try:
            log.info("DCC Connecting: %s:%s" % (peeraddress, peerport))
            dcc = self.dcc_connect(peeraddress, peerport, "raw")
            dcc.filename = os.path.basename(args.group('filename'))

            search = re.match("SearchBot_results_for_\s*(?P<name>.*).txt.zip",
                              dcc.filename)
            dcc.is_search = search is not None
            if dcc.is_search:
                search_str = search.group('name').replace("_", " ")
                dcc.filename = "search results/%s" % dcc.filename
                try:
                    dcc.search = searches.get(search_str)
                    log.info("Search Result: " + search_str)
                except UnknownPhrase:
                    # bug: bad filename
                    dcc.search = searches.add(Search(title=search_str))
                    log.error("Unknown Search: " + search_str)
            else:
                try:
                    dcc.search = searches.get(dcc.filename)
                except UnknownPhrase:
                    # some servers replace spaces
                    dcc.filename = dcc.filename.replace("_", " ")
                    try:
                        dcc.search = searches.get(dcc.filename)
                    except UnknownPhrase:
                        log.error("Unknown File: " + dcc.filename)
                        dcc.search = searches.add(Search(title=dcc.filename))
                        dcc.search.rename = False
            dcc.search.filename = dcc.filename

            if os.path.exists(dcc.filename):
                count = 1
                basename, extension = os.path.splitext(dcc.filename)
                while os.path.exists(dcc.filename):
                    dcc.filename = "%s.%d%s" % (basename, count, extension)
                    count = count + 1
            dcc.file = open(dcc.filename, "w")
            dcc.received_bytes = 0
        except OverflowError as err:
            log.error("Overflow Error: " + str(err))
        except DCCConnectionError as err:
            log.error("Connect Error: " + str(err))
            log.info("CTCP Arg[1]: " + arg)
Beispiel #4
0
    def on_ctcp(self, connection, event):
        log.info("CTCP Arg[0]: " + event.arguments()[0])
        if event.arguments()[0] != "DCC" or len(event.arguments()) < 2:
            return
        arg = event.arguments()[1]
        args = re.match(r"^(?P<cmd>\w+)\s+\"?(?P<filename>[^\"].*[^\"])\"?"
                        + r"\s+(?P<ip>\d+)(\s+(?P<unkn1>\d+))?"
                        + r"\s+(?P<port>\d+)\s+(?P<unkn2>\d+)\s*$",
                        arg)
        if args is None or args.group('cmd').upper() != "SEND":
            log.info("CTCP Arg[1]: " + arg)
            return
        peeraddress = ip_numstr_to_quad(args.group('ip'))
        peerport = int(args.group('port'))
        try:
            log.info("DCC Connecting: %s:%s" % (peeraddress, peerport))
            dcc = self.dcc_connect(peeraddress, peerport, "raw")
            dcc.filename = os.path.basename(args.group('filename'))

            search = re.match("SearchBot_results_for_\s*(?P<name>.*).txt.zip", dcc.filename)
            dcc.is_search = search is not None
            if dcc.is_search:
                search_str = search.group('name').replace("_", " ")
                dcc.filename = "search results/%s" % dcc.filename
                try:
                    dcc.search = searches.get(search_str)
                    log.info("Search Result: " + search_str)
                except UnknownPhrase:
                    # bug: bad filename
                    dcc.search = searches.add(Search(title=search_str))
                    log.error("Unknown Search: " + search_str)
            else:
                try:
                    dcc.search = searches.get(dcc.filename)
                except UnknownPhrase:
                    # some servers replace spaces
                    dcc.filename = dcc.filename.replace("_", " ")
                    try:
                        dcc.search = searches.get(dcc.filename)
                    except UnknownPhrase:
                        log.error("Unknown File: " + dcc.filename)
                        dcc.search = searches.add(Search(title=dcc.filename))
                        dcc.search.rename = False
            dcc.search.filename = dcc.filename

            if os.path.exists(dcc.filename):
                count = 1
                basename, extension = os.path.splitext(dcc.filename)
                while os.path.exists(dcc.filename):
                    dcc.filename = "%s.%d%s" % (basename, count, extension)
                    count = count + 1
            dcc.file = open(dcc.filename, "w")
            dcc.received_bytes = 0
        except OverflowError as err:
            log.error("Overflow Error: " + str(err))
        except DCCConnectionError as err:
            log.error("Connect Error: " + str(err))
            log.info("CTCP Arg[1]: " + arg)
Beispiel #5
0
 def on_dccchat(self, c, e):
     if len(e.arguments()) != 2:
         return
     args = e.arguments()[1].split()
     if len(args) == 4:
         try:
             address = irclib.ip_numstr_to_quad(args[2])
             port = int(args[3])
         except ValueError:
             return
         self.dcc_connect(address, port)
Beispiel #6
0
 def on_dccchat(self, c, e):
     if len(e.arguments()) != 2:
         return
     args = e.arguments()[1].split()
     if len(args) == 4:
         try:
             address = ip_numstr_to_quad(args[2])
             port = int(args[3])
         except ValueError:
             return
         self.dcc_connect(address, port)
Beispiel #7
0
 def on_dccchat(self, varChat, varEvent):
     if len(varEvent.arguments()) != 2:
         return
     args = varEvent.arguments()[1].split()
     if len(args) == 4:
         try:
             address = ip_numstr_to_quad(args[2])
             varPort = int(args[3])
         except ValueError:
             return
         self.dcc_connect(address, varPort)
Beispiel #8
0
 def on_dccchat(self, connection, event):
     log.info("DCC Chat: " + event.arguments()[0])
     if len(event.arguments()) != 2:
         return
     args = event.arguments()[1].split()
     if len(args) == 4:
         try:
             address = ip_numstr_to_quad(args[2])
             port = int(args[3])
         except ValueError:
             return
         self.dcc_connect(address, port)
Beispiel #9
0
 def on_dccchat(self, connection, event):
     log.info("DCC Chat: " + event.arguments()[0])
     if len(event.arguments()) != 2:
         return
     args = event.arguments()[1].split()
     if len(args) == 4:
         try:
             address = ip_numstr_to_quad(args[2])
             port = int(args[3])
         except ValueError:
             return
         self.dcc_connect(address, port)