import praw from config import get_reddit, Config import time class ModBot: def __init__(self): self.reddit = get_reddit() self.subreddit = self.reddit.subreddit(Config.SUBREDDIT) self.wiki_page = Config.WIKI_PAGE self.triggers = [] self.comments = [] def fetch_wiki_config(self): import yaml try: wiki_content = self.subreddit.wiki[self.wiki_page].content_md # Example Automoderator YAML format: # triggers: # - trigger: help # comment: | # Thank you for your report! # This post is now approved. # - trigger: question # comment: | # This post has been approved. config = yaml.safe_load(wiki_content) self.triggers = [] self.comments = [] for entry in config.get('triggers', []): self.triggers.append(entry.get('trigger', '').strip()) self.comments.append(entry.get('comment', '').strip()) except Exception as e: print(f"Error fetching wiki config: {e}") def run(self): print("ModBot started. Watching for mod reports...") while True: self.fetch_wiki_config() for report in self.subreddit.mod.reports(limit=25): self.handle_report(report) time.sleep(30) # Poll every 30 seconds def handle_report(self, report): if not hasattr(report, 'mod_reports') or not report.mod_reports: return for mod_report in report.mod_reports: report_text = mod_report[0].lower() for idx, trigger in enumerate(self.triggers): if trigger.lower() in report_text: self.approve_and_comment(report, self.comments[idx]) break def approve_and_comment(self, submission, comment_text): try: submission.mod.approve() comment = submission.reply(comment_text) comment.mod.distinguish(sticky=True) print(f"Approved and commented on: {submission.id}") except Exception as e: print(f"Error approving/commenting: {e}") if __name__ == "__main__": bot = ModBot() bot.run()