BinaryONe
Image Enhancement
400d8b3
import os
import sys
import random
import urllib3
import logging
import asyncio
import traceback
import mimetypes
import time, math
from datetime import datetime
from typing import Dict, Union
from typing import Union, BinaryIO, List, Optional, Callable
from pyrogram import raw
from pyrogram import types
from pyrogram import filters, Client
from pyrogram import utils as pgutils
from pyrogram import StopTransmission, enums
from pyrogram import Client, utils, raw
from pyrogram.file_id import FileType
from pyrogram.session import Session, Auth
from pyrogram.enums import ParseMode, ChatType
from pyrogram.enums.parse_mode import ParseMode
from pyrogram.file_id import FileId, FileType, ThumbnailSource
from pyrogram.errors import FilePartMissing, AuthBytesInvalid, FloodWait
from pyrogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton
#--------------------------Local Imports-------------#
from FileStream.Database import Database
from FileStream.config import Telegram, Server
from FileStream.Tools.tool import TimeFormatter
from FileStream.Tools.progress import progress
from FileStream.bot import FileStream, req_client
from FileStream.bot import MULTI_CLIENTS, WORK_LOADS
from FileStream.utils.FileProcessors.bot_utils import is_user_banned, is_user_exist, is_user_joined, gen_link, is_channel_banned, is_channel_exist, is_user_authorized, upload_type_func
from FileStream.utils.FileProcessors.custom_dl import ByteStreamer
from FileStream.utils.FileProcessors.custom_ul import TeleUploader
from FileStream.utils.FileProcessors.custom_mix import TGFileController
from FileStream.utils.FileProcessors.translation import LANG, BUTTON
from FileStream.utils.FileProcessors.human_readable import humanbytes
from FileStream.utils.FileProcessors.file_properties import get_file_ids, get_file_info, get_private_file_ids
db = Database(Telegram.DATABASE_URL, Telegram.SESSION_NAME)
@FileStream.on_message(filters.private & (filters.document | filters.video | filters.video_note | filters.audio | filters.voice | filters.animation | filters.photo), group=4,)
async def private_receive_handler(bot: Client, message: Message):
try:
"""
//All Values Generated Here is Decided in get_file_info () so No Need of this Block
message_id = message.id
if message.chat.type == ChatType.PRIVATE:
user_idx = message.from_user.id
else:
user_idx = message.chat.id
"""
#For First Set All Files PUBLIC
instruction = {
"privacy_type":"PUBLIC",
"user_id":message.from_user.id if (message.chat.type == ChatType.PRIVATE) else message.chat.id,
"user_type": "TELEGRAM",
"IMDB_id": "Unknown",
"poster": "Unknown",
"title": "Unknown",
"release_date":"Unknown",
"keywords":"Unknown",
"type": "Unknown",
"description":"Unknown",
"genre":"Unknown",
"quality":"Unknown",
}
reply = await message.reply_text(LANG.PROCESSING_TEXT)
file_info=get_file_info(message, instruction)
#This Will give a option to Public Private and temporary Upload
reply_markup,stream_text = await upload_type_func(get_file_info(message, instruction),reply)
"""
if poster == "None":
await reply.reply_photo(photo=poster,
caption=stream_text,
parse_mode=ParseMode.HTML,
reply_markup=reply_markup
)
else:"""
await reply.edit_text(text=stream_text,
parse_mode=ParseMode.HTML,
disable_web_page_preview=True,
reply_markup= reply_markup,
)
except FloodWait as e:
print(f"Sleeping for {str(e.value)}s")
await asyncio.sleep(e.value)
await bot.send_message(
chat_id=Telegram.ULOG_CHANNEL,
text=
f"Gᴏᴛ FʟᴏᴏᴅWᴀɪᴛ ᴏғ {str(e.value)}s ғʀᴏᴍ [{message.from_user.first_name}](tg://user?id={message.from_user.id})\n\n**ᴜsᴇʀ ɪᴅ :** `{str(message.from_user.id)}`",
disable_web_page_preview=True,
parse_mode=ParseMode.MARKDOWN)
@FileStream.on_message(filters.channel & ~filters.forwarded & ~filters.media_group & (filters.document | filters.video | filters.video_note | filters.audio | filters.voice | filters.photo))
async def channel_receive_handler(bot: Client, message: Message):
if await is_channel_banned(bot, message):
return
await is_channel_exist(bot, message)
try:
inserted_id = await db.add_file(file_info=get_file_info(message), db_type="TEMPORARY")
await get_file_ids(False, inserted_id, MULTI_CLIENTS, message)
reply_markup,streaam_text = await gen_link(_id=inserted_id)
await bot.edit_message_reply_markup(
chat_id=message.chat.id,
message_id=message.id,
reply_markup=InlineKeyboardMarkup([[
InlineKeyboardButton("Dᴏᴡɴʟᴏᴀᴅ ʟɪɴᴋ 📥",url=f"https://t.me/{FileStream.username}?start=stream_{str(inserted_id)}")
]]))
except FloodWait as w:
print(f"Sleeping for {str(w.x)}s")
await asyncio.sleep(w.x)
await bot.send_message(
chat_id=Telegram.ULOG_GROUP,
text=
f"ɢᴏᴛ ғʟᴏᴏᴅᴡᴀɪᴛ ᴏғ {str(w.x)}s ғʀᴏᴍ {message.chat.title}\n\n**ᴄʜᴀɴɴᴇʟ ɪᴅ :** `{str(message.chat.id)}`",
disable_web_page_preview=True)
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
await bot.send_message(chat_id=Telegram.ULOG_GROUP,
text=f"**#EʀʀᴏʀTʀᴀᴄᴋᴇʙᴀᴄᴋ:** `{e} {exc_type, fname, exc_tb.tb_lineno}`",
disable_web_page_preview=True)
print(
f"Cᴀɴ'ᴛ Eᴅɪᴛ Bʀᴏᴀᴅᴄᴀsᴛ Mᴇssᴀɢᴇ!\nEʀʀᴏʀ: **Gɪᴠᴇ ᴍᴇ ᴇᴅɪᴛ ᴘᴇʀᴍɪssɪᴏɴ ɪɴ ᴜᴘᴅᴀᴛᴇs ᴀɴᴅ ʙɪɴ Cʜᴀɴɴᴇʟ!{e}**"
)
@FileStream.on_message(filters.reply)
async def reply_handler(
bot: Client,
message: Message,
thumb: Union[str, BinaryIO] = None,
):
replied_message = message.reply_to_message
resp = ["n", "no", "not","N","NOT","NO"]
if not replied_message:
return
if not replied_message.media:
return
text = message.text
try:
main_message = replied_message.reply_to_message
instruction = {
"privacy_type":"PRIVATE",
"user_id":message.from_user.id if (message.chat.type == ChatType.PRIVATE) else message.chat.id,
"user_type":"TELEGRAM"
}
#file_infos = get_file_info(main_message, instruction)
#All the Time Get_file_ids should be called before update privacy or else tagged_users will be {}
file_info = await db.update_privacy(get_file_info(main_message, instruction))
#file_info = await db.get_file_by_fileuniqueid_only(
# file_infos['file']['file_unique_id'])
mime_type = file_info['file']['mime_type']
file_id = file_info['file']['file_id']
file_size = file_info['file']['file_size']
message_id = replied_message.id
user_idx = message.from_user.id if (message.chat.type == ChatType.PRIVATE) else message.chat.id
if text.lower() not in resp:
ext = mimetypes.guess_extension(mime_type)
file_info['file']['file_name'] = f"{message.text}{ext}"
#index = min(WORK_LWORK_LOADS, key=WORK_LWORK_LOADS.get)
#faster_client = MULTI_CLIENTS[index]
client=await req_client()
print(f"Using {client['index']} for {file_info['file']['file_name']}")
logging.info(f"Client {client['index']} is now serving {request.headers.get('X-FORWARDED-FOR',request.remote)}")
tg_connect = TGFileController(client['client'])
req_file_id = await tg_connect.get_file_properties(file_info['_id'], MULTI_CLIENTS)
start_time = time.time()
file = await tg_connect.upload_file(
index=client['index'],
file_id=req_file_id,
file_name=file_info['file']['file_name'],
file_size=file_info['file']['file_size'],
progress=progress,
progress_args=(replied_message, file_info['file']['file_name'],file_info['file']['file_size'], start_time))
success_text = LANG.SUCCESS_PRIV_FILE.format(file_info['file']['file_name'], humanbytes(file_size))
await replied_message.edit_text(
text=success_text,
parse_mode=ParseMode.HTML,
disable_web_page_preview=True,
)
media = raw.types.InputMediaUploadedDocument(
mime_type=mime_type,
file=file,
force_file=False,
thumb=thumb,
attributes=[
raw.types.DocumentAttributeFilename(
file_name=file_info['file']['file_name'])
])
message_txt = f"* File Name: { file_info['file']['file_name']} \n* File Size :{humanbytes(file_info['file']['file_size'])} \n\n🔔 ᴛʜɪꜱ ꜰɪʟᴇ ɪꜱ ᴜᴘʟᴏᴀᴅᴇᴅ ᴛᴏ ᴘʀɪᴠᴀᴛᴇ ꜱᴘᴀᴄᴇ ʙʏ @ꜱᴘᴀʀᴋᴅʀɪᴠᴇ_ʙᴏᴛ"
send_file = await tg_connect.send(media=media,
caption=message_txt,
reply_to_msg_id=None,
chat_id=Telegram.PFLOG_CHANNEL)
reply_markup,stream_text = await gen_link(_id=file_info['_id'])
await replied_message.edit_text(
text=f"{message_txt}\n{stream_text}",
parse_mode=ParseMode.HTML,
disable_web_page_preview=True,
reply_markup=reply_markup,
)
instruction = {
"privacy_type":"PRIVATE",
"user_id":message.from_user.id if(message.chat.type == ChatType.PRIVATE) else message.chat.id,
"user_type":"TELEGRAM",
"REUPLOADED":"True"
}
file_info = get_file_info(send_file, instruction)
file_info['reupload']="True"
# Here we are Adding the File Into the database First
await db.add_private_file(file_info)
#await get_private_file_ids(False, inserted_id, message)
#All the Time Get_file_ids should be called before update privacy or else tagged_users will be {}
#await db.update_privacy(file_info)
except FloodWait as w:
print(f"Sleeping for {str(w.wait_time)}s")
await asyncio.sleep(w.wait_time)
await bot.send_message(
chat_id=Telegram.ULOG_GROUP,
text=
f"ɢᴏᴛ ғʟᴏᴏᴅᴡᴀɪᴛ ᴏғ {str(w.x)}s ғʀᴏᴍ {message.chat.title}\n\n**ᴄʜᴀɴɴᴇʟ ɪᴅ :** `{str(message.chat.id)}`",
disable_web_page_preview=True)
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
await bot.send_message(chat_id=Telegram.ULOG_GROUP,
text=f"**#EʀʀᴏʀTʀᴀᴄᴋᴇʙᴀᴄᴋ:** `{e} {exc_type, fname, exc_tb.tb_lineno}`",
disable_web_page_preview=True)
print(f"Cᴀɴ'ᴛ Eᴅɪᴛ Bʀᴏᴀᴅᴄᴀsᴛ Mᴇssᴀɢᴇ!\nEʀʀᴏʀ: **Gɪᴠᴇ ᴍᴇ ᴇᴅɪᴛ ᴘᴇʀᴍɪssɪᴏɴ ɪɴ ᴜᴘᴅᴀᴛᴇs ᴀɴᴅ ʙɪɴ Cʜᴀɴɴᴇʟ!{traceback.print_exc()} (upload_file)**")
#await db.delete_one_privfile(inserted_id)