""" Urls - store urls, retrieve urls, even track some maybe Copyright (C) 2010 Brian S. Stephan This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ from ConfigParser import NoOptionError import os import random import re from extlib import irclib from Module import Module class Urls(Module): """Track URLs and allow one to be returned randomly or searched for.""" def do(self, connection, event, nick, userhost, what, admin_unlocked): """Search for a URL from the store, or return a random one, or add one.""" whats = what.split(' ') if whats[0] == "!url": try: filename = self.config.get(self.__class__.__name__, 'urlfile') # check file if os.path.isfile(filename): # try special commands like add if len(whats) > 1: if whats[1] == "add" and len(whats) > 2: with open(filename, 'a') as file: urlstr = ' '.join(whats[2:]) + "\n" file.write(urlstr) return 'added url' # default: get a random url # http://www.regexprn.com/2008/11/read-random-line-in-large-file-in.html with open(filename, 'r') as file: urls = [] if len(whats) == 1: urls = file.readlines() else: lines = file.readlines() for line in lines: # check if line matches provided regex if re.search(' '.join(whats[1:]), line, re.IGNORECASE) is not None: urls.append(line) if len(urls) > 0: to_print = urls[random.randint(1, len(urls))-1] # return text return to_print.rstrip() else: print('filename in config file for urls is wrong') except NoOptionError: pass # vi:tabstop=4:expandtab:autoindent # kate: indent-mode python;indent-width 4;replace-tabs on;