# # Copyright (C) 2021-2022 by TeamYukki@Github, < https://github.com/TeamYukki >. # # This file is part of < https://github.com/TeamYukki/YukkiMusicBot > project, # and is released under the "GNU v3.0 License Agreement". # Please see < https://github.com/TeamYukki/YukkiMusicBot/blob/master/LICENSE > # # All rights reserved. from typing import Dict, List, Union from YukkiMusic.core.mongo import mongodb queriesdb = mongodb.queries userdb = mongodb.userstats chattopdb = mongodb.chatstats authuserdb = mongodb.authuser gbansdb = mongodb.gban sudoersdb = mongodb.sudoers chatsdb = mongodb.chats blacklist_chatdb = mongodb.blacklistChat usersdb = mongodb.tgusersdb playlistdb = mongodb.playlist blockeddb = mongodb.blockedusers privatedb = mongodb.privatechats # Playlist async def _get_playlists(chat_id: int) -> Dict[str, int]: _notes = await playlistdb.find_one({"chat_id": chat_id}) if not _notes: return {} return _notes["notes"] async def get_playlist_names(chat_id: int) -> List[str]: _notes = [] for note in await _get_playlists(chat_id): _notes.append(note) return _notes async def get_playlist(chat_id: int, name: str) -> Union[bool, dict]: name = name _notes = await _get_playlists(chat_id) if name in _notes: return _notes[name] else: return False async def save_playlist(chat_id: int, name: str, note: dict): name = name _notes = await _get_playlists(chat_id) _notes[name] = note await playlistdb.update_one( {"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True ) async def delete_playlist(chat_id: int, name: str) -> bool: notesd = await _get_playlists(chat_id) name = name if name in notesd: del notesd[name] await playlistdb.update_one( {"chat_id": chat_id}, {"$set": {"notes": notesd}}, upsert=True, ) return True return False # Users async def is_served_user(user_id: int) -> bool: user = await usersdb.find_one({"user_id": user_id}) if not user: return False return True async def get_served_users() -> list: users_list = [] async for user in usersdb.find({"user_id": {"$gt": 0}}): users_list.append(user) return users_list async def add_served_user(user_id: int): is_served = await is_served_user(user_id) if is_served: return return await usersdb.insert_one({"user_id": user_id}) # Served Chats async def get_served_chats() -> list: chats_list = [] async for chat in chatsdb.find({"chat_id": {"$lt": 0}}): chats_list.append(chat) return chats_list async def is_served_chat(chat_id: int) -> bool: chat = await chatsdb.find_one({"chat_id": chat_id}) if not chat: return False return True async def add_served_chat(chat_id: int): is_served = await is_served_chat(chat_id) if is_served: return return await chatsdb.insert_one({"chat_id": chat_id}) # Blacklisted Chats async def blacklisted_chats() -> list: chats_list = [] async for chat in blacklist_chatdb.find({"chat_id": {"$lt": 0}}): chats_list.append(chat["chat_id"]) return chats_list async def blacklist_chat(chat_id: int) -> bool: if not await blacklist_chatdb.find_one({"chat_id": chat_id}): await blacklist_chatdb.insert_one({"chat_id": chat_id}) return True return False async def whitelist_chat(chat_id: int) -> bool: if await blacklist_chatdb.find_one({"chat_id": chat_id}): await blacklist_chatdb.delete_one({"chat_id": chat_id}) return True return False # Private Served Chats async def get_private_served_chats() -> list: chats_list = [] async for chat in privatedb.find({"chat_id": {"$lt": 0}}): chats_list.append(chat) return chats_list async def is_served_private_chat(chat_id: int) -> bool: chat = await privatedb.find_one({"chat_id": chat_id}) if not chat: return False return True async def add_private_chat(chat_id: int): is_served = await is_served_private_chat(chat_id) if is_served: return return await privatedb.insert_one({"chat_id": chat_id}) async def remove_private_chat(chat_id: int): is_served = await is_served_private_chat(chat_id) if not is_served: return return await privatedb.delete_one({"chat_id": chat_id}) # Auth Users DB async def _get_authusers(chat_id: int) -> Dict[str, int]: _notes = await authuserdb.find_one({"chat_id": chat_id}) if not _notes: return {} return _notes["notes"] async def get_authuser_names(chat_id: int) -> List[str]: _notes = [] for note in await _get_authusers(chat_id): _notes.append(note) return _notes async def get_authuser(chat_id: int, name: str) -> Union[bool, dict]: name = name _notes = await _get_authusers(chat_id) if name in _notes: return _notes[name] else: return False async def save_authuser(chat_id: int, name: str, note: dict): name = name _notes = await _get_authusers(chat_id) _notes[name] = note await authuserdb.update_one( {"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True ) async def delete_authuser(chat_id: int, name: str) -> bool: notesd = await _get_authusers(chat_id) name = name if name in notesd: del notesd[name] await authuserdb.update_one( {"chat_id": chat_id}, {"$set": {"notes": notesd}}, upsert=True, ) return True return False # Blocked Users async def get_gbanned() -> list: results = [] async for user in gbansdb.find({"user_id": {"$gt": 0}}): user_id = user["user_id"] results.append(user_id) return results async def is_gbanned_user(user_id: int) -> bool: user = await gbansdb.find_one({"user_id": user_id}) if not user: return False return True async def add_gban_user(user_id: int): is_gbanned = await is_gbanned_user(user_id) if is_gbanned: return return await gbansdb.insert_one({"user_id": user_id}) async def remove_gban_user(user_id: int): is_gbanned = await is_gbanned_user(user_id) if not is_gbanned: return return await gbansdb.delete_one({"user_id": user_id}) # Sudoers async def get_sudoers() -> list: sudoers = await sudoersdb.find_one({"sudo": "sudo"}) if not sudoers: return [] return sudoers["sudoers"] async def add_sudo(user_id: int) -> bool: sudoers = await get_sudoers() sudoers.append(user_id) await sudoersdb.update_one( {"sudo": "sudo"}, {"$set": {"sudoers": sudoers}}, upsert=True ) return True async def remove_sudo(user_id: int) -> bool: sudoers = await get_sudoers() sudoers.remove(user_id) await sudoersdb.update_one( {"sudo": "sudo"}, {"$set": {"sudoers": sudoers}}, upsert=True ) return True # Total Queries on bot async def get_queries() -> int: chat_id = 98324 mode = await queriesdb.find_one({"chat_id": chat_id}) if not mode: return 0 return mode["mode"] async def set_queries(mode: int): chat_id = 98324 queries = await queriesdb.find_one({"chat_id": chat_id}) if queries: mode = queries["mode"] + mode return await queriesdb.update_one( {"chat_id": chat_id}, {"$set": {"mode": mode}}, upsert=True ) # Top Chats DB async def get_top_chats() -> dict: results = {} async for chat in chattopdb.find({"chat_id": {"$lt": 0}}): chat_id = chat["chat_id"] total = 0 for i in chat["vidid"]: counts_ = chat["vidid"][i]["spot"] if counts_ > 0: total += counts_ results[chat_id] = total return results async def get_global_tops() -> dict: results = {} async for chat in chattopdb.find({"chat_id": {"$lt": 0}}): for i in chat["vidid"]: counts_ = chat["vidid"][i]["spot"] title_ = chat["vidid"][i]["title"] if counts_ > 0: if i not in results: results[i] = {} results[i]["spot"] = counts_ results[i]["title"] = title_ else: spot = results[i]["spot"] count_ = spot + counts_ results[i]["spot"] = count_ return results async def get_particulars(chat_id: int) -> Dict[str, int]: ids = await chattopdb.find_one({"chat_id": chat_id}) if not ids: return {} return ids["vidid"] async def get_particular_top( chat_id: int, name: str ) -> Union[bool, dict]: ids = await get_particulars(chat_id) if name in ids: return ids[name] async def update_particular_top(chat_id: int, name: str, vidid: dict): ids = await get_particulars(chat_id) ids[name] = vidid await chattopdb.update_one( {"chat_id": chat_id}, {"$set": {"vidid": ids}}, upsert=True ) # Top User DB async def get_userss(chat_id: int) -> Dict[str, int]: ids = await userdb.find_one({"chat_id": chat_id}) if not ids: return {} return ids["vidid"] async def get_user_top(chat_id: int, name: str) -> Union[bool, dict]: ids = await get_userss(chat_id) if name in ids: return ids[name] async def update_user_top(chat_id: int, name: str, vidid: dict): ids = await get_userss(chat_id) ids[name] = vidid await userdb.update_one( {"chat_id": chat_id}, {"$set": {"vidid": ids}}, upsert=True ) async def get_topp_users() -> dict: results = {} async for chat in userdb.find({"chat_id": {"$gt": 0}}): user_id = chat["chat_id"] total = 0 for i in chat["vidid"]: counts_ = chat["vidid"][i]["spot"] if counts_ > 0: total += counts_ results[user_id] = total return results # Gban Users async def get_banned_users() -> list: results = [] async for user in blockeddb.find({"user_id": {"$gt": 0}}): user_id = user["user_id"] results.append(user_id) return results async def get_banned_count() -> int: users = blockeddb.find({"user_id": {"$gt": 0}}) users = await users.to_list(length=100000) return len(users) async def is_banned_user(user_id: int) -> bool: user = await blockeddb.find_one({"user_id": user_id}) if not user: return False return True async def add_banned_user(user_id: int): is_gbanned = await is_banned_user(user_id) if is_gbanned: return return await blockeddb.insert_one({"user_id": user_id}) async def remove_banned_user(user_id: int): is_gbanned = await is_banned_user(user_id) if not is_gbanned: return return await blockeddb.delete_one({"user_id": user_id})