Inital Code
This commit is contained in:
70
chatapp/models.py
Normal file
70
chatapp/models.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""Data models for chat application."""
|
||||
|
||||
import asyncio
|
||||
from typing import Set
|
||||
|
||||
|
||||
class Channel:
|
||||
"""Represents a chat channel or group."""
|
||||
def __init__(self, name: str, creator: str, is_private: bool = False):
|
||||
self.name = name
|
||||
self.creator = creator
|
||||
self.is_private = is_private
|
||||
self.members: Set[str] = {creator}
|
||||
self.messages = []
|
||||
self.invites: Set[str] = set() # Pending invites
|
||||
self.max_messages = 500
|
||||
|
||||
def add_member(self, username: str):
|
||||
self.members.add(username)
|
||||
if username in self.invites:
|
||||
self.invites.remove(username)
|
||||
|
||||
def remove_member(self, username: str):
|
||||
if username in self.members:
|
||||
self.members.remove(username)
|
||||
|
||||
def add_message(self, msg_data: dict):
|
||||
self.messages.append(msg_data)
|
||||
if len(self.messages) > self.max_messages:
|
||||
self.messages.pop(0)
|
||||
|
||||
def has_member(self, username: str) -> bool:
|
||||
return username in self.members
|
||||
|
||||
def is_invited(self, username: str) -> bool:
|
||||
return username in self.invites
|
||||
|
||||
def invite(self, username: str):
|
||||
if username not in self.members:
|
||||
self.invites.add(username)
|
||||
|
||||
|
||||
class DirectMessage:
|
||||
"""Represents a DM conversation between two users."""
|
||||
def __init__(self, user1: str, user2: str):
|
||||
self.users = frozenset([user1, user2])
|
||||
self.messages = []
|
||||
self.max_messages = 500
|
||||
|
||||
def add_message(self, msg_data: dict):
|
||||
self.messages.append(msg_data)
|
||||
if len(self.messages) > self.max_messages:
|
||||
self.messages.pop(0)
|
||||
|
||||
def get_other_user(self, username: str) -> str:
|
||||
users_list = list(self.users)
|
||||
return users_list[0] if users_list[1] == username else users_list[1]
|
||||
|
||||
|
||||
class UserConnection:
|
||||
"""Represents a connected user with a message queue."""
|
||||
def __init__(self, username: str, message_queue: asyncio.Queue):
|
||||
self.username = username
|
||||
self.message_queue = message_queue
|
||||
|
||||
def send_message(self, msg_data: dict):
|
||||
try:
|
||||
self.message_queue.put_nowait(msg_data)
|
||||
except:
|
||||
pass
|
||||
Reference in New Issue
Block a user