from typing import Dict, Union from database import dbname warnsdb = dbname["warn"] async def get_warns_count() -> dict: chats_count = 0 warns_count = 0 async for chat in warnsdb.find({"chat_id": {"$lt": 0}}): for user in chat["warns"]: warns_count += chat["warns"][user]["warns"] chats_count += 1 return {"chats_count": chats_count, "warns_count": warns_count} async def get_warns(chat_id: int) -> Dict[str, int]: warns = await warnsdb.find_one({"chat_id": chat_id}) return warns["warns"] if warns else {} async def get_warn(chat_id: int, name: str) -> Union[bool, dict]: name = name.lower().strip() warns = await get_warns(chat_id) if name in warns: return warns[name] async def add_warn(chat_id: int, name: str, warn: dict): name = name.lower().strip() warns = await get_warns(chat_id) warns[name] = warn await warnsdb.update_one( {"chat_id": chat_id}, {"$set": {"warns": warns}}, upsert=True ) async def remove_warns(chat_id: int, name: str) -> bool: warnsd = await get_warns(chat_id) name = name.lower().strip() if name in warnsd: del warnsd[name] await warnsdb.update_one( {"chat_id": chat_id}, {"$set": {"warns": warnsd}}, upsert=True, ) return True return False