aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--src/umabot/rules/intelligent_moderator_base.py10
-rw-r--r--src/umabot/rules/intelligent_roleplay_moderator.py22
-rwxr-xr-xtest_discord_embed.py4
4 files changed, 19 insertions, 19 deletions
diff --git a/README.md b/README.md
index 00ffec9..c46a625 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@ A modular Reddit bot for automated post moderation built with Python and PRAW.
The bot features an advanced AI-powered in-character moderator that:
- **Auto-Flairing**: Automatically changes in-character posts to "Art" flair when they're primarily showcasing artwork
-- **Quality Control**: Removes low-effort in-character posts while preserving high-quality content
+- **Quality Control**: Removes brief in-character posts while preserving high-quality content
- **Smart Evaluation**: Uses GPT-5-nano to analyze post content, creativity, effort, and engagement potential
- **User Communication**: Sends detailed mod mail explaining decisions and providing guidance
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')
diff --git a/test_discord_embed.py b/test_discord_embed.py
index 0a9850f..d28da88 100755
--- a/test_discord_embed.py
+++ b/test_discord_embed.py
@@ -58,7 +58,7 @@ def test_discord_embed():
submission_id="test456",
author="anotheruser",
title="Short post with minimal content",
- reason="Low-effort content, short length, no plot development, lacks creativity, minimal effort, no character development, poor quality content that doesn't meet community standards",
+ reason="Content needs more development, short length, no plot development, lacks creativity, minimal detail, no character development, content that doesn't meet community standards",
post_url="https://reddit.com/r/test/comments/test456/"
)
@@ -74,7 +74,7 @@ def test_discord_embed():
submission_id="test789",
author="longreasonuser",
title="Another test post",
- reason="This is a very long reason that should be truncated in the actual implementation because the intelligent moderator truncates reasons to 100 characters plus ellipsis when they are too long, just like this one which is definitely longer than 100 characters and should demonstrate the truncation behavior",
+ reason="This is a very long reason that should be truncated in the actual implementation because the intelligent moderator truncates reasons to 100 characters plus ellipsis when they are too long, just like this one which is definitely longer than 100 characters and should demonstrate the truncation behavior for content that needs more development",
post_url="https://reddit.com/r/test/comments/test789/"
)