diff --git a/bot.py b/bot.py index 58e7ce96a56dbaf7f84c46b71f603cd8d11625d7..8c6669d61d1b3f4a0fefbe8d9a17251b9927ba6d 100644 --- a/bot.py +++ b/bot.py @@ -7,6 +7,7 @@ import tinyurl import time import re import feedparser +from colour import Colours from db import FeedDB from config import Config @@ -17,6 +18,9 @@ class IRCBot(irc.client.SimpleIRCClient): self.__db = db self.connect(self.__config.HOST, self.__config.PORT, self.__config.NICK) self.__on_connect_cb = on_connect_cb + self.num_col = self.__config.num_col + self.date = self.__config.date + self.feedname = self.__config.feedname def on_welcome(self, connection, event): """Join the correct channel upon connecting""" @@ -25,7 +29,7 @@ class IRCBot(irc.client.SimpleIRCClient): def on_join(self, connection, event): """Say hello to other people in the channel. """ - connection.privmsg(self.__config.CHANNEL, "Hi, I'm " + connection.get_nickname() + " and your bot. Send !help to get a list of commands.") + 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): @@ -39,19 +43,19 @@ class IRCBot(irc.client.SimpleIRCClient): elif msg == "!list": answer = "" for entry in self.__db.get_feeds(): - answer += "#" + str(entry[0]) + ": " + entry[1] + ", " + entry[2] + ", updated every " + str(entry[3]) + " min" + "\n" + answer += "#" + Colours(self.num_col,str(entry[0])).get() + ": " + entry[1] + ", " + Colours('',str(entry[2])).get() + Colours(self.date,", updated every ").get() + Colours(self.num_col,str(entry[3])).get() + Colours(self.date," min").get() + "\n" # Print some simple stats (Feed / News count) elif msg == "!stats": feeds_count = self.__db.get_feeds_count() news_count = self.__db.get_news_count() - answer = "Feeds: " + str(feeds_count) + ", News: " + str(news_count) + answer = "Feeds: " + Colours(self.num_col,str(feeds_count)).get() + ", News: " + Colours(self.num_col,str(news_count)).get() # Print last 25 news. elif msg == "!last": answer = "" for entry in self.__db.get_latest_news()[::-1]: - answer += "#" + str(entry[0]) + ": " + entry[1] + ", " + entry[2] + ", " + entry[3] + "\n" + answer += "#" + Colours(self.num_col,str(entry[0])).get() + ": " + entry[1] + ", " + Colours('',str(entry[2])).get() + ", " + Colours(self.date,entry[3]).get() + "\n" # Print last 25 news for a specific feed elif msg.startswith("!lastfeed"): @@ -59,9 +63,9 @@ class IRCBot(irc.client.SimpleIRCClient): try: feedid = int(msg.replace("!lastfeed","").strip()) except: - return "Wrong command: " + msg + ", use: !lastfeed <feedid>" + return Colours('1',"Wrong command: ").get() + msg + ", use: !lastfeed <feedid>" for entry in self.__db.get_news_from_feed(feedid)[::-1]: - answer += "#" + str(entry[0]) + ": " + entry[1] + ", " + entry[2] + ", " + entry[3] + "\n" + answer += "#" + Colours(self.num_col,str(entry[0])).get() + ": " + entry[1] + ", " + Colours('',str(entry[2])).get() + ", " + Colours(self.date,str(entry[3])).get() + "\n" # Else tell the user how to use the bot else: @@ -115,7 +119,7 @@ class IRCBot(irc.client.SimpleIRCClient): def post_news(self, feed_name, title, url, date): """Posts a new announcement to the channel""" try: - msg = feed_name + ": " + title + ", " + url + ", " + date + msg = Colours(self.feedname,str(feed_name)).get() + ": " + title + ", " + url + ", " + Colours(self.date,str(date)).get() self.send_msg(self.__config.CHANNEL, msg) except Exception as e: print e @@ -128,8 +132,8 @@ Help: - !help Prints this help - !list Prints all feeds - !stats Prints some statistics - - !last Prints the last 25 entries - - !lastfeed <feedid> Prints the last 25 entries from a specific feed + - !last Prints the last 10 entries + - !lastfeed <feedid> Prints the last 10 entries from a specific feed """ class Bot(object): @@ -170,6 +174,7 @@ class Bot(object): 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() # Try to get the published date. Otherwise set it to 'no date' try: @@ -185,10 +190,10 @@ class Bot(object): if is_new: self.__irc.post_news(feed_info[1], newstitle, newsurl, newsdate) - print "Updated: " + feed_info[1] + print Colours('7',"Updated: ").get() + feed_info[1] except Exception as e: print e - print "Failed: " + feed_info[1] + print Colours('1',"Failed: ").get() + feed_info[1] # sleep frequency minutes - time.sleep(int(feed_info[3])*60) \ No newline at end of file + time.sleep(int(feed_info[3])*60) diff --git a/colour.py b/colour.py new file mode 100644 index 0000000000000000000000000000000000000000..b4505df481bdbf9f84aeb0d9c3581bb8ef3f3e93 --- /dev/null +++ b/colour.py @@ -0,0 +1,37 @@ + +class Colours: + def __init__(self, col, string): + self.colour = col + self.string = string + self.default = '\033[0m' + self.ret = self.string+self.default + + def get(self): + if self.colour == '1' or self.colour == 'red': + return '\033[031m'+self.ret + elif self.colour == '2' or self.colour == 'green': + return '\033[032m'+self.ret + elif self.colour == '3' or self.colour == 'yellow': + return '\033[033m'+self.ret + elif self.colour == '4' or self.colour == 'blue': + return '\033[034m'+self.ret + elif self.colour == '5' or self.colour == 'purple': + return '\033[035m'+self.ret + elif self.colour == '6' or self.colour == 'cyan': + return '\033[036m'+self.ret + elif self.colour == '7' or self.colour == 'lightgreen': + return '\033[1;32m'+self.ret + elif self.colour == '8' or self.colour == 'grey': + return '\033[1;30m'+self.ret + elif self.colour == '9' or self.colour == 'pink': + return '\033[1;35m'+self.ret + elif self.colour == '10' or self.colour == 'lightblue': + return '\033[1;34m'+self.ret + else: + return '\033[1;37m'+self.ret + +""" +if __name__ == "__main__": + for i in range(0, 11): + print Colours(str(i), 'Testing').get() + "TESTING "+Colours(str(i), 'wat').get() +""" diff --git a/config.py.sample b/config.py.sample index ae2ac4b47f8be964455bc4bd4999e026b159fa65..1ce3c6c942ed0598f2c0d1f7add12940a48d6d37 100644 --- a/config.py.sample +++ b/config.py.sample @@ -7,4 +7,12 @@ class Config(object): self.PORT = 6667 self.CHANNEL = "##YOURCHANNEL" self.NICK = "YOURBOTNICK" - self.admin_nicks= ['YOURADMINNICK'] \ No newline at end of file + self.admin_nicks= ['YOURADMINNICK'] + #=Colours= + #1 - red 2 - green 3 - yellow + #4 - blue 5 - purple 6 - cyan + #7 - lightgreen 8 - grey 9 - pink + #10 - lighblue + self.num_col = '1' + self.date = '8' + self.feedname = '2' diff --git a/db.py b/db.py index 35b5077f5df8a5e318a57af04bee7cd017ce6e86..70b3f971e764188fbcb25b47986bcfba286f403e 100644 --- a/db.py +++ b/db.py @@ -33,14 +33,14 @@ class FeedDB(object): feeds.append(feed) return feeds - def get_news_from_feed(self, feed_id, limit=25): + def get_news_from_feed(self, feed_id, limit=10): """Returns 'limit' news from a specific feed""" news = [] for item in self.__db_worker.execute("select id, title, url, published from news where feedid = :feedid limit :limit", {'feedid': feed_id, 'limit':limit}): news.append(item) return news - def get_latest_news(self, limit=25): + def get_latest_news(self, limit=10): """Returns 'limit' latest news""" news = [] for item in self.__db_worker.execute("select id, title, url, published from news order by id desc limit :limit", {'limit':limit}): @@ -63,4 +63,4 @@ class FeedDB(object): 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}) - return True \ No newline at end of file + return True