Spaces:
Running
Running
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 | |
# Shifting to memory [mongo sucks often] | |
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}) | |
# Antiflood Settings | |
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 | |
) | |