|
import random |
|
from functools import wraps |
|
from typing import Dict, List, Union |
|
|
|
from DragMusic import userbot |
|
from DragMusic.core.mongo import mongodb, flooddb, sudoersdb |
|
|
|
authdb = mongodb.adminauth |
|
authuserdb = mongodb.authuser |
|
autoenddb = mongodb.autoend |
|
assdb = mongodb.assistants |
|
blacklist_chatdb = mongodb.blacklistChat |
|
blockeddb = mongodb.blockedusers |
|
chatsdb = mongodb.chats |
|
channeldb = mongodb.cplaymode |
|
countdb = mongodb.upcount |
|
gbansdb = mongodb.gban |
|
langdb = mongodb.language |
|
onoffdb = mongodb.onoffper |
|
playmodedb = mongodb.playmode |
|
playtypedb = mongodb.playtypedb |
|
skipdb = mongodb.skipmode |
|
usersdb = mongodb.tgusersdb |
|
|
|
|
|
active = [] |
|
activevideo = [] |
|
assistantdict = {} |
|
autoend = {} |
|
count = {} |
|
channelconnect = {} |
|
langm = {} |
|
loop = {} |
|
maintenance = [] |
|
nonadmin = {} |
|
pause = {} |
|
playmode = {} |
|
playtype = {} |
|
skipmode = {} |
|
|
|
|
|
async def get_assistant_number(chat_id: int) -> str: |
|
assistant = assistantdict.get(chat_id) |
|
return assistant |
|
|
|
|
|
async def get_client(assistant: int): |
|
if int(assistant) == 1: |
|
return userbot.one |
|
elif int(assistant) == 2: |
|
return userbot.two |
|
elif int(assistant) == 3: |
|
return userbot.three |
|
elif int(assistant) == 4: |
|
return userbot.four |
|
elif int(assistant) == 5: |
|
return userbot.five |
|
|
|
|
|
async def set_assistant_new(chat_id, number): |
|
number = int(number) |
|
await assdb.update_one( |
|
{"chat_id": chat_id}, |
|
{"$set": {"assistant": number}}, |
|
upsert=True, |
|
) |
|
|
|
|
|
async def set_assistant(chat_id): |
|
from DragMusic.core.userbot import assistants |
|
|
|
ran_assistant = random.choice(assistants) |
|
assistantdict[chat_id] = ran_assistant |
|
await assdb.update_one( |
|
{"chat_id": chat_id}, |
|
{"$set": {"assistant": ran_assistant}}, |
|
upsert=True, |
|
) |
|
userbot = await get_client(ran_assistant) |
|
return userbot |
|
|
|
|
|
async def get_assistant(chat_id: int) -> str: |
|
from DragMusic.core.userbot import assistants |
|
|
|
assistant = assistantdict.get(chat_id) |
|
if not assistant: |
|
dbassistant = await assdb.find_one({"chat_id": chat_id}) |
|
if not dbassistant: |
|
userbot = await set_assistant(chat_id) |
|
return userbot |
|
else: |
|
got_assis = dbassistant["assistant"] |
|
if got_assis in assistants: |
|
assistantdict[chat_id] = got_assis |
|
userbot = await get_client(got_assis) |
|
return userbot |
|
else: |
|
userbot = await set_assistant(chat_id) |
|
return userbot |
|
else: |
|
if assistant in assistants: |
|
userbot = await get_client(assistant) |
|
return userbot |
|
else: |
|
userbot = await set_assistant(chat_id) |
|
return userbot |
|
|
|
|
|
async def set_calls_assistant(chat_id): |
|
from DragMusic.core.userbot import assistants |
|
|
|
ran_assistant = random.choice(assistants) |
|
assistantdict[chat_id] = ran_assistant |
|
await assdb.update_one( |
|
{"chat_id": chat_id}, |
|
{"$set": {"assistant": ran_assistant}}, |
|
upsert=True, |
|
) |
|
return ran_assistant |
|
|
|
|
|
async def group_assistant(self, chat_id: int) -> int: |
|
from DragMusic.core.userbot import assistants |
|
|
|
assistant = assistantdict.get(chat_id) |
|
if not assistant: |
|
dbassistant = await assdb.find_one({"chat_id": chat_id}) |
|
if not dbassistant: |
|
assis = await set_calls_assistant(chat_id) |
|
else: |
|
assis = dbassistant["assistant"] |
|
if assis in assistants: |
|
assistantdict[chat_id] = assis |
|
assis = assis |
|
else: |
|
assis = await set_calls_assistant(chat_id) |
|
else: |
|
if assistant in assistants: |
|
assis = assistant |
|
else: |
|
assis = await set_calls_assistant(chat_id) |
|
if int(assis) == 1: |
|
return self.one |
|
elif int(assis) == 2: |
|
return self.two |
|
elif int(assis) == 3: |
|
return self.three |
|
elif int(assis) == 4: |
|
return self.four |
|
elif int(assis) == 5: |
|
return self.five |
|
|
|
|
|
async def is_skipmode(chat_id: int) -> bool: |
|
mode = skipmode.get(chat_id) |
|
if not mode: |
|
user = await skipdb.find_one({"chat_id": chat_id}) |
|
if not user: |
|
skipmode[chat_id] = True |
|
return True |
|
skipmode[chat_id] = False |
|
return False |
|
return mode |
|
|
|
|
|
async def skip_on(chat_id: int): |
|
skipmode[chat_id] = True |
|
user = await skipdb.find_one({"chat_id": chat_id}) |
|
if user: |
|
return await skipdb.delete_one({"chat_id": chat_id}) |
|
|
|
|
|
async def skip_off(chat_id: int): |
|
skipmode[chat_id] = False |
|
user = await skipdb.find_one({"chat_id": chat_id}) |
|
if not user: |
|
return await skipdb.insert_one({"chat_id": chat_id}) |
|
|
|
|
|
async def get_upvote_count(chat_id: int) -> int: |
|
mode = count.get(chat_id) |
|
if not mode: |
|
mode = await countdb.find_one({"chat_id": chat_id}) |
|
if not mode: |
|
return 5 |
|
count[chat_id] = mode["mode"] |
|
return mode["mode"] |
|
return mode |
|
|
|
|
|
async def set_upvotes(chat_id: int, mode: int): |
|
count[chat_id] = mode |
|
await countdb.update_one( |
|
{"chat_id": chat_id}, {"$set": {"mode": mode}}, upsert=True |
|
) |
|
|
|
|
|
async def is_autoend() -> bool: |
|
chat_id = 1234 |
|
user = await autoenddb.find_one({"chat_id": chat_id}) |
|
if not user: |
|
return False |
|
return True |
|
|
|
|
|
async def autoend_on(): |
|
chat_id = 1234 |
|
await autoenddb.insert_one({"chat_id": chat_id}) |
|
|
|
|
|
async def autoend_off(): |
|
chat_id = 1234 |
|
await autoenddb.delete_one({"chat_id": chat_id}) |
|
|
|
|
|
async def get_loop(chat_id: int) -> int: |
|
lop = loop.get(chat_id) |
|
if not lop: |
|
return 0 |
|
return lop |
|
|
|
|
|
async def set_loop(chat_id: int, mode: int): |
|
loop[chat_id] = mode |
|
|
|
|
|
async def get_cmode(chat_id: int) -> int: |
|
mode = channelconnect.get(chat_id) |
|
if not mode: |
|
mode = await channeldb.find_one({"chat_id": chat_id}) |
|
if not mode: |
|
return None |
|
channelconnect[chat_id] = mode["mode"] |
|
return mode["mode"] |
|
return mode |
|
|
|
|
|
async def set_cmode(chat_id: int, mode: int): |
|
channelconnect[chat_id] = mode |
|
await channeldb.update_one( |
|
{"chat_id": chat_id}, {"$set": {"mode": mode}}, upsert=True |
|
) |
|
|
|
|
|
async def get_playtype(chat_id: int) -> str: |
|
mode = playtype.get(chat_id) |
|
if not mode: |
|
mode = await playtypedb.find_one({"chat_id": chat_id}) |
|
if not mode: |
|
playtype[chat_id] = "Everyone" |
|
return "Everyone" |
|
playtype[chat_id] = mode["mode"] |
|
return mode["mode"] |
|
return mode |
|
|
|
|
|
async def set_playtype(chat_id: int, mode: str): |
|
playtype[chat_id] = mode |
|
await playtypedb.update_one( |
|
{"chat_id": chat_id}, {"$set": {"mode": mode}}, upsert=True |
|
) |
|
|
|
|
|
async def get_playmode(chat_id: int) -> str: |
|
mode = playmode.get(chat_id) |
|
if not mode: |
|
mode = await playmodedb.find_one({"chat_id": chat_id}) |
|
if not mode: |
|
playmode[chat_id] = "Direct" |
|
return "Direct" |
|
playmode[chat_id] = mode["mode"] |
|
return mode["mode"] |
|
return mode |
|
|
|
|
|
async def set_playmode(chat_id: int, mode: str): |
|
playmode[chat_id] = mode |
|
await playmodedb.update_one( |
|
{"chat_id": chat_id}, {"$set": {"mode": mode}}, upsert=True |
|
) |
|
|
|
|
|
async def get_lang(chat_id: int) -> str: |
|
mode = langm.get(chat_id) |
|
if not mode: |
|
lang = await langdb.find_one({"chat_id": chat_id}) |
|
if not lang: |
|
langm[chat_id] = "en" |
|
return "en" |
|
langm[chat_id] = lang["lang"] |
|
return lang["lang"] |
|
return mode |
|
|
|
|
|
async def set_lang(chat_id: int, lang: str): |
|
langm[chat_id] = lang |
|
await langdb.update_one({"chat_id": chat_id}, {"$set": {"lang": lang}}, upsert=True) |
|
|
|
|
|
async def is_music_playing(chat_id: int) -> bool: |
|
mode = pause.get(chat_id) |
|
if not mode: |
|
return False |
|
return mode |
|
|
|
|
|
async def music_on(chat_id: int): |
|
pause[chat_id] = True |
|
|
|
|
|
async def music_off(chat_id: int): |
|
pause[chat_id] = False |
|
|
|
|
|
async def get_active_chats() -> list: |
|
return active |
|
|
|
|
|
async def is_active_chat(chat_id: int) -> bool: |
|
if chat_id not in active: |
|
return False |
|
else: |
|
return True |
|
|
|
|
|
async def add_active_chat(chat_id: int): |
|
if chat_id not in active: |
|
active.append(chat_id) |
|
|
|
|
|
async def remove_active_chat(chat_id: int): |
|
if chat_id in active: |
|
active.remove(chat_id) |
|
|
|
|
|
async def get_active_video_chats() -> list: |
|
return activevideo |
|
|
|
|
|
async def is_active_video_chat(chat_id: int) -> bool: |
|
if chat_id not in activevideo: |
|
return False |
|
else: |
|
return True |
|
|
|
|
|
async def add_active_video_chat(chat_id: int): |
|
if chat_id not in activevideo: |
|
activevideo.append(chat_id) |
|
|
|
|
|
async def remove_active_video_chat(chat_id: int): |
|
if chat_id in activevideo: |
|
activevideo.remove(chat_id) |
|
|
|
|
|
async def check_nonadmin_chat(chat_id: int) -> bool: |
|
user = await authdb.find_one({"chat_id": chat_id}) |
|
if not user: |
|
return False |
|
return True |
|
|
|
|
|
async def is_nonadmin_chat(chat_id: int) -> bool: |
|
mode = nonadmin.get(chat_id) |
|
if not mode: |
|
user = await authdb.find_one({"chat_id": chat_id}) |
|
if not user: |
|
nonadmin[chat_id] = False |
|
return False |
|
nonadmin[chat_id] = True |
|
return True |
|
return mode |
|
|
|
|
|
async def add_nonadmin_chat(chat_id: int): |
|
nonadmin[chat_id] = True |
|
is_admin = await check_nonadmin_chat(chat_id) |
|
if is_admin: |
|
return |
|
return await authdb.insert_one({"chat_id": chat_id}) |
|
|
|
|
|
async def remove_nonadmin_chat(chat_id: int): |
|
nonadmin[chat_id] = False |
|
is_admin = await check_nonadmin_chat(chat_id) |
|
if not is_admin: |
|
return |
|
return await authdb.delete_one({"chat_id": chat_id}) |
|
|
|
|
|
async def is_on_off(on_off: int) -> bool: |
|
onoff = await onoffdb.find_one({"on_off": on_off}) |
|
if not onoff: |
|
return False |
|
return True |
|
|
|
|
|
async def add_on(on_off: int): |
|
is_on = await is_on_off(on_off) |
|
if is_on: |
|
return |
|
return await onoffdb.insert_one({"on_off": on_off}) |
|
|
|
|
|
async def add_off(on_off: int): |
|
is_off = await is_on_off(on_off) |
|
if not is_off: |
|
return |
|
return await onoffdb.delete_one({"on_off": on_off}) |
|
|
|
|
|
async def is_maintenance(): |
|
if not maintenance: |
|
get = await onoffdb.find_one({"on_off": 1}) |
|
if not get: |
|
maintenance.clear() |
|
maintenance.append(2) |
|
return True |
|
else: |
|
maintenance.clear() |
|
maintenance.append(1) |
|
return False |
|
else: |
|
if 1 in maintenance: |
|
return False |
|
else: |
|
return True |
|
|
|
|
|
async def maintenance_off(): |
|
maintenance.clear() |
|
maintenance.append(2) |
|
is_off = await is_on_off(1) |
|
if not is_off: |
|
return |
|
return await onoffdb.delete_one({"on_off": 1}) |
|
|
|
|
|
async def maintenance_on(): |
|
maintenance.clear() |
|
maintenance.append(1) |
|
is_on = await is_on_off(1) |
|
if is_on: |
|
return |
|
return await onoffdb.insert_one({"on_off": 1}) |
|
|
|
|
|
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}) |
|
|
|
|
|
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}) |
|
|
|
|
|
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 |
|
|
|
|
|
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 |
|
|
|
|
|
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}) |
|
|
|
|
|
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 |
|
|
|
|
|
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}) |
|
|
|
|
|
|
|
async def get_flood_settings(chat_id: int): |
|
defaults = { |
|
"limit": 0, |
|
"action": "ban", |
|
"t_limit": 0, |
|
"t_duration": 30, |
|
"action_duration": "1h", |
|
"clear": False, |
|
} |
|
settings = await flooddb.find_one({"chat_id": chat_id}) |
|
if settings: |
|
defaults.update(settings) |
|
return defaults |
|
|
|
async def update_flood_setting(chat_id: int, key: str, value): |
|
await flooddb.update_one( |
|
{"chat_id": chat_id}, |
|
{"$set": {key: value}}, |
|
upsert=True |
|
) |
|
|