""" FactFile - display facts from a flat file upon request 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 FactFile(Module): """Return a random fact/quote/whatever from one or more files.""" def do(self, connection, event, nick, userhost, what, admin_unlocked): """Search for a fact, or return a random one.""" whats = what.split(' ') try: filename = self.config.get(self.__class__.__name__, whats[0]) # open file if os.path.isfile(filename): # http://www.regexprn.com/2008/11/read-random-line-in-large-file-in.html with open(filename, 'r') as file: facts = [] if len(whats) == 1: facts = 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: facts.append(line) if len(facts) > 0: to_print = facts[random.randint(1, len(facts))-1] # return text return to_print.rstrip() else: print('filename in config file for \'' + whats[0] + '\' is wrong') except NoOptionError: pass # vi:tabstop=4:expandtab:autoindent # kate: indent-mode python;indent-width 4;replace-tabs on;