aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-09-21 15:30:44 -0700
committerFuwn <[email protected]>2025-09-21 15:30:44 -0700
commit9e9ef2ef28015336830ae1e1b888b0a233ce3b84 (patch)
tree2e81722b13cb0c7f3ca277e81cb5d864919fa8ac /src
parentfix(base): NO_TEXT error handling (diff)
downloadumabot-9e9ef2ef28015336830ae1e1b888b0a233ce3b84.tar.xz
umabot-9e9ef2ef28015336830ae1e1b888b0a233ce3b84.zip
feat(irm): Rephrase low-effort content
Diffstat (limited to 'src')
-rw-r--r--src/umabot/rules/intelligent_moderator_base.py10
-rw-r--r--src/umabot/rules/intelligent_roleplay_moderator.py22
2 files changed, 16 insertions, 16 deletions
diff --git a/src/umabot/rules/intelligent_moderator_base.py b/src/umabot/rules/intelligent_moderator_base.py
index a78359c..781057a 100644
--- a/src/umabot/rules/intelligent_moderator_base.py
+++ b/src/umabot/rules/intelligent_moderator_base.py
@@ -21,7 +21,7 @@ class IntelligentModeratorBase(ABC):
You are an expert moderator for an in-character subreddit. Your job is to evaluate in-character posts and determine:
1. Whether this post would be better flaired as "Art" instead of "In Character"
-2. Whether this is low-effort content that should be removed
+2. Whether this content needs more development and should be removed
For each post, respond with a JSON object containing:
{{
@@ -39,10 +39,10 @@ Guidelines for Art vs In-Character:
- Having media (images/videos) does NOT automatically make it an Art post - consider the primary purpose and narrative context
- Posts that describe building, creating, or doing something from a character's perspective should stay In Character even if they show the result
-Guidelines for Low-Effort:
-- A post is "low-effort" if it lacks substance, creativity, or meaningful in-character content
+Guidelines for Content Needing Development:
+- Content "needs more development" if it lacks substance, creativity, or meaningful in-character content
- Consider factors like: word count, creativity, effort, engagement potential, originality
-- Be strict but fair - err on the side of allowing content unless it's clearly low quality
+- Be strict but fair - err on the side of allowing content unless it's clearly brief or lacking development
- High confidence (0.8+) for clear cases, lower confidence for borderline cases
Post to evaluate:
@@ -180,7 +180,7 @@ Word Count: {word_count}
# Change flair to Art and notify user (priority over removal)
actions.append("CHANGE_FLAIR_TO_ART")
elif evaluation["is_low_effort"]:
- # Remove low-effort post and notify user
+ # Remove brief content post and notify user
actions.append("REMOVE_POST")
else:
# Post is good quality roleplay - allow it
diff --git a/src/umabot/rules/intelligent_roleplay_moderator.py b/src/umabot/rules/intelligent_roleplay_moderator.py
index 50aa7d6..a0d29cc 100644
--- a/src/umabot/rules/intelligent_roleplay_moderator.py
+++ b/src/umabot/rules/intelligent_roleplay_moderator.py
@@ -43,8 +43,8 @@ class IntelligentRoleplayModerator(Rule, IntelligentModeratorBase):
return False # Don't remove, just change flair
elif evaluation["is_low_effort"]:
- # Remove low-effort post and notify user
- self._notify_low_effort_removal(submission, evaluation)
+ # Remove brief post and notify user
+ self._notify_brief_content_removal(submission, evaluation)
return True # Remove the post
# Post is good quality roleplay - allow it
@@ -55,7 +55,7 @@ class IntelligentRoleplayModerator(Rule, IntelligentModeratorBase):
return False # Don't remove on error
def get_removal_message(self, submission: praw.models.Submission) -> str:
- """Get removal message for low-effort posts."""
+ """Get removal message for brief content posts."""
return "" # We send mod mail instead of commenting
# Abstract method implementations for IntelligentModeratorBase
@@ -156,8 +156,8 @@ class IntelligentRoleplayModerator(Rule, IntelligentModeratorBase):
except Exception as e:
self.logger.error(f"Error sending art flair notification for {submission.id}: {e}")
- def _notify_low_effort_removal(self, submission: praw.models.Submission, evaluation: dict) -> None:
- """Send mod mail about low-effort removal."""
+ def _notify_brief_content_removal(self, submission: praw.models.Submission, evaluation: dict) -> None:
+ """Send mod mail about brief content removal."""
try:
username = submission.author.name
subject = "Your in-character post has been removed"
@@ -165,7 +165,7 @@ class IntelligentRoleplayModerator(Rule, IntelligentModeratorBase):
# Format reasoning based on configuration
formatted_reasoning = self._format_reasoning(evaluation)
- message = f"Hello u/{username},\n\nYour in-character post has been removed because it was determined to be low-effort content."
+ message = f"Hello u/{username},\n\nYour in-character post has been removed because it needs more development to meet our community standards."
# Add reasoning if configured
if formatted_reasoning:
@@ -174,12 +174,12 @@ class IntelligentRoleplayModerator(Rule, IntelligentModeratorBase):
message += f"\n\nPost link: https://reddit.com{submission.permalink}\n\nTo improve your in-character posts, consider:\n- Adding more detailed descriptions\n- Creating engaging scenarios\n- Including meaningful character interactions\n- Ensuring your content adds value to the community\n\nIf you enjoy active roleplay, join the official r/okbuddyumamusume Discord server! It features a comprehensive layout of channels, forums, roles, bots, events, and more! https://discord.gg/okbuddyumamusume\n\nIf you believe this was done in error, please contact the moderators via Mod Mail.\n\nThank you for understanding!"
submission.author.message(subject, message)
- self.logger.info(f"Sent low-effort removal notification to {username}")
+ self.logger.info(f"Sent brief content removal notification to {username}")
# Log to Discord if configured
if self.discord_client:
# Get brief reason for Discord log
- brief_reason = "Low-effort content"
+ brief_reason = "Needs more development"
if formatted_reasoning:
brief_reason = formatted_reasoning[:100] + "..." if len(formatted_reasoning) > 100 else formatted_reasoning
@@ -193,7 +193,7 @@ class IntelligentRoleplayModerator(Rule, IntelligentModeratorBase):
)
except Exception as e:
- self.logger.error(f"Error sending low-effort notification for {submission.id}: {e}")
+ self.logger.error(f"Error sending brief content notification for {submission.id}: {e}")
def _format_reasoning(self, evaluation: dict, is_art_flair_change: bool = False) -> str:
"""Format reasoning based on the configured reasoning level."""
@@ -222,7 +222,7 @@ class IntelligentRoleplayModerator(Rule, IntelligentModeratorBase):
# Extract key issues
issues = []
- # Check for common low-effort indicators
+ # Check for common brief content indicators
if any(word in reasoning_lower for word in ['short', 'brief', 'minimal', 'little']):
issues.append('short')
if any(word in reasoning_lower for word in ['word count', 'words', 'length']):
@@ -232,7 +232,7 @@ class IntelligentRoleplayModerator(Rule, IntelligentModeratorBase):
issues.append('no plot development')
if any(word in reasoning_lower for word in ['effort', 'substance', 'content']):
if 'low' in reasoning_lower or 'lack' in reasoning_lower:
- issues.append('low-effort')
+ issues.append('needs more development')
if any(word in reasoning_lower for word in ['creativity', 'originality']):
if 'lack' in reasoning_lower or 'no' in reasoning_lower:
issues.append('lacks creativity')