feat: Add advanced engagement submenu with user targeting and engagement types

- Replace simple 'Engage Random User' button with expandable submenu
- Add user ID input field for targeting specific users
- Add engagement type selection: random, activity-based, general, status-based
- Update API endpoints to accept user_id and engagement_type parameters
- Modify autonomous functions to support targeted engagement
- Maintain backward compatibility with random user/type selection as default
This commit is contained in:
2025-12-16 23:13:19 +02:00
parent dfcda72cc8
commit b38bdf2435
3 changed files with 217 additions and 40 deletions

View File

@@ -268,20 +268,37 @@ async def trigger_autonomous_general(guild_id: int = None):
return {"status": "error", "message": "Bot not ready"}
@app.post("/autonomous/engage")
async def trigger_autonomous_engage_user(guild_id: int = None):
async def trigger_autonomous_engage_user(guild_id: int = None, user_id: str = None, engagement_type: str = None):
# If guild_id is provided, send autonomous engagement only to that server
# If no guild_id, send to all servers (legacy behavior)
# user_id: Optional specific user to engage (Discord user ID as string)
# engagement_type: Optional type - 'activity', 'general', 'status', or None for random
if globals.client and globals.client.loop and globals.client.loop.is_running():
if guild_id is not None:
# Send to specific server only
from utils.autonomous import miku_engage_random_user_for_server
globals.client.loop.create_task(miku_engage_random_user_for_server(guild_id))
return {"status": "ok", "message": f"Autonomous user engagement queued for server {guild_id}"}
globals.client.loop.create_task(miku_engage_random_user_for_server(guild_id, user_id=user_id, engagement_type=engagement_type))
# Build detailed message
msg_parts = [f"Autonomous user engagement queued for server {guild_id}"]
if user_id:
msg_parts.append(f"targeting user {user_id}")
if engagement_type:
msg_parts.append(f"with {engagement_type} engagement")
return {"status": "ok", "message": " ".join(msg_parts)}
else:
# Send to all servers (legacy behavior)
from utils.autonomous import miku_engage_random_user
globals.client.loop.create_task(miku_engage_random_user())
return {"status": "ok", "message": "Autonomous user engagement queued for all servers"}
globals.client.loop.create_task(miku_engage_random_user(user_id=user_id, engagement_type=engagement_type))
msg_parts = ["Autonomous user engagement queued for all servers"]
if user_id:
msg_parts.append(f"targeting user {user_id}")
if engagement_type:
msg_parts.append(f"with {engagement_type} engagement")
return {"status": "ok", "message": " ".join(msg_parts)}
else:
return {"status": "error", "message": "Bot not ready"}
@@ -841,12 +858,20 @@ async def trigger_autonomous_general_for_server(guild_id: int):
return {"status": "error", "message": f"Failed to trigger autonomous message: {e}"}
@app.post("/servers/{guild_id}/autonomous/engage")
async def trigger_autonomous_engage_for_server(guild_id: int):
async def trigger_autonomous_engage_for_server(guild_id: int, user_id: str = None, engagement_type: str = None):
"""Trigger autonomous user engagement for a specific server"""
from utils.autonomous import miku_engage_random_user_for_server
try:
await miku_engage_random_user_for_server(guild_id)
return {"status": "ok", "message": f"Autonomous user engagement triggered for server {guild_id}"}
await miku_engage_random_user_for_server(guild_id, user_id=user_id, engagement_type=engagement_type)
# Build detailed message
msg_parts = [f"Autonomous user engagement triggered for server {guild_id}"]
if user_id:
msg_parts.append(f"targeting user {user_id}")
if engagement_type:
msg_parts.append(f"with {engagement_type} engagement")
return {"status": "ok", "message": " ".join(msg_parts)}
except Exception as e:
return {"status": "error", "message": f"Failed to trigger user engagement: {e}"}