From 6ae1005cc238ae6e7ed6f19cecfd73b33ee1a71f Mon Sep 17 00:00:00 2001 From: lavamind <lavamind@ware.lib3.net> Date: Sat, 13 Aug 2016 11:15:55 -0400 Subject: [PATCH] KanBot modifications. --- bot.py | 18 ++++++++---------- colour.py | 24 ++++++++++++------------ db.py | 2 +- main.py | 11 ++++++++++- 4 files changed, 31 insertions(+), 24 deletions(-) diff --git a/bot.py b/bot.py index 8c6669d..2bbe107 100644 --- a/bot.py +++ b/bot.py @@ -10,6 +10,7 @@ import feedparser from colour import Colours from db import FeedDB from config import Config +import lxml.html class IRCBot(irc.client.SimpleIRCClient): def __init__(self, config, db, on_connect_cb): @@ -28,8 +29,6 @@ class IRCBot(irc.client.SimpleIRCClient): connection.join(self.__config.CHANNEL) def on_join(self, connection, event): - """Say hello to other people in the channel. """ - connection.privmsg(self.__config.CHANNEL, "Hi, I'm " + Colours('3',str(connection.get_nickname())).get() + " your bot. Send " + Colours(self.num_col,"!help").get() +" to get a list of commands.") self.__on_connect_cb() def __handle_msg(self, msg): @@ -116,10 +115,10 @@ class IRCBot(irc.client.SimpleIRCClient): except Exception as e: print e - def post_news(self, feed_name, title, url, date): + def post_news(self, feed_name, title, url, date, desc): """Posts a new announcement to the channel""" try: - msg = Colours(self.feedname,str(feed_name)).get() + ": " + title + ", " + url + ", " + Colours(self.date,str(date)).get() + msg = Colours('2',title).get() + " " + desc + " " + Colours('6',url).get() self.send_msg(self.__config.CHANNEL, msg) except Exception as e: print e @@ -171,10 +170,10 @@ class Bot(object): # Reverse the ordering. Oldest first. for newsitem in news.entries[::-1]: newstitle = newsitem.title - newsurl = tinyurl.create_one(newsitem.link) # Create a short link - if newsurl == "Error": #If that fails, use the long version - newsurl = newsitem.link - newsurl = Colours('', newsurl).get() + newsurl = newsitem.link + + html = lxml.html.fromstring(newsitem.description) + newsdesc = html.find_class('activity-task-title')[0].text_content() # Try to get the published date. Otherwise set it to 'no date' try: @@ -188,9 +187,8 @@ class Bot(object): # Update the database. If it's a new issue, post it to the channel is_new = self.__db.insert_news(feed_info[0], newstitle, newsurl, newsdate) if is_new: - self.__irc.post_news(feed_info[1], newstitle, newsurl, newsdate) + self.__irc.post_news(feed_info[1], newstitle, newsurl, newsdate, newsdesc) - print Colours('7',"Updated: ").get() + feed_info[1] except Exception as e: print e print Colours('1',"Failed: ").get() + feed_info[1] diff --git a/colour.py b/colour.py index b4505df..3b1037e 100644 --- a/colour.py +++ b/colour.py @@ -3,32 +3,32 @@ class Colours: def __init__(self, col, string): self.colour = col self.string = string - self.default = '\033[0m' + self.default = '\017' self.ret = self.string+self.default def get(self): if self.colour == '1' or self.colour == 'red': - return '\033[031m'+self.ret + return '\00304'+self.ret elif self.colour == '2' or self.colour == 'green': - return '\033[032m'+self.ret + return '\00303'+self.ret elif self.colour == '3' or self.colour == 'yellow': - return '\033[033m'+self.ret + return '\00308'+self.ret elif self.colour == '4' or self.colour == 'blue': - return '\033[034m'+self.ret + return '\00312'+self.ret elif self.colour == '5' or self.colour == 'purple': - return '\033[035m'+self.ret + return '\00306'+self.ret elif self.colour == '6' or self.colour == 'cyan': - return '\033[036m'+self.ret + return '\00310'+self.ret elif self.colour == '7' or self.colour == 'lightgreen': - return '\033[1;32m'+self.ret + return '\00309'+self.ret elif self.colour == '8' or self.colour == 'grey': - return '\033[1;30m'+self.ret + return '\00314'+self.ret elif self.colour == '9' or self.colour == 'pink': - return '\033[1;35m'+self.ret + return '\00313'+self.ret elif self.colour == '10' or self.colour == 'lightblue': - return '\033[1;34m'+self.ret + return '\00311'+self.ret else: - return '\033[1;37m'+self.ret + return '\00316'+self.ret """ if __name__ == "__main__": diff --git a/db.py b/db.py index 70b3f97..353e5e3 100644 --- a/db.py +++ b/db.py @@ -59,7 +59,7 @@ class FeedDB(object): def insert_news(self, feed_id, title, url, published): """Checks if a news item with the given information exists. If not, create a new entry.""" - exists = self.__db_worker.execute("select exists(select 1 FROM news WHERE feedid = :feedid and title = :title LIMIT 1)", {'feedid': feed_id, 'title': title})[0][0] + exists = self.__db_worker.execute("select exists(select 1 FROM news WHERE feedid = :feedid and title = :title and published = :published LIMIT 1)", {'feedid': feed_id, 'title': title, 'published': published})[0][0] if exists: return False self.__db_worker.execute("INSERT INTO news (title, url, feedid, published) VALUES (:title, :url, :feedid, :published)", {'title': title, 'url': url, 'feedid': feed_id, 'published': published}) diff --git a/main.py b/main.py index 04b5908..d973270 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,16 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- from bot import Bot +import signal +import os + +def signal_handler(signal, frame): + print('You pressed Ctrl+C!') + os._exit(0) if __name__ == "__main__": bot = Bot() - bot.start() \ No newline at end of file + bot.start() + signal.signal(signal.SIGINT, signal_handler) + while True: + signal.pause() -- GitLab