diff --git a/.gitignore b/.gitignore index 1fea45c..f2ea467 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *.facts *.pyc *.swp +*.urls *~ dr.botzo.cfg diff --git a/TODO b/TODO index 38ba3e6..ba6afb2 100644 --- a/TODO +++ b/TODO @@ -10,8 +10,7 @@ dr.botzo --- TODO * some sort of cron interface (periodic events) * named pipe to send commands to the bot outside of IRC * url module - * direct adds implied. also do historical urls? - * last 20 or something? + * do historical urls? - last 20 or something? * more text modification nonsense * any interesting web service stuff? * obligatory info command diff --git a/modules/Urls.py b/modules/Urls.py new file mode 100644 index 0000000..bccb7b4 --- /dev/null +++ b/modules/Urls.py @@ -0,0 +1,73 @@ +""" +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, replypath, 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('urls', '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 self.reply(connection, replypath, '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 self.reply(connection, replypath, 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;