Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import feedparser, pickle, time, urllib, urllib2, cookielib
- admins = ( \
- 'LK!LK@CodeShock.org'
- )
- irc = None
- def set_irc_instance ( instance ):
- global irc
- irc = instance
- new_instance = True
- network_rss_channel = '#RSS'
- openers = {}
- feeds = {}
- def loadfeeds():
- global feeds, channels
- feeds_file = open ( 'feeds.pickle', 'rb' )
- feeds = pickle.load ( feeds_file )
- feeds_file.close()
- for feed in feeds:
- try: print ( irc.join ( feeds [ feed ] [1] ) )
- except irc.AlreadyInChannel: pass
- def loadopeners():
- global openers
- try:
- opener_file = open ( 'open.pickle', 'rb')
- openers = pickle.load ( opener_file )
- opener_file.close()
- except IOError: pass
- items = {}
- def feedit():
- global items, new_instance
- new_items = {}
- for rssfeed in feeds.keys():
- if rssfeed not in items.keys():
- items [ rssfeed ] = {}
- new_items [ rssfeed ] = {}
- try:
- if rssfeed in openers.keys():
- cj = cookielib.CookieJar()
- opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
- login = urllib.urlencode(openers [rssfeed] [1])
- opener.open(openers[rssfeed][0], login)
- feedp = opener.open(feeds [rssfeed] [0]).read()
- else: feedp = feedparser.parse ( feeds [ rssfeed ] [0] )
- for item in feedp.entries:
- if item.title not in items [ rssfeed ].keys():
- items [ rssfeed ] [ item.title ] = item.link
- new_items [ rssfeed ] [ item.title ] = item.link
- except feedparser.CharacterEncodingUnknown: pass
- if new_instance == True:
- new_instance = False
- else:
- for feed in new_items.keys():
- for new_item in new_items [ feed ].keys():
- title = new_item
- msg = feed + ': ' + title + ' | ' + new_items [ feed ] [ new_item ]
- try: irc.msg ( feeds [ feed ] [1], msg )
- except UnicodeEncodeError: pass
- except irc.IRCError: pass
- def cbuffer():
- global items, new_instance
- while 1:
- time.sleep ( 3600 )
- feedit()
- items = {}
- new_instance = True
- feedit()
- def feeding():
- while 1:
- time.sleep ( 300 )
- feedit()
- def cmd_handler ( event ):
- global feeds, channels, openers
- from_who = event [0]
- cmd = event [2].split() [0]
- who = from_who [0] + '!' + from_who [1] + '@' + from_who [2]
- if who in admins:
- print ( cmd + ' command received.' )
- try:
- try: cmd_params = event [2].split() [1:]
- except IndexError: cmd_params = event [2].split()
- if cmd == '!update': feedit()
- elif cmd == '!opener':
- name = cmd_params [0]
- url = cmd_params [1]
- username = cmd_params [2].split(':', 1)
- password = cmd_params [3].split(':', 1)
- openers [ name ] = [ url, {username[0]:username[1], password[0]:password[1] } ]
- open_file = open ( 'feeds.pickle', 'wb' )
- pickle.dump ( openers, open_file)
- open_file.close()
- elif cmd == '!opener-del':
- name = cmd_params [0]
- del openers [ name ]
- open_file = open ( 'feeds.pickle', 'wb' )
- pickle.dump ( openers, open_file)
- open_file.close()
- elif cmd == '!add':
- name = cmd_params [0]
- url = cmd_params [1]
- try:
- channel = cmd_params [2]
- if channel not in irc.channels:
- irc.join ( channel )
- except IndexError: channel = network_rss_channel
- feeds [ name ] = [ url, channel ]
- feeds_file = open ( 'feeds.pickle', 'wb' )
- pickle.dump ( feeds, feeds_file )
- feeds_file.close()
- irc.notice ( from_who [0], '%s has been successfully added.' % name )
- print ( 'RSS feed added.' )
- elif cmd == '!pipe':
- try:
- name = cmd_params [0]
- channel = cmd_params [1]
- if feeds [ name ] [1] != channel:
- if channel not in irc.channels:
- irc.join ( channel )
- if feeds [ name ] [1] != network_rss_channel and channel in channels:
- irc.part ( feeds [ name ] [1], 'Feeds are no longer being piped to this channel.' )
- feeds [ name ] [1] = channel
- feeds_file = open ( 'feeds.pickle', 'wb' )
- pickle.dump ( feeds, feeds_file )
- feeds_file.close()
- irc.notice ( from_who [0], '%s is now being piped to %s.' % ( name, channel ) )
- except KeyError: irc.notice ( from_who [0], 'No such feed exists.')
- elif cmd == '!remove':
- try:
- name = cmd_params [0]
- fc_count = 0
- for feed in feeds:
- if feeds [ feed ] [1] == feeds [ name ] [1]: fc_count += 1
- if feeds [ name ] [1] != network_rss_channel and fc_count == 1:
- irc.part ( feeds [ name ] [1], 'Feeds are no longer being piped to this channel.' )
- del feeds [ name ]
- feeds_file = open ( 'feeds.pickle', 'wb' )
- pickle.dump ( feeds, feeds_file )
- feeds_file.close()
- irc.notice ( from_who [0], '%s has been successfully removed.' % name )
- except KeyError: irc.notice ( from_who [0], 'No such feed exists.')
- elif cmd == '!list' and event [1] [0] != '#':
- msg = []
- for x in feeds.keys():
- msg.append ( x )
- irc.notice ( from_who [0], ' | '.join ( msg ) )
- elif cmd == '!info':
- try:
- url = feeds [ cmd_params [0] ] [0]
- channel = feeds [ cmd_params [0] ] [1]
- irc.notice ( from_who [0], '%s; URL: %s | Channel: %s' % ( cmd_params [0], url, channel ) )
- except KeyError: irc.notice ( from_who [0], 'No such feed exists.' )
- except IndexError:
- irc.notice ( from_who [0], 'Failed due to lack of arguments.' )
- else:
- if cmd == '!list' and event [1] [0] != '#':
- msg = []
- for x in feeds.keys():
- msg.append ( x )
- irc.notice ( from_who [0], ' | '.join ( msg ) )
Add Comment
Please, Sign In to add comment