def run(self, line, user_obj, destination_obj=None): """ Hallo will tell you which channels he is in, ops only. Format: "channels" for channels on current server, "channels all" for all channels on all servers. """ line_clean = line.strip().lower() hallo_obj = user_obj.get_server().get_hallo() # If they ask for all channels, give them all channels. if line_clean in self.HALLO_NAMES: output_string = "On all servers, I am on these channels: " server_list = hallo_obj.get_server_list() channel_title_list = [] for server_obj in server_list: server_name = server_obj.get_name() in_channel_name_list = self.get_in_channel_names_list(server_obj) channel_title_list += [server_name + "-" + channel_name for channel_name in in_channel_name_list] output_string += ', '.join(channel_title_list) output_string += "." return output_string # If nothing specified, or "server", then output current server channel list if line_clean == "" or line_clean in self.SERVER_NAMES: server_obj = user_obj.get_server() in_channel_name_list = self.get_in_channel_names_list(server_obj) output_string = "On this server, I'm in these channels: " output_string += ', '.join(in_channel_name_list) + "." return output_string # If a server is specified, get that server's channel list if Commons.find_any_parameter(self.SERVER_NAMES, line_clean): server_name = line_clean.split("=")[1] server_obj = hallo_obj.get_server_by_name(server_name) if server_obj is None: return "I don't recognise that server name." in_channel_name_list = self.get_in_channel_names_list(server_obj) output_string = "On " + server_obj.get_name() + " server, I'm in these channels: " output_string += ', '.join(in_channel_name_list) + "." return output_string # Check if whatever input they gave is a server server_obj = hallo_obj.get_server_by_name(line_clean) if server_obj is None: # Otherwise, return an error output_string = "I don't understand your input, please specify a server, or hallo, " \ "or no input to get the current server's list" return output_string in_channel_name_list = self.get_in_channel_names_list(server_obj) output_string = "On " + server_obj.get_name() + " server, I'm in these channels: " output_string += ', '.join(in_channel_name_list) + "." return output_string
def connect_to_new_server_irc(self, line, user_obj, destination_obj): """ Processes arguments in order to connect to a new IRC server :type line: str :type user_obj: Destination.User :type destination_obj: Destination.Destination """ # Get some handy objects current_server = user_obj.get_server() hallo_obj = current_server.get_hallo() # Set all variables to none as default server_address, server_port = None, None server_name = None # Find the URL, if specified url_regex = re.compile("(^|\s)(irc://)?(([a-z.]+\.[a-z]+)(:([0-9]+))?)(\s|$)", re.IGNORECASE) url_search = url_regex.search(line) if url_search is not None: line = line.replace(url_search.group(0), " ") server_address = url_search.group(4).lower() try: server_port = int(url_search.group(6)) except (ValueError, TypeError): server_port = None # Find the server_address, if specified with equals notation server_address = Commons.find_parameter("server_address", line) or server_address # Find the server_port, if specified with equals notation server_port_param = Commons.find_parameter("server_port", line) if server_port_param is not None: try: server_port = int(server_port_param) except (ValueError, TypeError): return "Error, invalid port number." # Check server_address and server_port are set if server_address is None: return "Error, No server address specified." if server_port is None and isinstance(current_server, ServerIRC): server_port = current_server.get_server_port() if server_port is None: return "Error, No server port specified." # Get server name server_name = Commons.find_any_parameter(["server_name", "name"], line) or server_name # if server name is null, get it from server_address if server_name is None: server_name = Commons.get_domain_name(server_address) # Get other parameters, if set. auto_connect_str = Commons.find_parameter("auto_connect", line) auto_connect = True if auto_connect_str is None else Commons.string_to_bool(auto_connect_str) server_nick = Commons.find_any_parameter(["server_nick", "nick"], line) or current_server.get_nick() server_prefix_arg = Commons.find_any_parameter(["server_prefix", "prefix"], line) if not server_prefix_arg: server_prefix = current_server.prefix else: server_prefix = None if Commons.is_string_null(server_prefix_arg) else server_prefix_arg full_name = Commons.find_parameter("full_name", line) or current_server.get_full_name() nickserv_nick = "nickserv" nickserv_identity_command = "status" nickserv_identity_resp = "^status [^ ]+ 3$" nickserv_password = None if isinstance(current_server, ServerIRC): nickserv_nick = current_server.get_nickserv_nick() nickserv_identity_command = current_server.get_nickserv_ident_command() nickserv_identity_resp = current_server.get_nickserv_ident_response() nickserv_password = current_server.get_nickserv_pass() nickserv_nick = Commons.find_parameter("nickserv_nick", line) or nickserv_nick nickserv_identity_command = Commons.find_parameter("nickserv_identity_command", line) or nickserv_identity_command nickserv_identity_resp = Commons.find_parameter("nickserv_identity_resp", line) or nickserv_identity_resp nickserv_password = Commons.find_parameter("nickserv_password", line) or nickserv_password # Create this serverIRC object new_server_obj = ServerIRC(hallo_obj, server_name, server_address, server_port) new_server_obj.set_auto_connect(auto_connect) new_server_obj.set_nick(server_nick) new_server_obj.set_prefix(server_prefix) new_server_obj.set_full_name(full_name) new_server_obj.set_nickserv_nick(nickserv_nick) new_server_obj.set_nickserv_ident_command(nickserv_identity_command) new_server_obj.set_nickserv_ident_response(nickserv_identity_resp) new_server_obj.set_nickserv_pass(nickserv_password) # Add user with same name on new server to all the same groups as current user new_user_nick = Commons.find_any_parameter(["user", "god"], line) or user_obj.get_name() new_user = new_server_obj.get_user_by_name(new_user_nick) for group in user_obj.user_group_list: new_user.add_user_group(group) # Add the new object to Hallo's list hallo_obj.add_server(new_server_obj) # Connect to the new server object. Thread(target=new_server_obj.run).start() return "Connected to new IRC server: " + new_server_obj.get_name() + "."