from tasks import Task, TaskResult from reddit_bot import RedditBot import praw from search.search import SearchEngine import json class PostCrawlCallback: def __init__(self, task: Task): self.task = task if self.task.callback_args: self.task.callback_args = json.loads(self.task.callback_args) def run(self, task_result: TaskResult, search: SearchEngine): raise NotImplementedError class PostCrawlCallbackFactory: @staticmethod def get_callback(task: Task): if task.callback_type == "reddit_post": return RedditPostCallback(task) elif task.callback_type == "reddit_comment": return RedditCommentCallback(task) elif task.callback_type == "discord": return DiscordCallback(task) class RedditCallback(PostCrawlCallback): def __init__(self, task: Task): super().__init__(task) reddit = praw.Reddit('opendirectories-bot', user_agent='github.com/simon987/od-database (by /u/Hexahedr_n)') self.reddit_bot = RedditBot("crawled.txt", reddit) def run(self, task_result: TaskResult, search: SearchEngine): raise NotImplementedError class RedditPostCallback(RedditCallback): def run(self, task_result: TaskResult, search: SearchEngine): print("Reddit post callback for task " + str(self.task)) class RedditCommentCallback(RedditCallback): def run(self, task_result: TaskResult, search: SearchEngine): comment_id = self.task.callback_args["comment_id"] print("Editing comment comment " + comment_id) search.refresh() # Make sure the newly indexed documents are available before commenting stats = search.get_stats(self.task.website_id) message = self.reddit_bot.get_comment(stats, self.task.website_id, message="There you go! This website was crawled in `" + str(int(task_result.end_time - task_result.start_time)) + "s`") print(message) self.reddit_bot.edit(self.reddit_bot.reddit.comment(comment_id), message) class DiscordCallback(PostCrawlCallback): def run(self, task_result: TaskResult, search: SearchEngine): print("Discord callback for task " + str(self.task))