|
import motor.motor_asyncio |
|
from info import DATABASE_NAME, DATABASE_URL, IMDB, IMDB_TEMPLATE, MELCOW_NEW_USERS, P_TTI_SHOW_OFF, SINGLE_BUTTON, SPELL_CHECK_REPLY, PROTECT_CONTENT, MAX_RIST_BTNS, IMDB_DELET_TIME |
|
|
|
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, username): |
|
return dict( |
|
id = id, |
|
title = title, |
|
username = username, |
|
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 delete_chat(self, chat_id): |
|
await self.grp.delete_many({'id': int(chat_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, username): |
|
chat = self.new_group(chat, title, username) |
|
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, |
|
'template': IMDB_TEMPLATE |
|
} |
|
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_URL, DATABASE_NAME) |
|
|