aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-09-21 21:48:35 -0700
committerFuwn <[email protected]>2025-09-21 21:48:35 -0700
commit48b9f14b4a316f35904e1760e8fd873ca478750d (patch)
tree94e426a5d6b8854306838f31cac9846fd20c933b
parentfeat(rmr): Allow in-character posts without media if lengthy (diff)
downloadumabot-48b9f14b4a316f35904e1760e8fd873ca478750d.tar.xz
umabot-48b9f14b4a316f35904e1760e8fd873ca478750d.zip
feat(rules): umaddit_removal
-rw-r--r--src/umabot/bot.py3
-rw-r--r--src/umabot/rules/__init__.py3
-rw-r--r--src/umabot/rules/umaddit_removal.py71
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