Esempio n. 1
0
    def run(self):
        message = redis_connection.brpop("queue")
        if message:
            message_id = message[1]
            message_key = f"message{message_id}"
            redis_connection.hset(message_key, "status", "checking")

            message = redis_connection.hmget(message_key, ["sender_id", "recipient_id"])

            sender_id = message[0]
            redis_connection.hincrby(f"user{sender_id}", "in_queue", -1)
            redis_connection.hincrby(f"user{sender_id}", "checking", 1)

            time.sleep(DELAY)

            is_spam = message_is_spam()
            redis_connection.hincrby(f"user{sender_id}", "checking", -1)

            if is_spam:
                sender_name = get_username(sender_id)
                message_text = redis_connection.hmget(message_key, ["text"])[0]
                redis_connection.publish("spam", f"User {sender_name} sent spam: {message_text}.")
                neo4j.mark_message_as_spam(message_id)

                redis_connection.zincrby(f"spam", 1, f"user{sender_id}")
                redis_connection.hset(message_key, "status", "blocked")
                redis_connection.hincrby(f"user{sender_id}", "blocked", 1)
            else:
                recipient_id = message[1]
                redis_connection.hset(message_key, "status", "sent")
                redis_connection.hincrby(f"user{sender_id}", "sent", 1)
                redis_connection.sadd(f"sent_to:{recipient_id}", message_id)
Esempio n. 2
0
File: message.py Progetto: Kyanka/DB
def create_message(user_id, message, recipient):
    message_id = redis_connection.incr("message_id")
    recipient_id = redis_connection.hget("users", recipient)

    if not recipient_id:
        print(f"{recipient} does not exist :(")
        return

    message_key = f"message{message_id}"
    message_info = {
        "id": message_id,
        "text": message,
        "status": "created",
        "sender_id": user_id,
        "recipient_id": recipient_id
    }

    for key in message_info.keys():
        redis_connection.hset(message_key, key, message_info[key])

    redis_connection.lpush("queue", message_id)
    redis_connection.hset(message_key, "status", "in_queue")

    redis_connection.hincrby(f"user{user_id}", "in_queue", 1)
    redis_connection.zincrby("sent", 1, f"user{user_id}")

    return message_id
Esempio n. 3
0
File: message.py Progetto: Kyanka/DB
def get_inbox_messages(user_id):
    messages = redis_connection.smembers(f"sent_to{user_id}")

    if len(messages) == 0:
        print("Oh. You have empty inbox. Let's type someone? :)")
        return

    for message_id in messages:
        message = redis_connection.hmget(f"message{message_id}", ["text", "status", "sender_id"])

        if message[1] != "delivered":
            redis_connection.hset(f"message{message_id}", "status", "delivered")
            redis_connection.hincrby(f"user{message[2]}", "sent", -1)
            redis_connection.hincrby(f"user{message[2]}", "delivered", 1)

        print(f"{message[0]} -> FROM: {get_username(message[2])}")