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)
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
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])}")