|
import asyncio |
|
import os |
|
from datetime import datetime, timedelta |
|
from typing import Union |
|
|
|
import emoji |
|
from pyrogram.errors import ( |
|
FloodWait, |
|
InputUserDeactivated, |
|
PeerIdInvalid, |
|
UserIsBlocked, |
|
) |
|
from pyrogram.types import Message |
|
|
|
from Database.mongodb.afk_db import is_cleanmode_on |
|
from Mikobot import LOGGER |
|
|
|
BANNED = {} |
|
|
|
loop = asyncio.get_event_loop() |
|
|
|
cleanmode = {} |
|
|
|
|
|
async def put_cleanmode(chat_id, message_id): |
|
if chat_id not in cleanmode: |
|
cleanmode[chat_id] = [] |
|
time_now = datetime.now() |
|
put = { |
|
"msg_id": message_id, |
|
"timer_after": time_now + timedelta(minutes=1), |
|
} |
|
cleanmode[chat_id].append(put) |
|
|
|
|
|
async def auto_clean(client): |
|
while not await asyncio.sleep(30): |
|
try: |
|
for chat_id in cleanmode: |
|
if not await is_cleanmode_on(chat_id): |
|
continue |
|
for x in cleanmode[chat_id]: |
|
if datetime.now() <= x["timer_after"]: |
|
continue |
|
try: |
|
await client.delete_messages(chat_id, x["msg_id"]) |
|
except FloodWait as e: |
|
await asyncio.sleep(e.value) |
|
except: |
|
continue |
|
except: |
|
continue |
|
|
|
|
|
|
|
class temp(object): |
|
ME = None |
|
CURRENT = int(os.environ.get("SKIP", 2)) |
|
CANCEL = False |
|
MELCOW = {} |
|
U_NAME = None |
|
B_NAME = None |
|
|
|
|
|
def demoji(teks): |
|
return emoji.emojize(f":{teks.replace(' ', '_').replace('-', '_')}:") |
|
|
|
|
|
async def broadcast_messages(user_id, message): |
|
try: |
|
await message.copy(chat_id=user_id) |
|
return True, "Succes" |
|
except FloodWait as e: |
|
await asyncio.sleep(e.x) |
|
return await broadcast_messages(user_id, message) |
|
except InputUserDeactivated: |
|
await db_name.delete_user(int(user_id)) |
|
LOGGER.info(f"{user_id}-Removed from Database, since deleted account.") |
|
return False, "Deleted" |
|
except UserIsBlocked: |
|
LOGGER.info(f"{user_id} -Blocked the bot.") |
|
return False, "Blocked" |
|
except PeerIdInvalid: |
|
await db_name.delete_user(int(user_id)) |
|
LOGGER.info(f"{user_id} - PeerIdInvalid") |
|
return False, "Error" |
|
except Exception: |
|
return False, "Error" |
|
|
|
|
|
def get_size(size): |
|
"""Get size in readable format""" |
|
|
|
units = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB"] |
|
size = float(size) |
|
i = 0 |
|
while size >= 1024.0 and i < len(units): |
|
i += 1 |
|
size /= 1024.0 |
|
return "%.2f %s" % (size, units[i]) |
|
|
|
|
|
def get_file_id(msg: Message): |
|
if msg.media: |
|
for message_type in ( |
|
"photo", |
|
"animation", |
|
"audio", |
|
"document", |
|
"video", |
|
"video_note", |
|
"voice", |
|
"sticker", |
|
): |
|
if obj := getattr(msg, message_type): |
|
setattr(obj, "message_type", message_type) |
|
return obj |
|
|
|
|
|
def extract_user(message: Message) -> Union[int, str]: |
|
"""extracts the user from a message""" |
|
|
|
user_id = None |
|
user_first_name = None |
|
if message.reply_to_message: |
|
user_id = message.reply_to_message.from_user.id |
|
user_first_name = message.reply_to_message.from_user.first_name |
|
|
|
elif len(message.command) > 1: |
|
if len(message.entities) > 1 and message.entities[1].type == "text_mention": |
|
required_entity = message.entities[1] |
|
user_id = required_entity.user.id |
|
user_first_name = required_entity.user.first_name |
|
else: |
|
user_id = message.command[1] |
|
|
|
user_first_name = user_id |
|
try: |
|
user_id = int(user_id) |
|
except ValueError: |
|
pass |
|
else: |
|
user_id = message.from_user.id |
|
user_first_name = message.from_user.first_name |
|
return (user_id, user_first_name) |
|
|