# https://github.com/odysseusmax/animated-lamp/blob/master/bot/database/database.py import motor.motor_asyncio from info import DATABASE_NAME, DATABASE_URI, IMDB, IMDB_TEMPLATE, MELCOW_NEW_USERS, P_TTI_SHOW_OFF, SINGLE_BUTTON, SPELL_CHECK_REPLY, PROTECT_CONTENT, AUTO_DELETE, MAX_BTN, AUTO_FFILTER, SHORTLINK_API, SHORTLINK_URL, IS_SHORTLINK, TUTORIAL, IS_TUTORIAL class Database: def __init__(self, uri, database_name): self._client = motor.motor_asyncio.AsyncIOMotorClient(uri) self.db = self._client[database_name] self.col = self.db.users self.grp = self.db.groups def new_user(self, id, name): return dict( id = id, name = name, ban_status=dict( is_banned=False, ban_reason="", ), ) def new_group(self, id, title): return dict( id = id, title = title, chat_status=dict( is_disabled=False, reason="", ), ) async def add_user(self, id, name): user = self.new_user(id, name) await self.col.insert_one(user) async def is_user_exist(self, id): user = await self.col.find_one({'id':int(id)}) return bool(user) async def total_users_count(self): count = await self.col.count_documents({}) return count async def remove_ban(self, id): ban_status = dict( is_banned=False, ban_reason='' ) await self.col.update_one({'id': id}, {'$set': {'ban_status': ban_status}}) async def ban_user(self, user_id, ban_reason="No Reason"): ban_status = dict( is_banned=True, ban_reason=ban_reason ) await self.col.update_one({'id': user_id}, {'$set': {'ban_status': ban_status}}) async def get_ban_status(self, id): default = dict( is_banned=False, ban_reason='' ) user = await self.col.find_one({'id':int(id)}) if not user: return default return user.get('ban_status', default) async def get_all_users(self): return self.col.find({}) async def delete_user(self, user_id): await self.col.delete_many({'id': int(user_id)}) async def get_banned(self): users = self.col.find({'ban_status.is_banned': True}) chats = self.grp.find({'chat_status.is_disabled': True}) b_chats = [chat['id'] async for chat in chats] b_users = [user['id'] async for user in users] return b_users, b_chats async def add_chat(self, chat, title): chat = self.new_group(chat, title) await self.grp.insert_one(chat) async def get_chat(self, chat): chat = await self.grp.find_one({'id':int(chat)}) return False if not chat else chat.get('chat_status') async def re_enable_chat(self, id): chat_status=dict( is_disabled=False, reason="", ) await self.grp.update_one({'id': int(id)}, {'$set': {'chat_status': chat_status}}) async def update_settings(self, id, settings): await self.grp.update_one({'id': int(id)}, {'$set': {'settings': settings}}) async def get_settings(self, id): default = { 'button': SINGLE_BUTTON, 'botpm': P_TTI_SHOW_OFF, 'file_secure': PROTECT_CONTENT, 'imdb': IMDB, 'spell_check': SPELL_CHECK_REPLY, 'welcome': MELCOW_NEW_USERS, 'auto_delete': AUTO_DELETE, 'auto_ffilter': AUTO_FFILTER, 'max_btn': MAX_BTN, 'template': IMDB_TEMPLATE, 'shortlink': SHORTLINK_URL, 'shortlink_api': SHORTLINK_API, 'is_shortlink': IS_SHORTLINK, 'tutorial': TUTORIAL, 'is_tutorial': IS_TUTORIAL } chat = await self.grp.find_one({'id':int(id)}) if chat: return chat.get('settings', default) return default async def disable_chat(self, chat, reason="No Reason"): chat_status=dict( is_disabled=True, reason=reason, ) await self.grp.update_one({'id': int(chat)}, {'$set': {'chat_status': chat_status}}) async def total_chat_count(self): count = await self.grp.count_documents({}) return count async def get_all_chats(self): return self.grp.find({}) async def get_db_size(self): return (await self.db.command("dbstats"))['dataSize'] db = Database(DATABASE_URI, DATABASE_NAME)