Guest User

Untitled

a guest
Jun 14th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.72 KB | None | 0 0
  1. import feedparser, pickle, time, urllib, urllib2, cookielib
  2.  
  3.  
  4. admins = ( \
  5. 'LK!LK@CodeShock.org'
  6. )
  7. irc = None
  8. def set_irc_instance ( instance ):
  9. global irc
  10. irc = instance
  11.  
  12. new_instance = True
  13.  
  14. network_rss_channel = '#RSS'
  15.  
  16. openers = {}
  17. feeds = {}
  18.  
  19. def loadfeeds():
  20. global feeds, channels
  21. feeds_file = open ( 'feeds.pickle', 'rb' )
  22. feeds = pickle.load ( feeds_file )
  23. feeds_file.close()
  24. for feed in feeds:
  25. try: print ( irc.join ( feeds [ feed ] [1] ) )
  26. except irc.AlreadyInChannel: pass
  27. def loadopeners():
  28. global openers
  29. try:
  30. opener_file = open ( 'open.pickle', 'rb')
  31. openers = pickle.load ( opener_file )
  32. opener_file.close()
  33. except IOError: pass
  34.  
  35. items = {}
  36.  
  37. def feedit():
  38. global items, new_instance
  39.  
  40. new_items = {}
  41.  
  42. for rssfeed in feeds.keys():
  43. if rssfeed not in items.keys():
  44. items [ rssfeed ] = {}
  45.  
  46. new_items [ rssfeed ] = {}
  47.  
  48. try:
  49. if rssfeed in openers.keys():
  50. cj = cookielib.CookieJar()
  51. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
  52. login = urllib.urlencode(openers [rssfeed] [1])
  53. opener.open(openers[rssfeed][0], login)
  54. feedp = opener.open(feeds [rssfeed] [0]).read()
  55. else: feedp = feedparser.parse ( feeds [ rssfeed ] [0] )
  56.  
  57. for item in feedp.entries:
  58. if item.title not in items [ rssfeed ].keys():
  59. items [ rssfeed ] [ item.title ] = item.link
  60. new_items [ rssfeed ] [ item.title ] = item.link
  61. except feedparser.CharacterEncodingUnknown: pass
  62. if new_instance == True:
  63. new_instance = False
  64. else:
  65. for feed in new_items.keys():
  66. for new_item in new_items [ feed ].keys():
  67. title = new_item
  68. msg = feed + ': ' + title + ' | ' + new_items [ feed ] [ new_item ]
  69. try: irc.msg ( feeds [ feed ] [1], msg )
  70. except UnicodeEncodeError: pass
  71. except irc.IRCError: pass
  72.  
  73.  
  74. def cbuffer():
  75. global items, new_instance
  76.  
  77. while 1:
  78. time.sleep ( 3600 )
  79. feedit()
  80. items = {}
  81. new_instance = True
  82. feedit()
  83.  
  84. def feeding():
  85. while 1:
  86. time.sleep ( 300 )
  87. feedit()
  88.  
  89. def cmd_handler ( event ):
  90. global feeds, channels, openers
  91. from_who = event [0]
  92. cmd = event [2].split() [0]
  93. who = from_who [0] + '!' + from_who [1] + '@' + from_who [2]
  94. if who in admins:
  95. print ( cmd + ' command received.' )
  96. try:
  97. try: cmd_params = event [2].split() [1:]
  98. except IndexError: cmd_params = event [2].split()
  99. if cmd == '!update': feedit()
  100.  
  101. elif cmd == '!opener':
  102. name = cmd_params [0]
  103. url = cmd_params [1]
  104. username = cmd_params [2].split(':', 1)
  105. password = cmd_params [3].split(':', 1)
  106. openers [ name ] = [ url, {username[0]:username[1], password[0]:password[1] } ]
  107. open_file = open ( 'feeds.pickle', 'wb' )
  108. pickle.dump ( openers, open_file)
  109. open_file.close()
  110.  
  111. elif cmd == '!opener-del':
  112. name = cmd_params [0]
  113. del openers [ name ]
  114. open_file = open ( 'feeds.pickle', 'wb' )
  115. pickle.dump ( openers, open_file)
  116. open_file.close()
  117.  
  118. elif cmd == '!add':
  119. name = cmd_params [0]
  120. url = cmd_params [1]
  121. try:
  122. channel = cmd_params [2]
  123. if channel not in irc.channels:
  124. irc.join ( channel )
  125. except IndexError: channel = network_rss_channel
  126. feeds [ name ] = [ url, channel ]
  127. feeds_file = open ( 'feeds.pickle', 'wb' )
  128. pickle.dump ( feeds, feeds_file )
  129. feeds_file.close()
  130. irc.notice ( from_who [0], '%s has been successfully added.' % name )
  131. print ( 'RSS feed added.' )
  132. elif cmd == '!pipe':
  133. try:
  134. name = cmd_params [0]
  135. channel = cmd_params [1]
  136. if feeds [ name ] [1] != channel:
  137. if channel not in irc.channels:
  138. irc.join ( channel )
  139. if feeds [ name ] [1] != network_rss_channel and channel in channels:
  140. irc.part ( feeds [ name ] [1], 'Feeds are no longer being piped to this channel.' )
  141. feeds [ name ] [1] = channel
  142. feeds_file = open ( 'feeds.pickle', 'wb' )
  143. pickle.dump ( feeds, feeds_file )
  144. feeds_file.close()
  145. irc.notice ( from_who [0], '%s is now being piped to %s.' % ( name, channel ) )
  146. except KeyError: irc.notice ( from_who [0], 'No such feed exists.')
  147. elif cmd == '!remove':
  148. try:
  149. name = cmd_params [0]
  150. fc_count = 0
  151. for feed in feeds:
  152. if feeds [ feed ] [1] == feeds [ name ] [1]: fc_count += 1
  153. if feeds [ name ] [1] != network_rss_channel and fc_count == 1:
  154. irc.part ( feeds [ name ] [1], 'Feeds are no longer being piped to this channel.' )
  155. del feeds [ name ]
  156. feeds_file = open ( 'feeds.pickle', 'wb' )
  157. pickle.dump ( feeds, feeds_file )
  158. feeds_file.close()
  159. irc.notice ( from_who [0], '%s has been successfully removed.' % name )
  160. except KeyError: irc.notice ( from_who [0], 'No such feed exists.')
  161. elif cmd == '!list' and event [1] [0] != '#':
  162. msg = []
  163. for x in feeds.keys():
  164. msg.append ( x )
  165. irc.notice ( from_who [0], ' | '.join ( msg ) )
  166. elif cmd == '!info':
  167. try:
  168. url = feeds [ cmd_params [0] ] [0]
  169. channel = feeds [ cmd_params [0] ] [1]
  170. irc.notice ( from_who [0], '%s; URL: %s | Channel: %s' % ( cmd_params [0], url, channel ) )
  171. except KeyError: irc.notice ( from_who [0], 'No such feed exists.' )
  172. except IndexError:
  173. irc.notice ( from_who [0], 'Failed due to lack of arguments.' )
  174.  
  175. else:
  176. if cmd == '!list' and event [1] [0] != '#':
  177. msg = []
  178. for x in feeds.keys():
  179. msg.append ( x )
  180. irc.notice ( from_who [0], ' | '.join ( msg ) )
Add Comment
Please, Sign In to add comment