# 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 # Returns a random fact/quote/whatever from one or more files class FactFile(Module): def register_handlers(self, server): server.add_global_handler('pubmsg', self.on_pubmsg) server.add_global_handler('privmsg', self.on_privmsg) def unregister_handlers(self): self.server.remove_global_handler('pubmsg', self.on_pubmsg) self.server.remove_global_handler('privmsg', self.on_privmsg) def do(self, connection, event, nick, userhost, replypath, what, admin_unlocked): whats = what.split(' ') try: filename = self.config.get('fact', 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 self.reply(connection, replypath, 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;