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:
41
bot/api.py
41
bot/api.py
@@ -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}"}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user