Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 17 additions & 12 deletions bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import time
import re
import feedparser
from colour import Colours
from db import FeedDB
from config import Config

Expand All @@ -17,6 +18,9 @@ def __init__(self, config, db, on_connect_cb):
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"""
Expand All @@ -25,7 +29,7 @@ def on_welcome(self, connection, event):

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):
Expand All @@ -39,29 +43,29 @@ def __handle_msg(self, msg):
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"):
answer = ""
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:
Expand Down Expand Up @@ -115,7 +119,7 @@ def send_msg(self, target, msg):
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
Expand All @@ -128,8 +132,8 @@ def __help_msg(self):
- !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):
Expand Down Expand Up @@ -170,6 +174,7 @@ def __fetch_feed(self, feed_info):
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:
Expand All @@ -185,10 +190,10 @@ def __fetch_feed(self, feed_info):
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)
time.sleep(int(feed_info[3])*60)
37 changes: 37 additions & 0 deletions colour.py
Original file line number Diff line number Diff line change
@@ -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()
"""
10 changes: 9 additions & 1 deletion config.py.sample
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,12 @@ class Config(object):
self.PORT = 6667
self.CHANNEL = "##YOURCHANNEL"
self.NICK = "YOURBOTNICK"
self.admin_nicks= ['YOURADMINNICK']
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'
6 changes: 3 additions & 3 deletions db.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@ def get_feeds(self):
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}):
Expand All @@ -63,4 +63,4 @@ def insert_news(self, feed_id, title, url, published):
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
return True