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)
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}
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)
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)
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)
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)
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)
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)