Add the send direct message route for the REST API.
This commit is contained in:
parent
e12f8497f4
commit
20b2702fcf
1 changed files with 44 additions and 0 deletions
|
|
@ -248,6 +248,50 @@ def get_history():
|
|||
# Return the full message history with timestamps
|
||||
return jsonify({"messages": message_history[chat_room]})
|
||||
|
||||
@app.route('/send_direct_message', methods=['POST'])
|
||||
def send_direct_message():
|
||||
"""Send a direct message to a specific user."""
|
||||
data = request.json
|
||||
sender_username = data.get('sender_username')
|
||||
target_username = data.get('target_username')
|
||||
message = data.get('message')
|
||||
|
||||
if not sender_username or not target_username or not message:
|
||||
return jsonify({"error": "Sender username, target username, and message are required"}), 400
|
||||
|
||||
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
# Check if the target is a socket-based client
|
||||
target_sock = None
|
||||
for s, info in client_info.items():
|
||||
if not info.get("is_websocket") and info.get("username") == target_username:
|
||||
target_sock = s
|
||||
break
|
||||
|
||||
# Check if the target is a WebSocket client
|
||||
target_websocket_sid = None
|
||||
for sid, info in client_info.items():
|
||||
if info.get("is_websocket") and info.get("username") == target_username:
|
||||
target_websocket_sid = sid
|
||||
break
|
||||
|
||||
if target_sock:
|
||||
# Send the direct message to the socket-based client
|
||||
target_sock.send(f"[{timestamp}] DM from {sender_username}: {message}\n".encode('utf-8'))
|
||||
return jsonify({"status": "Direct message sent to socket-based client"}), 200
|
||||
elif target_websocket_sid:
|
||||
# Send the direct message to the WebSocket client
|
||||
socketio.emit('message', {
|
||||
'username': sender_username,
|
||||
'message': message,
|
||||
'timestamp': timestamp,
|
||||
'chat_room': 'Direct Message'
|
||||
}, to=target_websocket_sid)
|
||||
return jsonify({"status": "Direct message sent to WebSocket client"}), 200
|
||||
else:
|
||||
# Target user not found
|
||||
return jsonify({"error": "Target user not found"}), 404
|
||||
|
||||
# WebSocket event handlers
|
||||
@socketio.on('connect')
|
||||
def handle_connect():
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue