diff --git a/bot.py b/bot.py index 8b1e2aa..5153915 100644 --- a/bot.py +++ b/bot.py @@ -1,10 +1,12 @@ import praw +import logging import requests import bs4 import html2text import time, os import bmemcached import re +from prawcore import NotFound # from https://github.com/arxiv-vanity/arxiv-vanity/blob/master/arxiv_vanity/scraper/arxiv_ids.py ARXIV_ID_PATTERN = r'([a-z\-]+(?:\.[A-Z]{2})?/\d{7}|\d+\.\d+)(v\d+)?' @@ -28,7 +30,10 @@ def get_bot(): r = get_bot() subreddit = r.subreddit('machinelearning') +target_subreddit = r.subreddit('mlresearch') +if r.read_only == False: + print("Connected and running.") # alreadydone = set() @@ -55,29 +60,78 @@ def scrape_arxiv(arxiv_id): def comment(cache): - print(time.asctime(), "searching") + # print(time.asctime(), "searching") try: all_posts = subreddit.new(limit=100) for post in all_posts: match = ARXIV_URL_RE.search(post.url) if match: arxiv_id = match.group(1) - if cache.get(post.id) and cache.get(post.id) is 'T': - print "Parsed this post already: %s"%(post.permalink) - continue - for comment in post.comments: - if str(comment.author) == 'arXiv_abstract_bot': - break - else: - response = scrape_arxiv(arxiv_id) - post.reply(response) - cache.set(post.id, 'T') - print "Parsed post: %s"%(post.permalink) - print(arxiv_id, response) - time.sleep(10) + + # crosspost + print('found', arxiv_id) + xpost(['r/researchml'], post) + + # if cache.get(post.id) and cache.get(post.id) is 'T': + # print "Parsed this post already: %s"%(post.permalink) + # continue + # for comment in post.comments: + # if str(comment.author) == 'arXiv_abstract_bot': + # break + # else: + # response = scrape_arxiv(arxiv_id) + # post.reply(response) + # cache.set(post.id, 'T') + # print "Parsed post: %s"%(post.permalink) + # print(arxiv_id, response) + # time.sleep(10) except Exception as error: print(error) +def xpost(subs, originalpost): + # originalpost = where.submission + newtitle = "(X-Post r/" + str(originalpost.subreddit.display_name) + ") " + originalpost.title + print("New post: " + str(newtitle)) + link = "https://www.reddit.com" + str(originalpost.permalink) + workedsubs = [] + failedsubs = [] + wasError = False + for workingsub in subs: + exists = True + try: + r.subreddits.search_by_name(workingsub[2:], exact=True) + except NotFound: + logging.error("Failed to post") + exists = False + if exists == True: + subreddit = r.subreddit(workingsub[2:]) + try: + subreddit.submit(newtitle, url=link, resubmit=True, send_replies=False) + workedsubs.append(str(workingsub)) + print("Posting: " + str(newtitle) + " to " + str(workingsub)) + except praw.exceptions.APIException: + logging.error("Failed to post") + wasError = True + break + else: + failedsubs.append(str(workingsub)) + if not wasError: + print(workedsubs,failedsubs) + # reply(workedsubs,failedsubs,where) + pass + else: + response = "" + if workedsubs: + response = "I was able to crosspost in " + for i in workedsubs: + response = response + str(i) + " and " + response = response[:-5] + ", but I was rate-limited on the others." + print(response) + else: + response = "Sorry, I was rate-limited, and I couldn't post." + print(response) + # where.reply(str(response) + " Make sure to give me karma to prevent that in the future.") + def get_memcache_client(): # Store IDs of comments that the bot has already replied to.