4.7 KiB
DM Interaction Analysis Feature
Overview
This feature automatically analyzes user interactions with Miku in DMs and reports significant positive or negative interactions to the bot owner.
How It Works
-
Automatic Analysis: Once every 24 hours (at 2:00 AM), the system analyzes DM conversations from the past 24 hours.
-
Sentiment Evaluation: Each user's messages are evaluated for:
- Positive behaviors: Kindness, affection, respect, genuine interest, compliments, supportive messages, love
- Negative behaviors: Rudeness, harassment, inappropriate requests, threats, abuse, disrespect, mean comments
-
Reporting: If an interaction is significantly positive (score ≥ 5) or negative (score ≤ -3), Miku will send a report to the bot owner via Discord DM.
-
One Report Per User Per Day: Once a user has been reported, they won't be reported again for 24 hours (but their report is still saved).
-
Persistent Storage: All analysis reports are saved to
memory/dm_reports/with filenames like{user_id}_{timestamp}.json
Setup
Environment Variables
Add your Discord user ID to the environment variables:
OWNER_USER_ID=your_discord_user_id_here
Without this variable, the DM analysis feature will be disabled.
Docker Environment
If using docker-compose, add to your environment configuration:
environment:
- OWNER_USER_ID=123456789012345678
Report Format
Reports sent to the owner include:
- User information (username, ID, message count)
- Overall sentiment (positive/neutral/negative)
- Sentiment score (-10 to +10)
- Miku's feelings about the interaction (in her own voice)
- Notable moments or quotes
- Key behaviors observed
API Endpoints
Manual Analysis Trigger
POST /dms/analysis/run
Manually triggers the daily analysis (analyzes one user and reports if significant).
Analyze Specific User
POST /dms/users/{user_id}/analyze
Analyzes a specific user's interactions and sends a report if significant.
Get Recent Reports
GET /dms/analysis/reports?limit=20
Returns the most recent analysis reports.
Get User-Specific Reports
GET /dms/analysis/reports/{user_id}?limit=10
Returns all analysis reports for a specific user.
File Structure
memory/
├── dm_reports/
│ ├── 123456789_20251030_143022.json # Individual reports
│ ├── 987654321_20251030_150133.json
│ └── reported_today.json # Tracks which users have been reported today
└── dms/
├── 123456789.json # Original DM logs
└── 987654321.json
Report File Format
Each report JSON file contains:
{
"user_id": 123456789,
"username": "SomeUser",
"overall_sentiment": "positive",
"sentiment_score": 8,
"key_behaviors": [
"Expressed genuine affection",
"Asked thoughtful questions",
"Showed appreciation"
],
"your_feelings": "I really enjoyed our conversation! They're so sweet and kind.",
"notable_moment": "When they said 'You always make my day better'",
"should_report": true,
"analyzed_at": "2025-10-30T14:30:22.123456",
"message_count": 15
}
Scheduled Behavior
- Daily Analysis: Runs at 2:00 AM every day
- Rate Limiting: Only one user is reported per day to avoid spam
- Message Threshold: Users must have at least 3 messages in the last 24 hours to be analyzed
Privacy & Data Management
- All reports are stored locally and never sent to external services (except to the owner's Discord DM)
- Reports include conversation context but are only accessible to the bot owner
- The bot owner can delete user data at any time using the existing DM management API endpoints
- Reports are kept indefinitely for record-keeping purposes
Testing
To test the feature manually:
- Set your
OWNER_USER_IDenvironment variable - Restart the bot
- Have a conversation with Miku in DMs (at least 3 messages)
- Call the analysis endpoint:
POST /dms/users/{your_user_id}/analyze - Check your Discord DMs for the report
Troubleshooting
Feature not working?
- Check that
OWNER_USER_IDis set correctly - Look for initialization messages in bot logs: "📊 DM Interaction Analyzer initialized"
- Verify the scheduled task is registered: "⏰ Scheduled daily DM analysis at 2:00 AM"
Not receiving reports?
- Ensure users have sent at least 3 messages in the last 24 hours
- Check that interactions are significant enough (score ≥ 5 or ≤ -3)
- Verify you haven't blocked the bot's DMs
- Check the bot logs for error messages
Want to see all reports?
- Use the API endpoint:
GET /dms/analysis/reports - Or check the
memory/dm_reports/directory directly