Как я могу включить статус сообщения в свой проектPython

Программы на Python
Ответить
Anonymous
 Как я могу включить статус сообщения в свой проект

Сообщение Anonymous »

Я разрабатываю веб-приложение для чата в режиме реального времени, и пользователи могут отправлять личные сообщения другим зарегистрированным пользователям. Я хочу обновить статус сообщения в форме «отправлено», когда клиент неактивен. в его аккаунте «пересылается», когда он входит в свою учетную запись, и «просматривается», когда он заходит в чат.

Код: Выделить всё

from flask import Flask, render_template, request, session, redirect, url_for
from flask_socketio import join_room, leave_room, send, SocketIO
from datetime import datetime
import uuid

app = Flask(__name__)
app.config["SECRET_KEY"] = "hjhjsdahhds"
socketio = SocketIO(app)

users = {}
rooms = {}
active_users = {}

@app.route("/", methods=["GET", "POST"])
def home():
if request.method == "POST":
if "register" in request.form:
username = request.form.get("username")
if username in (user["username"] for user in users.values()):
return render_template("home.html", error="Bu kullanıcı adı zaten mevcut.")
user_id = str(uuid.uuid4())
users[user_id] = {"username": username}
return render_template("home.html", success="Kayıt başarılı! Giriş yapabilirsiniz.")

elif "login" in request.form:
username = request.form.get("username")
user = next((uid for uid, u in users.items() if u["username"] == username), None)
if not user:
return render_template("home.html", error="Kullanıcı bulunamadı.")
session["user_id"] = user
session["username"] = username
return redirect(url_for("user_list"))

return render_template("home.html")

@app.route("/user_list")
def user_list():
if "username" not in session:
return redirect(url_for("home"))

other_users = {uid: u["username"] for uid, u in users.items() if uid != session["user_id"]}
return render_template("user_list.html", users=other_users, username=session["username"], active_users=active_users)

@app.route("/private_chat/")
def private_chat(target_user_id):
if "username"  not in session:
return redirect(url_for("home"))

if target_user_id not in users:
return redirect(url_for("user_list"))

room_id = f"{min(session['user_id'], target_user_id)}-{max(session['user_id'], target_user_id)}"
if room_id not in rooms:
rooms[room_id] = []

session["room_id"] = room_id
target_username = users[target_user_id]["username"]
messages = rooms[room_id]
return render_template("private_chat.html", room_id=room_id, messages=messages, target_user=target_username)

@socketio.on("connect")
def handle_connect():
user_id = session.get("user_id")
username = session.get("username")
if user_id and username:
active_users[user_id] = username
socketio.emit("active_users", active_users)

@socketio.on("disconnect")
def handle_disconnect():
user_id = session.get("user_id")
if user_id in active_users:
active_users.pop(user_id)
socketio.emit("active_users", active_users)

@socketio.on("message")
def handle_message(data):
room_id = session.get("room_id")
if not room_id:
return

message_data = {
"name": session["username"],
"message": data["message"],
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
rooms[room_id].append(message_data)
send(message_data, to=room_id)

@socketio.on("join")
def on_join():
room_id = session.get("room_id")
if not room_id:
return
join_room(room_id)
send({"name": session["username"], "message": "sohbete katıldı"}, to=room_id)

@socketio.on("broadcast_message")
def handle_broadcast_message(data):
message_data = {
"name": "Sistem",
"message": data["message"],
"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
for user_id in active_users:
room_id = f"{min(session['user_id'], user_id)}-{max(session['user_id'], user_id)}"
rooms.setdefault(room_id, []).append(message_data)
socketio.emit("message", message_data, room=room_id)

if __name__ == "__main__":
socketio.run(app, debug=True)

прежде всего статус сообщения должен видеть только отправитель, по умолчанию статус сообщения отправляется, но если получатель был подключен к сокету в момент отправки сообщения или после оно было отправлено, то есть, если он вошел в список активных пользователей, статус всех сообщений, отправленных ему в неактивном состоянии, должен обновиться как «переадресовано», если пользователь подключился к чату, то есть, если он вошел в комнату, статус сообщений, которые были «пересланы» ранее, должен быть обновлен как «просмотрен». вот как я пытался задать вопрос в чате

Подробнее здесь: https://stackoverflow.com/questions/791 ... my-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»