diff options
author | lassulus <lassulus@googlemail.com> | 2014-01-09 23:58:38 +0100 |
---|---|---|
committer | lassulus <lassulus@googlemail.com> | 2014-01-09 23:58:38 +0100 |
commit | 940e77f47d7c3d874053eeab17054f6b10e63a12 (patch) | |
tree | a8fc851d0c72d5ce0101db56826d41d2e8dfb735 /knn/controller.py | |
parent | b5f1c347900b21a07674f2132e4dac2fb1dc99ea (diff) |
rename ircbot to knn (krebs news network)
Diffstat (limited to 'knn/controller.py')
-rwxr-xr-x | knn/controller.py | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/knn/controller.py b/knn/controller.py new file mode 100755 index 00000000..5277d626 --- /dev/null +++ b/knn/controller.py @@ -0,0 +1,143 @@ +from time import sleep +import irc.bot +import _thread +import rssbot +import os +import subprocess + +class NewsBot(irc.bot.SingleServerIRCBot): + def __init__(self, name, chans=['#news'], server='ire', port=6667, timeout=60): + irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], name, name) + self.name = name + self.server = server + self.port = port + self.chans = chans + self.to = timeout + + def start(self): + self.bot = _thread.start_new_thread(irc.bot.SingleServerIRCBot.start, (self,)) + + def on_welcome(self, connection, event): + for chan in self.chans: + connection.join(chan) + + def send(self, target, string): + for line in string.split('\n'): + self.connection.privmsg(target, line) + sleep(1) + + def on_privmsg(self, connection, event): + args_array = event.arguments[0].split() + answer = self.read_message(args_array) + self.send(event.source.nick, answer) + + def on_pubmsg(self, connection, event): + args_array = event.arguments[0].split() + if len(args_array[0]) > 0 and args_array[0][:-1]==self.name: + answer = self.read_message(args_array[1:]) + self.send(event.target, answer) + + def on_invite(self, connection, event): + for chan in event.arguments: + connection.join(chan) + + def read_message(self, args): + try: + if args[0] in [x for x in commands.__dict__.keys() if x.find('_')]: + func = getattr(commands, args[0]) + return func(args) + else: + return 'command not found' + except: + return "mimimimi" + + + +class commands(): + def add(args): + bot = rssbot.RssBot(args[2], args[1], url_shortener=url_shortener) + bots[args[1]] = bot + bot.start() + return "bot " + args[1] + " added" + + def delete(args): + bots[args[1]].stop() + del bots[args[1]] + return "bot " + args[1] + " deleted" + + def rename(args): + if args[1] in bots: + if args[2] in bots: + return args[2] + ' already taken' + else: + bots[args[1]].connection.nick(args[2]) + bots[args[1]].name = args[2] + bots[args[2]] = bots[args[1]] + del bots[args[1]] + return 'renamed ' + args[1] + ' in ' + args[2] + else: + return args[1] + ' does not exist' + + def save(args): + output_buffer = '' + for bot in bots: + if bot.loop: + output_buffer += bot + '|' + bots[bot].url + '|' + ' '.join(bots[bot].channels) + '\n' + + F = open(feedfile, "w") + F.writelines(output_buffer) + F.close() + + return "bots saved to " + feedfile + + def caps(args): + return ' '.join([x for x in commands.__dict__.keys() if x.find('_')]) + + def list(args): + output_buffer = '' + for bot in bots: + output_buffer += bot + ' url: ' + bots[bot].url + '\n' + return output_buffer + + def info(args): + if args[1] in bots: + output_buffer = '' + for data in ['title', 'link', 'updated']: + if data in bots[args[1]].feed.feed: + output_buffer += data + ': ' + bots[args[1]].feed.feed[data] + '\n' + output_buffer += 'lastnew: ' + bots[args[1]].lastnew.isoformat() + return output_buffer + else: + return 'bot not found' + + def search(args): + output = subprocess.check_output(['./GfindFeeds4bot', args[1]]).decode() + return output + +feedfile = 'new_feeds' +url_shortener = 'http://wall' +init_channels = ['#news'] + +if 'FEEDFILE' in os.environ: + feedfile = os.environ['FEEDFILE'] + +if 'URLSHORT' in os.environ: + url_shortener = os.environ['URLSHORT'] + +bots = {} +knews = NewsBot('knews') + +#config file reading +F = open(feedfile, "r") +lines = F.readlines() +F.close() + +for line in lines: + line = line.strip('\n') + linear = line.split('|') + bot = rssbot.RssBot(linear[1], linear[0], init_channels + linear[2].split(), url_shortener) + bot.start() + bots[linear[0]] = bot + +knews.start() + |