diff options
| author | Fuwn <[email protected]> | 2025-09-21 21:48:35 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-09-21 21:48:35 -0700 |
| commit | 48b9f14b4a316f35904e1760e8fd873ca478750d (patch) | |
| tree | 94e426a5d6b8854306838f31cac9846fd20c933b | |
| parent | feat(rmr): Allow in-character posts without media if lengthy (diff) | |
| download | umabot-48b9f14b4a316f35904e1760e8fd873ca478750d.tar.xz umabot-48b9f14b4a316f35904e1760e8fd873ca478750d.zip | |
feat(rules): umaddit_removal
| -rw-r--r-- | src/umabot/bot.py | 3 | ||||
| -rw-r--r-- | src/umabot/rules/__init__.py | 3 | ||||
| -rw-r--r-- | src/umabot/rules/umaddit_removal.py | 71 |
3 files changed, 75 insertions, 2 deletions
diff --git a/src/umabot/bot.py b/src/umabot/bot.py index 5b593ab..4b13aab 100644 --- a/src/umabot/bot.py +++ b/src/umabot/bot.py @@ -9,7 +9,7 @@ from socketserver import ThreadingMixIn from loguru import logger from .config import Config -from .rules import SpamDetector, IntelligentRoleplayModerator, RoleplayMediaRequiredRule +from .rules import SpamDetector, IntelligentRoleplayModerator, RoleplayMediaRequiredRule, UmadditRemovalRule # from .rules import StaticRoleplayLimiter # Disabled by default - uncomment to use static limiting @@ -76,6 +76,7 @@ class UmaBot: # Initialize rules self.rules = [ SpamDetector(config), + UmadditRemovalRule(config), # Remove umaddit references RoleplayMediaRequiredRule(config), # Require media for roleplay posts IntelligentRoleplayModerator(config, self.subreddit), # Intelligent roleplay moderation # RoleplayWordCountRule(config), # Disabled - using intelligent moderator diff --git a/src/umabot/rules/__init__.py b/src/umabot/rules/__init__.py index e429070..1c3acc1 100644 --- a/src/umabot/rules/__init__.py +++ b/src/umabot/rules/__init__.py @@ -7,5 +7,6 @@ from .roleplay_media_required import RoleplayMediaRequiredRule from .roleplay_word_count import RoleplayWordCountRule from .intelligent_roleplay_moderator import IntelligentRoleplayModerator from .intelligent_moderator_base import IntelligentModeratorBase +from .umaddit_removal import UmadditRemovalRule -__all__ = ["Rule", "SpamDetector", "RoleplayLimiter", "StaticRoleplayLimiter", "RoleplayMediaRequiredRule", "RoleplayWordCountRule", "IntelligentRoleplayModerator", "IntelligentModeratorBase"] +__all__ = ["Rule", "SpamDetector", "RoleplayLimiter", "StaticRoleplayLimiter", "RoleplayMediaRequiredRule", "RoleplayWordCountRule", "IntelligentRoleplayModerator", "IntelligentModeratorBase", "UmadditRemovalRule"] diff --git a/src/umabot/rules/umaddit_removal.py b/src/umabot/rules/umaddit_removal.py new file mode 100644 index 0000000..d4578df --- /dev/null +++ b/src/umabot/rules/umaddit_removal.py @@ -0,0 +1,71 @@ +"""Rule to remove posts containing umaddit references.""" + +import re +import praw.models +from .base import Rule + + +class UmadditRemovalRule(Rule): + """Removes posts containing umaddit subreddit references (r/umaddit, /umaddit).""" + + def __init__(self, config): + """Initialize the umaddit removal rule.""" + super().__init__(config) + # Regex pattern to match subreddit references to umaddit + # Matches: r/umaddit, /umaddit (case-insensitive) + # Word boundaries ensure we don't match "forumaddit" or similar + self.umaddit_pattern = re.compile(r'\b(?:r/|/)umaddit\b', re.IGNORECASE) + + def should_remove(self, submission: praw.models.Submission) -> bool: + """Check if a post contains umaddit subreddit references.""" + if not submission.author: + return False + + # Check if the post contains umaddit subreddit references + if self._contains_umaddit_reference(submission): + self.logger.info( + f"Post by {submission.author.name} silently removed for containing umaddit subreddit reference " + f"(post ID: {submission.id})" + ) + return True + + return False + + def get_removal_message(self, submission: praw.models.Submission) -> str: + """Get the umaddit 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.""" + try: + # Get all text content to check + content_to_check = [] + + # Add title if present + if submission.title: + content_to_check.append(submission.title) + + # Add body text if present + if submission.selftext: + content_to_check.append(submission.selftext) + + # Add URL if present + if submission.url: + content_to_check.append(submission.url) + + # Check each piece of content for umaddit subreddit references + for content in content_to_check: + if content: + # Use regex search + 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 False + + 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 |