diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/umabot/rules/umaddit_removal.py | 56 |
1 files changed, 37 insertions, 19 deletions
diff --git a/src/umabot/rules/umaddit_removal.py b/src/umabot/rules/umaddit_removal.py index 759c784..91562d4 100644 --- a/src/umabot/rules/umaddit_removal.py +++ b/src/umabot/rules/umaddit_removal.py @@ -1,4 +1,4 @@ -"""Rule to remove posts containing umaddit references.""" +"""Rule to remove posts containing umaddit and umagusher references.""" import re import praw.models @@ -6,25 +6,31 @@ from .base import Rule class UmadditRemovalRule(Rule): - """Removes posts containing umaddit subreddit references (r/umaddit, /umaddit).""" + """Removes posts containing umaddit or umagusher subreddit references (r/umaddit, /umaddit, r/umagusher, /umagusher).""" def __init__(self, config): - """Initialize the umaddit removal rule.""" + """Initialize the umaddit/umagusher removal rule.""" super().__init__(config) - # Regex pattern to match subreddit references to umaddit - # Matches: r/umaddit, /umaddit (case-insensitive) - # Word boundary after umaddit ensures we don't match "umaddit123" or similar + # Regex patterns to match subreddit references + # Umaddit: only matches with subreddit prefix (r/umaddit, /umaddit) + # Umagusher: matches with or without prefix, and handles whitespace variations (uma gusher, uma-gusher, etc.) self.umaddit_pattern = re.compile(r'(?:r/|/)umaddit\b', re.IGNORECASE) + # Match umagusher with prefix, without prefix, or with whitespace variations + # Pattern allows: r/umagusher, /umagusher, umagusher, uma gusher, uma-gusher, uma_gusher, umagusher123 + # Uses negative lookbehind to prevent false matches like "forumagusher" + # No word boundary at end to catch variations like "umagusher123" + self.umagusher_pattern = re.compile(r'(?<![a-z])(?:r/|/)?uma[\s\-_]?gusher', re.IGNORECASE) def should_remove(self, submission: praw.models.Submission) -> bool: - """Check if a post contains umaddit subreddit references.""" + """Check if a post contains umaddit or umagusher subreddit references.""" if not submission.author: return False - # Check if the post contains umaddit subreddit references - if self._contains_umaddit_reference(submission): + # Check if the post contains umaddit or umagusher subreddit references + reference_type = self._contains_forbidden_reference(submission) + if reference_type: self.logger.info( - f"Post by {submission.author.name} silently removed for containing umaddit subreddit reference " + f"Post by {submission.author.name} silently removed for containing {reference_type} subreddit reference " f"(post ID: {submission.id})" ) return True @@ -32,11 +38,15 @@ class UmadditRemovalRule(Rule): return False def get_removal_message(self, submission: praw.models.Submission) -> str: - """Get the umaddit removal message - silent removal.""" + """Get the umaddit/umagusher removal message - silent removal.""" return "" # Silent removal - no message sent - def _contains_umaddit_reference(self, submission: praw.models.Submission) -> bool: - """Check if a submission contains any umaddit subreddit references.""" + def _contains_forbidden_reference(self, submission: praw.models.Submission) -> str: + """Check if a submission contains any umaddit or umagusher subreddit references. + + Returns: + str: The type of reference found ('umaddit' or 'umagusher'), or empty string if none found. + """ try: # Get all text content to check content_to_check = [] @@ -53,19 +63,27 @@ class UmadditRemovalRule(Rule): if submission.url: content_to_check.append(submission.url) - # Check each piece of content for umaddit subreddit references + # Check each piece of content for forbidden subreddit references for content in content_to_check: if content: - # Use regex search + # Check for umaddit references match = self.umaddit_pattern.search(content) if match: self.logger.info( f"Found umaddit subreddit reference '{match.group()}' in post {submission.id}" ) - return True + return "umaddit" + + # Check for umagusher references + match = self.umagusher_pattern.search(content) + if match: + self.logger.info( + f"Found umagusher subreddit reference '{match.group()}' in post {submission.id}" + ) + return "umagusher" - return False + return "" except Exception as e: - self.logger.error(f"Error checking umaddit references for submission {submission.id}: {e}") - return False
\ No newline at end of file + self.logger.error(f"Error checking forbidden references for submission {submission.id}: {e}") + return ""
\ No newline at end of file |