Example #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)
Example #2
0
def user(user_id):
    while True:
        action = user_menu()

        if action == 0:
            sign_out(user_id)
            break

        elif action == 1:
            get_inbox_messages(user_id)

        elif action == 2:
            message = input("Enter message: ")
            recipient = input("Enter username of the receiver: ")
            if create_message(user_id, message, recipient):
                print(f"Sent your message to {recipient}")

        elif action == 3:
            keys = ["in_queue", "checking", "blocked", "sent", "delivered"]
            user = redis_connection.hmget(f"user{user_id}", keys)
            for i in range(5):
                print(f"{keys[i]}: {user[i]}")

        else:
            print("Choose only available [0-3] actions :)")
Example #3
0
File: message.py Project: 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])}")
Example #4
0
File: user.py Project: Kyanka/DB
def get_username(user_id):
    return redis_connection.hmget(f"user{user_id}", ["name"])[0]