From 490d972ee33b3832d42f3e659527e061ae83afe7 Mon Sep 17 00:00:00 2001 From: anonymousx97 <88324835+anonymousx97@users.noreply.github> Date: Sun, 9 Jul 2023 22:11:45 +0530 Subject: [PATCH] Social-DL V2 New Banner. Added Credits and Disclaimer. Refactored the bot into modules. switched to Latest Pyrogram. Switched to Custom Client Object. switched to Custom Message Object. Switched to Custom decorators. Switched to Custom filters. Switched to Classes for media extractors. Droped Wget Switched to native In_Memory_DL Added Gallery-dl Library. Added Twitter Image support. Added Threads Support. Added YouTube Videos up to 5 Minutes. Added Tiktok Pics Support. Added .help command. Added .shell command with Live shell output. Added Add-Del Sudo commands. Added Add-Del Chat commands. Added Block-Unblock Commands. Added Banner In About message. Added .reply as Echo command. Added restart confirmation. Catch Exceptions and log in the Log Channel. --- .gitignore | 1 + README.md | 128 ++++--- app/__init__.py | 9 + app/__main__.py | 8 + app/api/gallerydl.py | 27 ++ app/api/instagram.py | 65 ++++ app/api/reddit.py | 52 +++ app/api/threads.py | 30 ++ app/api/tiktok.py | 23 ++ app/api/tiktok_scraper.py | 682 +++++++++++++++++++++++++++++++++++ app/api/ytdl.py | 61 ++++ app/config.py | 20 + app/core/MediaHandler.py | 170 +++++++++ app/core/aiohttp_tools.py | 46 +++ app/core/client.py | 89 +++++ app/core/filters.py | 41 +++ app/core/message.py | 59 +++ app/core/scraper_config.py | 29 ++ app/core/shell.py | 49 +++ app/plugins/authorise.py | 149 ++++++++ app/plugins/bot.py | 32 ++ app/plugins/tgUtils.py | 75 ++++ app/plugins/tools.py | 76 ++++ app/social_dl.py | 39 ++ assets/social_downloader.png | Bin 0 -> 269018 bytes req.txt | 15 +- sample-config.env | 41 ++- socialbot.py | 554 ---------------------------- 28 files changed, 1944 insertions(+), 626 deletions(-) create mode 100755 app/__init__.py create mode 100755 app/__main__.py create mode 100644 app/api/gallerydl.py create mode 100755 app/api/instagram.py create mode 100755 app/api/reddit.py create mode 100644 app/api/threads.py create mode 100755 app/api/tiktok.py create mode 100644 app/api/tiktok_scraper.py create mode 100755 app/api/ytdl.py create mode 100644 app/config.py create mode 100644 app/core/MediaHandler.py create mode 100755 app/core/aiohttp_tools.py create mode 100755 app/core/client.py create mode 100644 app/core/filters.py create mode 100755 app/core/message.py create mode 100644 app/core/scraper_config.py create mode 100755 app/core/shell.py create mode 100644 app/plugins/authorise.py create mode 100755 app/plugins/bot.py create mode 100644 app/plugins/tgUtils.py create mode 100644 app/plugins/tools.py create mode 100644 app/social_dl.py create mode 100644 assets/social_downloader.png delete mode 100644 socialbot.py diff --git a/.gitignore b/.gitignore index 476d259..ee8ba97 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +__pycache__ config.env diff --git a/README.md b/README.md index cde0e32..7dba1a4 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,21 @@ -# Light weight Social Media downloader bot. - * Supported Platforms: - * Videos: Instagram, Tiktok, Twitter, YouTube Shorts - * Images: Instagram, Reddit - * Gif : Reddit +# Social Media downloader bot. +> Formerly "Lightweight Bot" XD -## Usage and Commands: - * Send supported links in any authorised chat/channel. - Bot will try to download and send the media. +![Header Image](https://github.com/anonymousx97/social-dl/blob/main/assets/social_downloader.png?raw=true) - * Owner only commands: - * `.dl link` to download and send media in any chat. - * `.bot update` to refresh chat list without restarting bot. - * `.bot restart` to restart bot. - * `.bot ids` to get chat / channel / user IDs. - * `.bot join or leave` to join / leave chat using ID. - * `.del` reply to a message to delete. - * `.purge` to delete all messages between command and replied message. +A Telegram User-Bot to Download Media from various websites and send in chat. - These commands can be used anywhere. +### Supported Platforms: + - Facebook + - Instagram + - Reddit + - Threads.net + - Tiktok + - Twitter + - YouTube - * Developer Mode Commands: - * `.sh` to run shell commands. - Example: `.sh ls` - - * `.exec` to run python code. - - Example: `.exec print(1)` - - These commands are dangerous and are disabled by default. - Add `DEV_MODE="yes"` in config to enable these. - -## For android local deploy: +### For android local deploy: * Download Latest [Termux](https://github.com/termux/termux-app/releases). ```bash # Change Default repository of termux. @@ -41,10 +25,10 @@ yes|apt update && yes|apt upgrade ``` -## Installation: +### Installation: ```bash # Install required packages. - apt install -y python git python-pip ffmpeg + apt install -y python3 git curl python-pip ffmpeg # Clone Repo. git clone -q https://github.com/anonymousx97/social-dl @@ -60,52 +44,78 @@ nano config.env ``` -## Config: +### Config: * Get API_ID and API_HASH from https://my.telegram.org/auth . * Generate String Session by running this in Termux: ```bash bash -c "$(curl -fsSL https://raw.githubusercontent.com/ux-termux/string/main/Termux.sh)" ``` - * It will ask you to choose pyrogram version. Select 2. + > It will ask you to choose pyrogram version. Select 2. - *
- Message_link : + * LOG_CHAT: Create A Log Channel and add it's id along with -100 at the beginning. + * API_KEYS: Optional Instagram scrapping keys from API. recommended to add if you wanna reduce Instagram dl failures. + + *
+ Tap here for The Message IDs : + Send 2 messages in your log channel, message text is an empty list : [] - * Create a private channel on TG. - * Send a list of Chat/Channel ids starting with -100 in your log channel like below. - Edit this message and add chats you want to add in future. -

- * Bot will automatically download links in those chats/channels. - * Now copy that message's link and you will get something like - https://t.me/c/123456789/1 - * So your values would be LOG=-100123456789 MESSAGE=1 + * Copy the links of those messages. + + * The last digits of these links are the message ids. + + * These two are your AUTO_DL_MESSAGE_ID and BLOCKED_USERS_MESSAGE_ID DB. + * Add their IDs in config respectively. + + + Now send another message but this time include your id in the list: [12345678] + + * Copy this message's link and add the message id in USERS_MESSAGE_ID var

- - * User : Your user id to control bot. * Trigger : Trigger to access bot. + * Dev Mode: Set to 1 if you want access to exec, sh, shell commands. + > These commands can Dangerous if used carelessly, Turn on at your own risk. + > if set to 1 both you and sudo users can use these commands. - -## Start bot +### Start bot ```bash - python socialbot.py + cd social-dl && python3 -m app ``` * If everything is correct you will get Started stdout in terminal and in your channel. + * Use `.help` to get list of commands in bot. -## Setup a quick run command for bot. - ```bash - echo "alias runbot='cd social-dl && python socialbot.py'" >> ~/.bashrc && bash - ``` - - Now you can run bot with `runbot` - -## Known limitations: +### Known Instagram limitations: * If deployed on a VPS or any server Instragram might block access to some content. After hitting Instagram's rate limit image download might not work because servers and vps usually have static IP and Instagram would block access. * Deploying it locally would solve all of those issues because most of us are likely to have dynamic IP. - Bot is made lightweight with local deploys in mind. But battery life will take some hit anyway. - * Logging in with your Instagram which would solve the rate-limit issues is not added and won't be added because 2 of my accounts were suspended till manual verification for using scrapping bots like these. + Bot is was made lightweight with local deploys in mind. But battery life will definitely take a hit. + * Logging in with your Instagram which would solve the rate-limit issues is not added and won't be added because 2 of my accounts were suspended till manual verification for using scrapping bots like these. ## Contact - * For any questions related to deploy or issues contact me on + * For any issues or questions related to deploy contact me on [Telegram](https://t.me/anonymousx97) + +# Special Thanks: + - [Dan](https://github.com/delivrance) for [Pyrogram](https://github.com/pyrogram/pyrogram) + - All Libraries used in the project. + + - [Kakashi](https://github.com/AshwinStr) for the Banner and helping with coding concepts. + + - [Userge-X](https://github.com/code-rgb/USERGE-X) and [UX-Jutsu](https://github.com/ashwinstr/ux-jutsu) for basic userbot concepts. + + - [NotShroud](https://t.me/NotShroudX97) for getting me into userbot stuff. + + - [Alicia Dark](https://github.com/Thegreatfoxxgoddess) for Social-DL Idea and inspiring / pushing me to explore modding TG bots. + + - [IsthisUser](https://github.com/dishapatel010) for helping with Instagram and threads support. + + - [Fnix](https://github.com/fnixdev), [Lucky Jain](https://github.com/lostb053), [Jeel Patel](https://t.me/jeelpatel231) for teaching/helping with code stuff and suggesting improvements. + - [Avinash Reddit](https://t.me/AvinashReddy3108) for suggesting the use of [Gallery-DL](https://github.com/mikf/gallery-dl) + + +# Disclaimer: +Social-DL provides a way for users to download and upload media. While I facilitate these actions, it is important to note that the content accessed, downloaded, or uploaded through the bot is entirely the responsibility of the users. I do not distribute or endorse any specific media content. + +Users are solely responsible for the types of media they download or upload using the Bot. They should ensure that they have the legal right to access or share the media files in question and comply with all applicable copyright laws and regulations. I do not monitor or control the nature, legality, or appropriateness of the content exchanged through the Bot. + +It is essential for users to exercise caution and use our service in accordance with the terms of service and relevant laws. Any activities performed by users utilizing the Bot are done at their own risk. I recommend users to respect intellectual property rights, adhere to copyright laws, and obtain proper permissions when necessary. diff --git a/app/__init__.py b/app/__init__.py new file mode 100755 index 0000000..9b61328 --- /dev/null +++ b/app/__init__.py @@ -0,0 +1,9 @@ +from dotenv import load_dotenv + +load_dotenv("config.env") + +from .config import Config +from .core.client import BOT + + +bot = BOT() diff --git a/app/__main__.py b/app/__main__.py new file mode 100755 index 0000000..07982af --- /dev/null +++ b/app/__main__.py @@ -0,0 +1,8 @@ +if __name__ == "__main__": + import tracemalloc + + from app import bot + import app.social_dl + + tracemalloc.start() + bot.run(bot.boot()) diff --git a/app/api/gallerydl.py b/app/api/gallerydl.py new file mode 100644 index 0000000..8e68ed8 --- /dev/null +++ b/app/api/gallerydl.py @@ -0,0 +1,27 @@ +import asyncio +import glob +import os +import time + +from app.core import shell +from app.core.scraper_config import ScraperConfig + + +class Gallery_DL(ScraperConfig): + def __init__(self, url): + super().__init__() + self.url = url + self.set_sauce(url) + + async def download_or_extract(self): + self.path = "downloads/" + str(time.time()) + os.makedirs(self.path) + try: + async with asyncio.timeout(30): + await shell.run_shell_cmd(f"gallery-dl -q --range '0-4' -D {self.path} '{self.url}'") + except TimeoutError: + pass + files = glob.glob(f"{self.path}/*") + if not files: + return self.cleanup() + self.link = self.success = True diff --git a/app/api/instagram.py b/app/api/instagram.py new file mode 100755 index 0000000..f92543e --- /dev/null +++ b/app/api/instagram.py @@ -0,0 +1,65 @@ +import os +from urllib.parse import urlparse + +from app import Config +from app.core import aiohttp_tools +from app.core.scraper_config import ScraperConfig + +API_KEYS = { "KEYS": Config.API_KEYS , "counter": 0 } + +class Instagram(ScraperConfig): + def __init__(self, url): + super().__init__() + shortcode = os.path.basename(urlparse(url).path.rstrip("/")) + self.url = ( + f"https://www.instagram.com/graphql/query?query_hash=2b0673e0dc4580674a88d426fe00ea90&variables=%7B%22shortcode%22%3A%22{shortcode}%22%7D" + ) + self.set_sauce(url) + + async def download_or_extract(self): + for func in [self.no_api_dl, self.api_dl]: + if await func(): + self.success = True + break + + async def no_api_dl(self): + response = await aiohttp_tools.get_json(url=self.url) + if not response or "data" not in response or not response["data"]["shortcode_media"]: + return + return await self.parse_ghraphql(response["data"]["shortcode_media"]) + + + async def api_dl(self): + param = {"api_key": await self.get_key(), "url": self.url, "proxy": "residential", "js": False} + response = await aiohttp_tools.get_json(url="https://api.webscraping.ai/html", timeout=30, params=param) + if not response or "data" not in response or not response["data"]["shortcode_media"]: + return + self.caption = ".." + return await self.parse_ghraphql(response["data"]["shortcode_media"]) + + async def parse_ghraphql(self, json_: dict): + type_check = json_.get("__typename", None) + if not type_check: + return + elif type_check == "GraphSidecar": + self.link = [i["node"].get("video_url") or i["node"].get("display_url") for i in json_["edge_sidecar_to_children"]["edges"]] + self.group = True + else: + if link := json_.get("video_url"): + self.link = link + self.thumb = json_.get("display_url") + self.video = True + else: + self.link = json_.get("display_url") + self.photo = True + return self.link + + # Rotating Key function to avoid hitting limit on single Key + async def get_key(self): + keys, count = API_KEYS + count += 1 + if count == len(keys): + count = 0 + ret_key = keys[count] + API_KEYS["counter"] = count + return ret_key diff --git a/app/api/reddit.py b/app/api/reddit.py new file mode 100755 index 0000000..fe43705 --- /dev/null +++ b/app/api/reddit.py @@ -0,0 +1,52 @@ +import os +import time +from urllib.parse import urlparse + +from app.core import aiohttp_tools, shell +from app.core.scraper_config import ScraperConfig + + +class Reddit(ScraperConfig): + def __init__(self, url): + super().__init__() + self.set_sauce(url) + parsed_url = urlparse(url) + self.url = f"https://www.reddit.com{parsed_url.path}.json?limit=1" + + async def download_or_extract(self): + headers = { + "user-agent": "Mozilla/5.0 (Macintosh; PPC Mac OS X 10_8_7 rv:5.0; en-US) AppleWebKit/533.31.5 (KHTML, like Gecko) Version/4.0 Safari/533.31.5" + } + response = await aiohttp_tools.get_json(url=self.url, headers=headers, json_=True) + if not response: + return + + try: + json_ = response[0]["data"]["children"][0]["data"] + except BaseException: + return + + self.caption = f"""__{json_["subreddit_name_prefixed"]}:__\n**{json_["title"]}**""" + + is_vid, is_gallery = json_.get("is_video"), json_.get("is_gallery") + + if is_vid: + self.path = "downloads/" + str(time.time()) + os.makedirs(self.path) + self.link = f"{self.path}/v.mp4" + vid_url = json_["secure_media"]["reddit_video"]["hls_url"] + await shell.run_shell_cmd(f'ffmpeg -hide_banner -loglevel error -i "{vid_url.strip()}" -c copy {self.link}') + self.thumb = await shell.take_ss(video=self.link, path=self.path) + self.video = self.success = True + + elif is_gallery: + self.link = [val["s"].get("u", val["s"].get("gif")).replace("preview", "i") for val in json_["media_metadata"].values()] + self.group = self.success = True + + else: + self.link = json_.get("preview", {}).get("reddit_video_preview", {}).get("fallback_url", json_.get("url_overridden_by_dest", "")).strip() + + if self.link.endswith(".gif"): + self.gif = self.success = True + else: + self.photo = self.success = True diff --git a/app/api/threads.py b/app/api/threads.py new file mode 100644 index 0000000..a36431d --- /dev/null +++ b/app/api/threads.py @@ -0,0 +1,30 @@ +import os +from urllib.parse import urlparse + +from bs4 import BeautifulSoup + +from app.core import aiohttp_tools +from app.core.scraper_config import ScraperConfig + + +class Threads(ScraperConfig): + def __init__(self, url): + super().__init__() + self.url = url + self.set_sauce(url) + + async def download_or_extract(self): + shortcode = os.path.basename(urlparse(self.url).path.rstrip("/")) + + response = await (await aiohttp_tools.SESSION.get(f"https://www.threads.net/t/{shortcode}/embed/")).text() + + soup = BeautifulSoup(response, "html.parser") + + if div := soup.find("div", {"class": "SingleInnerMediaContainer"}): + if video := div.find("video"): + self.link = video.find("source").get("src") + self.video = self.success = True + + elif image := div.find("img", {"class": "img"}): + self.link = image.get("src") + self.photo = self.success = True diff --git a/app/api/tiktok.py b/app/api/tiktok.py new file mode 100755 index 0000000..8a18067 --- /dev/null +++ b/app/api/tiktok.py @@ -0,0 +1,23 @@ +from app.api.tiktok_scraper import Scraper as Tiktok_Scraper +from app.core.scraper_config import ScraperConfig + +tiktok_scraper = Tiktok_Scraper(quiet=True) + + +class Tiktok(ScraperConfig): + def __init__(self, url): + super().__init__() + self.url = url + self.set_sauce(url) + + async def download_or_extract(self): + media = await tiktok_scraper.hybrid_parsing(self.url) + if not media or "status" not in media or media["status"] == "failed": + return + if "video_data" in media: + self.link = media["video_data"]["nwm_video_url_HQ"] + self.thumb = media["cover_data"]["dynamic_cover"]["url_list"][0] + self.video = self.success = True + if "image_data" in media: + self.link = media["image_data"]["no_watermark_image_list"] + self.group = self.success = True diff --git a/app/api/tiktok_scraper.py b/app/api/tiktok_scraper.py new file mode 100644 index 0000000..f0f184f --- /dev/null +++ b/app/api/tiktok_scraper.py @@ -0,0 +1,682 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- +# @Author: https://github.com/Evil0ctal/ +# @Time: 2021/11/06 +# @Update: 2023/03/08 +# @Version: 3.3.0 +# @Function: +# 核心代码,估值1块(๑•̀ㅂ•́)و✧ +# 用于爬取Douyin/TikTok数据并以字典形式返回。 +# input link, output dictionary. + + +import asyncio +import configparser +import os +import platform +import re +import time +import traceback +import urllib.parse +from typing import Union + +import aiohttp +import execjs +from tenacity import * + +quiet_mode = False + + +class Scraper: + """__________________________________________⬇️initialization(初始化)⬇️______________________________________""" + + # 初始化/initialization + def __init__(self, quiet: bool = False): + global quiet_mode + quiet_mode = quiet + self.headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" + } + self.douyin_api_headers = { + "accept-encoding": "gzip, deflate, br", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36", + "referer": "https://www.douyin.com/", + # 'cookie': "s_v_web_id=verify_leytkxgn_kvO5kOmO_SdMs_4t1o_B5ml_BUqtWM1mP6BF;" + } + self.tiktok_api_headers = { + "User-Agent": "com.ss.android.ugc.trill/494+Mozilla/5.0+(Linux;+Android+12;+2112123G+Build/SKQ1.211006.001;+wv)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Version/4.0+Chrome/107.0.5304.105+Mobile+Safari/537.36" + } + # 判断配置文件是否存在/Check if the configuration file exists + if os.path.exists("config.ini"): + self.config = configparser.ConfigParser() + self.config.read("config.ini", encoding="utf-8") + # 判断是否使用代理 + if self.config["Scraper"]["Proxy_switch"] == "True": + # 判断是否区别协议选择代理 + if self.config["Scraper"]["Use_different_protocols"] == "False": + self.proxies = {"all": self.config["Scraper"]["All"]} + else: + self.proxies = {"http": self.config["Scraper"]["Http_proxy"], "https": self.config["Scraper"]["Https_proxy"]} + else: + self.proxies = None + # 配置文件不存在则不使用代理/If the configuration file does not exist, do not use + # the proxy + else: + self.proxies = None + # 针对Windows系统的异步事件规则/Asynchronous event rules for Windows systems + if platform.system() == "Windows": + asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) + + """__________________________________________⬇️utils(实用程序)⬇️______________________________________""" + + # 检索字符串中的链接/Retrieve links from string + @staticmethod + def get_url(text: str) -> Union[str, None]: + try: + # 从输入文字中提取索引链接存入列表/Extract index links from input text and store in + # list + url = re.findall("http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+", text) + # 判断是否有链接/Check if there is a link + if len(url) > 0: + return url[0] + except Exception as e: + if not quiet_mode: + print("Error in get_url:", e) + return None + + # 生成X-Bogus签名/Generate X-Bogus signature + @staticmethod + def generate_x_bogus_url(url: str, headers: dict) -> str: + query = urllib.parse.urlparse(url).query + xbogus = execjs.compile(open("./X-Bogus.js").read()).call("sign", query, headers["User-Agent"]) + new_url = url + "&X-Bogus=" + xbogus + return new_url + + # 转换链接/convert url + @retry(stop=stop_after_attempt(4), wait=wait_fixed(7)) + async def convert_share_urls(self, url: str) -> Union[str, None]: + """ + 用于将分享链接(短链接)转换为原始链接/Convert share links (short links) to original links + :return: 原始链接/Original link + """ + # 检索字符串中的链接/Retrieve links from string + url = self.get_url(url) + # 判断是否有链接/Check if there is a link + if url is None: + if not quiet_mode: + print("无法检索到链接/Unable to retrieve link") + return None + # 判断是否为抖音分享链接/judge if it is a douyin share link + if "douyin" in url: + """ + 抖音视频链接类型(不全): + 1. https://v.douyin.com/MuKhKn3/ + 2. https://www.douyin.com/video/7157519152863890719 + 3. https://www.iesdouyin.com/share/video/7157519152863890719/?region=CN&mid=7157519152863890719&u_code=ffe6jgjg&titleType=title×tamp=1600000000&utm_source=copy_link&utm_campaign=client_share&utm_medium=android&app=aweme&iid=123456789&share_id=123456789 + 抖音用户链接类型(不全): + 1. https://www.douyin.com/user/MS4wLjABAAAAbLMPpOhVk441et7z7ECGcmGrK42KtoWOuR0_7pLZCcyFheA9__asY-kGfNAtYqXR?relation=0&vid=7157519152863890719 + 2. https://v.douyin.com/MuKoFP4/ + 抖音直播链接类型(不全): + 1. https://live.douyin.com/88815422890 + """ + if "v.douyin" in url: + # 转换链接/convert url + # 例子/Example: https://v.douyin.com/rLyAJgf/8.74 + url = re.compile(r"(https://v.douyin.com/)\w+", re.I).match(url).group() + if not quiet_mode: + print("正在通过抖音分享链接获取原始链接...") + try: + async with aiohttp.ClientSession() as session: + async with session.get(url, headers=self.headers, proxy=self.proxies, allow_redirects=False, timeout=10) as response: + if response.status == 302: + url = ( + response.headers["Location"].split("?")[0] + if "?" in response.headers["Location"] + else response.headers["Location"] + ) + if not quiet_mode: + print("获取原始链接成功, 原始链接为: {}".format(url)) + return url + except Exception as e: + if not quiet_mode: + print("获取原始链接失败!") + print(e) + # return None + raise e + else: + if not quiet_mode: + print("该链接为原始链接,无需转换,原始链接为: {}".format(url)) + return url + # 判断是否为TikTok分享链接/judge if it is a TikTok share link + elif "tiktok" in url: + """ + TikTok视频链接类型(不全): + 1. https://www.tiktok.com/@tiktok/video/6950000000000000000 + 2. https://www.tiktok.com/t/ZTRHcXS2C/ + TikTok用户链接类型(不全): + 1. https://www.tiktok.com/@tiktok + """ + if "@" in url: + if not quiet_mode: + print("该链接为原始链接,无需转换,原始链接为: {}".format(url)) + return url + else: + if not quiet_mode: + print("正在通过TikTok分享链接获取原始链接...") + try: + async with aiohttp.ClientSession() as session: + async with session.get(url, headers=self.headers, proxy=self.proxies, allow_redirects=False, timeout=10) as response: + if response.status == 301: + url = ( + response.headers["Location"].split("?")[0] + if "?" in response.headers["Location"] + else response.headers["Location"] + ) + if not quiet_mode: + print("获取原始链接成功, 原始链接为: {}".format(url)) + return url + except Exception as e: + if not quiet_mode: + print("获取原始链接失败!") + print(e) + return None + + """__________________________________________⬇️Douyin methods(抖音方法)⬇️______________________________________""" + + """ + Credits: https://github.com/Johnserf-Seed + [中文] + 感谢John为本项目提供了非常多的帮助 + 大家可以去他的仓库点个star :) + 顺便打个广告, 如果需要更稳定、快速、长期维护的抖音/TikTok API, 或者需要更多的数据(APP端), + 请移步: https://api.tikhub.io + + [English] + Thanks to John for providing a lot of help to this project + You can go to his repository and give him a star :) + By the way, if you need a more stable, fast and long-term maintenance Douyin/TikTok API, or need more data (APP side), + Please go to: https://api.tikhub.io + """ + + # 生成抖音X-Bogus签名/Generate Douyin X-Bogus signature + # 下面的代码不能保证稳定性,随时可能失效/ The code below cannot guarantee stability and may + # fail at any time + def generate_x_bogus_url(self, url: str) -> str: + """ + 生成抖音X-Bogus签名 + :param url: 视频链接 + :return: 包含X-Bogus签名的URL + """ + # 调用JavaScript函数 + query = urllib.parse.urlparse(url).query + xbogus = execjs.compile(open("./X-Bogus.js").read()).call("sign", query, self.headers["User-Agent"]) + if not quiet_mode: + print("生成的X-Bogus签名为: {}".format(xbogus)) + new_url = url + "&X-Bogus=" + xbogus + return new_url + + # 获取抖音视频ID/Get Douyin video ID + async def get_douyin_video_id(self, original_url: str) -> Union[str, None]: + """ + 获取视频id + :param original_url: 视频链接 + :return: 视频id + """ + # 正则匹配出视频ID + try: + video_url = await self.convert_share_urls(original_url) + # 链接类型: + # 视频页 https://www.douyin.com/video/7086770907674348841 + if "/video/" in video_url: + key = re.findall("/video/(\d+)?", video_url)[0] + if not quiet_mode: + print("获取到的抖音视频ID为: {}".format(key)) + return key + # 发现页 https://www.douyin.com/discover?modal_id=7086770907674348841 + elif "discover?" in video_url: + key = re.findall("modal_id=(\d+)", video_url)[0] + if not quiet_mode: + print("获取到的抖音视频ID为: {}".format(key)) + return key + # 直播页 + elif "live.douyin" in video_url: + # https://live.douyin.com/1000000000000000000 + video_url = video_url.split("?")[0] if "?" in video_url else video_url + key = video_url.replace("https://live.douyin.com/", "") + if not quiet_mode: + print("获取到的抖音直播ID为: {}".format(key)) + return key + # note + elif "note" in video_url: + # https://www.douyin.com/note/7086770907674348841 + key = re.findall("/note/(\d+)?", video_url)[0] + if not quiet_mode: + print("获取到的抖音笔记ID为: {}".format(key)) + return key + except Exception as e: + if not quiet_mode: + print("获取抖音视频ID出错了:{}".format(e)) + return None + + # 获取单个抖音视频数据/Get single Douyin video data + @retry(stop=stop_after_attempt(4), wait=wait_fixed(7)) + async def get_douyin_video_data(self, video_id: str) -> Union[dict, None]: + """ + :param video_id: str - 抖音视频id + :return:dict - 包含信息的字典 + """ + if not quiet_mode: + print("正在获取抖音视频数据...") + try: + # 构造访问链接/Construct the access link + api_url = f"https://www.douyin.com/aweme/v1/web/aweme/detail/?device_platform=webapp&aid=6383&channel=channel_pc_web&aweme_id={video_id}&pc_client_type=1&version_code=190500&version_name=19.5.0&cookie_enabled=true&screen_width=1344&screen_height=756&browser_language=zh-CN&browser_platform=Win32&browser_name=Firefox&browser_version=110.0&browser_online=true&engine_name=Gecko&engine_version=109.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=&platform=PC&webid=7158288523463362079&msToken=abL8SeUTPa9-EToD8qfC7toScSADxpg6yLh2dbNcpWHzE0bT04txM_4UwquIcRvkRb9IU8sifwgM1Kwf1Lsld81o9Irt2_yNyUbbQPSUO8EfVlZJ_78FckDFnwVBVUVK" + api_url = self.generate_x_bogus_url(api_url) + # 访问API/Access API + if not quiet_mode: + print("正在获取视频数据API: {}".format(api_url)) + async with aiohttp.ClientSession() as session: + async with session.get(api_url, headers=self.douyin_api_headers, proxy=self.proxies, timeout=10) as response: + response = await response.json() + # 获取视频数据/Get video data + video_data = response["aweme_detail"] + if not quiet_mode: + print("获取视频数据成功!") + # print("抖音API返回数据: {}".format(video_data)) + return video_data + except Exception as e: + if not quiet_mode: + print("获取抖音视频数据失败!原因:{}".format(e)) + # return None + raise e + + # 获取单个抖音直播视频数据/Get single Douyin Live video data + # 暂时不可用,待修复。 + @retry(stop=stop_after_attempt(4), wait=wait_fixed(7)) + async def get_douyin_live_video_data(self, web_rid: str) -> Union[dict, None]: + if not quiet_mode: + print("正在获取抖音视频数据...") + try: + # 构造访问链接/Construct the access link + api_url = f"https://live.douyin.com/webcast/web/enter/?aid=6383&web_rid={web_rid}" + # 访问API/Access API + if not quiet_mode: + print("正在获取视频数据API: {}".format(api_url)) + async with aiohttp.ClientSession() as session: + async with session.get(api_url, headers=self.douyin_api_headers, proxy=self.proxies, timeout=10) as response: + response = await response.json() + # 获取视频数据/Get video data + video_data = response["data"] + if not quiet_mode: + print(video_data) + print("获取视频数据成功!") + # print("抖音API返回数据: {}".format(video_data)) + return video_data + except Exception as e: + if not quiet_mode: + print("获取抖音视频数据失败!原因:{}".format(e)) + # return None + raise e + + # 获取单个抖音视频数据/Get single Douyin video data + @retry(stop=stop_after_attempt(4), wait=wait_fixed(7)) + async def get_douyin_user_profile_videos(self, profile_url: str, tikhub_token: str) -> Union[dict, None]: + try: + api_url = f"https://api.tikhub.io/douyin_profile_videos/?douyin_profile_url={profile_url}&cursor=0&count=20" + _headers = {"Authorization": f"Bearer {tikhub_token}"} + async with aiohttp.ClientSession() as session: + async with session.get(api_url, headers=_headers, proxy=self.proxies, timeout=10) as response: + response = await response.json() + return response + except Exception as e: + if not quiet_mode: + print("获取抖音视频数据失败!原因:{}".format(e)) + # return None + raise e + + # 获取抖音主页点赞视频数据/Get Douyin profile like video data + @retry(stop=stop_after_attempt(4), wait=wait_fixed(7)) + async def get_douyin_profile_liked_data(self, profile_url: str, tikhub_token: str) -> Union[dict, None]: + try: + api_url = f"https://api.tikhub.io/douyin_profile_liked_videos/?douyin_profile_url={profile_url}&cursor=0&count=20" + _headers = {"Authorization": f"Bearer {tikhub_token}"} + async with aiohttp.ClientSession() as session: + async with session.get(api_url, headers=_headers, proxy=self.proxies, timeout=10) as response: + response = await response.json() + return response + except Exception as e: + if not quiet_mode: + print("获取抖音视频数据失败!原因:{}".format(e)) + # return None + raise e + + # 获取抖音视频评论数据/Get Douyin video comment data + @retry(stop=stop_after_attempt(4), wait=wait_fixed(7)) + async def get_douyin_video_comments(self, video_url: str, tikhub_token: str) -> Union[dict, None]: + try: + api_url = f"https://api.tikhub.io/douyin_video_comments/?douyin_video_url={video_url}&cursor=0&count=20" + _headers = {"Authorization": f"Bearer {tikhub_token}"} + async with aiohttp.ClientSession() as session: + async with session.get(api_url, headers=_headers, proxy=self.proxies, timeout=10) as response: + response = await response.json() + return response + except Exception as e: + if not quiet_mode: + print("获取抖音视频数据失败!原因:{}".format(e)) + # return None + raise e + + """__________________________________________⬇️TikTok methods(TikTok方法)⬇️______________________________________""" + + # 获取TikTok视频ID/Get TikTok video ID + async def get_tiktok_video_id(self, original_url: str) -> Union[str, None]: + """ + 获取视频id + :param original_url: 视频链接 + :return: 视频id + """ + try: + # 转换链接/Convert link + original_url = await self.convert_share_urls(original_url) + # 获取视频ID/Get video ID + if "/video/" in original_url: + video_id = re.findall("/video/(\d+)", original_url)[0] + elif "/v/" in original_url: + video_id = re.findall("/v/(\d+)", original_url)[0] + if not quiet_mode: + print("获取到的TikTok视频ID是{}".format(video_id)) + # 返回视频ID/Return video ID + return video_id + except Exception as e: + if not quiet_mode: + print("获取TikTok视频ID出错了:{}".format(e)) + return None + + @retry(stop=stop_after_attempt(4), wait=wait_fixed(7)) + async def get_tiktok_video_data(self, video_id: str) -> Union[dict, None]: + """ + 获取单个视频信息 + :param video_id: 视频id + :return: 视频信息 + """ + if not quiet_mode: + print("正在获取TikTok视频数据...") + try: + # 构造访问链接/Construct the access link + api_url = f"https://api16-normal-c-useast1a.tiktokv.com/aweme/v1/feed/?aweme_id={video_id}" + if not quiet_mode: + print("正在获取视频数据API: {}".format(api_url)) + async with aiohttp.ClientSession() as session: + async with session.get(api_url, headers=self.tiktok_api_headers, proxy=self.proxies, timeout=10) as response: + response = await response.json() + video_data = response["aweme_list"][0] + if not quiet_mode: + print("获取视频信息成功!") + return video_data + except Exception as e: + if not quiet_mode: + print("获取视频信息失败!原因:{}".format(e)) + # return None + raise e + + @retry(stop=stop_after_attempt(4), wait=wait_fixed(7)) + async def get_tiktok_user_profile_videos(self, tiktok_video_url: str, tikhub_token: str) -> Union[dict, None]: + try: + api_url = f"https://api.tikhub.io/tiktok_profile_videos/?tiktok_video_url={tiktok_video_url}&cursor=0&count=20" + _headers = {"Authorization": f"Bearer {tikhub_token}"} + async with aiohttp.ClientSession() as session: + async with session.get(api_url, headers=_headers, proxy=self.proxies, timeout=10) as response: + response = await response.json() + return response + except Exception as e: + if not quiet_mode: + print("获取抖音视频数据失败!原因:{}".format(e)) + # return None + raise e + + @retry(stop=stop_after_attempt(4), wait=wait_fixed(7)) + async def get_tiktok_user_profile_liked_videos(self, tiktok_video_url: str, tikhub_token: str) -> Union[dict, None]: + try: + api_url = f"https://api.tikhub.io/tiktok_profile_liked_videos/?tiktok_video_url={tiktok_video_url}&cursor=0&count=20" + _headers = {"Authorization": f"Bearer {tikhub_token}"} + async with aiohttp.ClientSession() as session: + async with session.get(api_url, headers=_headers, proxy=self.proxies, timeout=10) as response: + response = await response.json() + return response + except Exception as e: + if not quiet_mode: + print("获取抖音视频数据失败!原因:{}".format(e)) + # return None + raise e + + """__________________________________________⬇️Hybrid methods(混合方法)⬇️______________________________________""" + + # 自定义获取数据/Custom data acquisition + async def hybrid_parsing(self, video_url: str) -> dict: + # URL平台判断/Judge URL platform + url_platform = "douyin" if "douyin" in video_url else "tiktok" + if not quiet_mode: + print("当前链接平台为:{}".format(url_platform)) + # 获取视频ID/Get video ID + print("正在获取视频ID...") + video_id = await self.get_douyin_video_id(video_url) if url_platform == "douyin" else await self.get_tiktok_video_id(video_url) + if video_id: + if not quiet_mode: + print("获取视频ID成功,视频ID为:{}".format(video_id)) + # 获取视频数据/Get video data + print("正在获取视频数据...") + data = await self.get_douyin_video_data(video_id) if url_platform == "douyin" else await self.get_tiktok_video_data(video_id) + if data: + if not quiet_mode: + print("获取视频数据成功,正在判断数据类型...") + url_type_code = data["aweme_type"] + """以下为抖音/TikTok类型代码/Type code for Douyin/TikTok""" + url_type_code_dict = { + # 抖音/Douyin + 2: "image", + 4: "video", + 68: "image", + # TikTok + 0: "video", + 51: "video", + 55: "video", + 58: "video", + 61: "video", + 150: "image", + } + # 获取视频类型/Get video type + # 如果类型代码不存在,则默认为视频类型/If the type code does not exist, it is + # assumed to be a video type + url_type = url_type_code_dict.get(url_type_code, "video") + if not quiet_mode: + print("数据类型代码: {}".format(url_type_code)) + # 判断链接类型/Judge link type + + print("数据类型: {}".format(url_type)) + print("准备开始判断并处理数据...") + + """ + 以下为(视频||图片)数据处理的四个方法,如果你需要自定义数据处理请在这里修改. + The following are four methods of (video || image) data processing. + If you need to customize data processing, please modify it here. + """ + + """ + 创建已知数据字典(索引相同),稍后使用.update()方法更新数据 + Create a known data dictionary (index the same), + and then use the .update() method to update the data + """ + + result_data = { + "status": "success", + "message": "更多接口请查看(More API see): https://api.tikhub.io/docs", + "type": url_type, + "platform": url_platform, + "aweme_id": video_id, + "official_api_url": { + "User-Agent": self.headers["User-Agent"], + "api_url": f"https://www.iesdouyin.com/aweme/v1/web/aweme/detail/?aweme_id={video_id}&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333&Github=Evil0ctal&words=FXXK_U_ByteDance", + } + if url_platform == "douyin" + else { + "User-Agent": self.tiktok_api_headers["User-Agent"], + "api_url": f"https://api16-normal-c-useast1a.tiktokv.com/aweme/v1/feed/?aweme_id={video_id}", + }, + "desc": data.get("desc"), + "create_time": data.get("create_time"), + "author": data.get("author"), + "music": data.get("music"), + "statistics": data.get("statistics"), + "cover_data": { + "cover": data.get("video").get("cover"), + "origin_cover": data.get("video").get("origin_cover"), + "dynamic_cover": data.get("video").get("dynamic_cover"), + }, + "hashtags": data.get("text_extra"), + } + # 创建一个空变量,稍后使用.update()方法更新数据/Create an empty variable and use + # the .update() method to update the data + api_data = None + # 判断链接类型并处理数据/Judge link type and process data + try: + # 抖音数据处理/Douyin data processing + if url_platform == "douyin": + # 抖音视频数据处理/Douyin video data processing + if url_type == "video": + if not quiet_mode: + print("正在处理抖音视频数据...") + # 将信息储存在字典中/Store information in a dictionary + uri = data["video"]["play_addr"]["uri"] + wm_video_url = data["video"]["play_addr"]["url_list"][0] + wm_video_url_HQ = f"https://aweme.snssdk.com/aweme/v1/playwm/?video_id={uri}&radio=1080p&line=0" + nwm_video_url = wm_video_url.replace("playwm", "play") + nwm_video_url_HQ = f"https://aweme.snssdk.com/aweme/v1/play/?video_id={uri}&ratio=1080p&line=0" + api_data = { + "video_data": { + "wm_video_url": wm_video_url, + "wm_video_url_HQ": wm_video_url_HQ, + "nwm_video_url": nwm_video_url, + "nwm_video_url_HQ": nwm_video_url_HQ, + } + } + # 抖音图片数据处理/Douyin image data processing + elif url_type == "image": + if not quiet_mode: + print("正在处理抖音图片数据...") + # 无水印图片列表/No watermark image list + no_watermark_image_list = [] + # 有水印图片列表/With watermark image list + watermark_image_list = [] + # 遍历图片列表/Traverse image list + for i in data["images"]: + no_watermark_image_list.append(i["url_list"][0]) + watermark_image_list.append(i["download_url_list"][0]) + api_data = { + "image_data": {"no_watermark_image_list": no_watermark_image_list, "watermark_image_list": watermark_image_list} + } + # TikTok数据处理/TikTok data processing + elif url_platform == "tiktok": + # TikTok视频数据处理/TikTok video data processing + if url_type == "video": + if not quiet_mode: + print("正在处理TikTok视频数据...") + # 将信息储存在字典中/Store information in a dictionary + wm_video = data["video"]["download_addr"]["url_list"][0] + api_data = { + "video_data": { + "wm_video_url": wm_video, + "wm_video_url_HQ": wm_video, + "nwm_video_url": data["video"]["play_addr"]["url_list"][0], + "nwm_video_url_HQ": data["video"]["bit_rate"][0]["play_addr"]["url_list"][0], + } + } + # TikTok图片数据处理/TikTok image data processing + elif url_type == "image": + if not quiet_mode: + print("正在处理TikTok图片数据...") + # 无水印图片列表/No watermark image list + no_watermark_image_list = [] + # 有水印图片列表/With watermark image list + watermark_image_list = [] + for i in data["image_post_info"]["images"]: + no_watermark_image_list.append(i["display_image"]["url_list"][0]) + watermark_image_list.append(i["owner_watermark_image"]["url_list"][0]) + api_data = { + "image_data": {"no_watermark_image_list": no_watermark_image_list, "watermark_image_list": watermark_image_list} + } + # 更新数据/Update data + result_data.update(api_data) + # print("数据处理完成,最终数据: \n{}".format(result_data)) + # 返回数据/Return data + return result_data + except Exception as e: + if not quiet_mode: + traceback.print_exc() + print("数据处理失败!") + return {"status": "failed", "message": "数据处理失败!/Data processing failed!"} + else: + if not quiet_mode: + print("[抖音|TikTok方法]返回数据为空,无法处理!") + return {"status": "failed", "message": "返回数据为空,无法处理!/Return data is empty and cannot be processed!"} + else: + if not quiet_mode: + print("获取视频ID失败!") + return {"status": "failed", "message": "获取视频ID失败!/Failed to get video ID!"} + + # 处理数据方便快捷指令使用/Process data for easy-to-use shortcuts + @staticmethod + def hybrid_parsing_minimal(data: dict) -> dict: + # 如果数据获取成功/If the data is successfully obtained + if data["status"] == "success": + result = { + "status": "success", + "message": data.get("message"), + "platform": data.get("platform"), + "type": data.get("type"), + "desc": data.get("desc"), + "wm_video_url": data["video_data"]["wm_video_url"] if data["type"] == "video" else None, + "wm_video_url_HQ": data["video_data"]["wm_video_url_HQ"] if data["type"] == "video" else None, + "nwm_video_url": data["video_data"]["nwm_video_url"] if data["type"] == "video" else None, + "nwm_video_url_HQ": data["video_data"]["nwm_video_url_HQ"] if data["type"] == "video" else None, + "no_watermark_image_list": data["image_data"]["no_watermark_image_list"] if data["type"] == "image" else None, + "watermark_image_list": data["image_data"]["watermark_image_list"] if data["type"] == "image" else None, + } + return result + else: + return data + + +"""__________________________________________⬇️Test methods(测试方法)⬇️______________________________________""" + + +async def async_test(_douyin_url: str = None, _tiktok_url: str = None) -> None: + # 异步测试/Async test + start_time = time.time() + print("正在进行异步测试...") + + print("正在测试异步获取抖音视频ID方法...") + douyin_id = await api.get_douyin_video_id(_douyin_url) + print("正在测试异步获取抖音视频数据方法...") + await api.get_douyin_video_data(douyin_id) + + print("正在测试异步获取TikTok视频ID方法...") + tiktok_id = await api.get_tiktok_video_id(_tiktok_url) + print("正在测试异步获取TikTok视频数据方法...") + await api.get_tiktok_video_data(tiktok_id) + + print("正在测试异步混合解析方法...") + await api.hybrid_parsing(_douyin_url) + await api.hybrid_parsing(_tiktok_url) + + # 总耗时/Total time + total_time = round(time.time() - start_time, 2) + print("异步测试完成,总耗时: {}s".format(total_time)) + + +if __name__ == "__main__": + api = Scraper() + # 运行测试 + # params = "device_platform=webapp&aid=6383&channel=channel_pc_web&aweme_id=7153585499477757192&pc_client_type=1&version_code=190500&version_name=19.5.0&cookie_enabled=true&screen_width=1344&screen_height=756&browser_language=zh-CN&browser_platform=Win32&browser_name=Firefox&browser_version=110.0&browser_online=true&engine_name=Gecko&engine_version=109.0&os_name=Windows&os_version=10&cpu_core_num=16&device_memory=&platform=PC&webid=7158288523463362079" + # api.generate_x_bogus(params) + douyin_url = "https://v.douyin.com/rLyrQxA/6.66" + tiktok_url = "https://vt.tiktok.com/ZSRwWXtdr/" + asyncio.run(async_test(_douyin_url=douyin_url, _tiktok_url=tiktok_url)) diff --git a/app/api/ytdl.py b/app/api/ytdl.py new file mode 100755 index 0000000..01555b5 --- /dev/null +++ b/app/api/ytdl.py @@ -0,0 +1,61 @@ +import asyncio +import os +import time + +import yt_dlp + +from app.core.scraper_config import ScraperConfig +from app.core.shell import take_ss + + +# To disable YT-DLP logging +# https://github.com/ytdl-org/youtube-dl/blob/fa7f0effbe4e14fcf70e1dc4496371c9862b64b9/test/helper.py#L92 +class FakeLogger(object): + def debug(self, msg): + pass + + def warning(self, msg): + pass + + def error(self, msg): + pass + + +class YT_DL(ScraperConfig): + def __init__(self, url): + super().__init__() + self.set_sauce(url) + self.url = url + self.path = "downloads/" + str(time.time()) + self.video_path = self.path + "/v.mp4" + self._opts = { + "outtmpl": self.video_path, + "ignoreerrors": True, + "ignore_no_formats_error": True, + "quiet": True, + "logger": FakeLogger(), + "noplaylist": True, + "format": "best[ext=mp4]", + } + + async def download_or_extract(self): + if "youtu" in self.url: + self._opts["format"] = "bv[ext=mp4][res=480]+ba[ext=m4a]/b[ext=mp4]" + if "shorts" in self.url: + self._opts["format"] = "bv[ext=mp4][res=720]+ba[ext=m4a]/b[ext=mp4]" + + yt_obj = yt_dlp.YoutubeDL(self._opts) + + info = yt_obj.extract_info(self.url, download=False) + if info.get("duration", 0) >= 300: + return + + await asyncio.to_thread(yt_obj.download, self.url) + + if "youtu" in self.url: + self.caption = f"""__{info.get("channel","")}__:\n**{info.get("title","")}**""" + + if os.path.isfile(self.video_path): + self.link = self.video_path + self.thumb = await take_ss(self.video_path, path=self.path) + self.video = self.success = True diff --git a/app/config.py b/app/config.py new file mode 100644 index 0000000..4914082 --- /dev/null +++ b/app/config.py @@ -0,0 +1,20 @@ +import os +import json + +class Config: + API_KEYS = json.loads(os.envion.get("API_KEYS", "[]")) + + BLOCKED_USERS = [] + BLOCKED_USERS_MESSAGE_ID = int(os.environ.get("BLOCKED_USERS_MESSAGE_ID",0)) + + CHATS = [] + AUTO_DL_MESSAGE_ID = int(os.environ.get("AUTO_DL_MESSAGE_ID",0)) + + CMD_DICT = {} + + DEV_MODE = int(os.environ.get("DEV_MODE", 0)) + LOG_CHAT = int(os.environ.get("LOG_CHAT")) + TRIGGER = os.environ.get("TRIGGER", ".") + + USERS = [] + USERS_MESSAGE_ID = int(os.environ.get("USERS_MESSAGE_ID",0)) \ No newline at end of file diff --git a/app/core/MediaHandler.py b/app/core/MediaHandler.py new file mode 100644 index 0000000..dd2cc77 --- /dev/null +++ b/app/core/MediaHandler.py @@ -0,0 +1,170 @@ +import asyncio +import glob +import os +import traceback +from urllib.parse import urlparse + +from pyrogram.errors import MediaEmpty, PhotoSaveFileInvalid, WebpageCurlFailed +from pyrogram.types import InputMediaPhoto, InputMediaVideo + +from app.api.gallerydl import Gallery_DL +from app.api.instagram import Instagram +from app.api.reddit import Reddit +from app.api.threads import Threads +from app.api.tiktok import Tiktok +from app.api.ytdl import YT_DL +from app.core import aiohttp_tools, shell + +# Thanks Jeel Patel for the concept TG[@jeelpatel231] + +url_map = { + "tiktok.com": Tiktok, + "www.instagram.com": Instagram, + "www.reddit.com": Reddit, + "reddit.com": Reddit, + "www.threads.net": Threads, + "twitter.com": Gallery_DL, + "youtube.com": YT_DL, + "youtu.be": YT_DL, + "www.facebook.com": YT_DL, +} + + +class ExtractAndSendMedia: + def __init__(self, message): + self.exceptions, self.media_objects = [], [] + self.message = message + self.doc = "-d" in message.flags + self.spoiler = "-s" in message.flags + self.sender = "" if "-ns" in message.flags else f"\nShared by : {self.extract_sender()}" + self.args_ = {"chat_id": self.message.chat.id, "reply_to_message_id": message.reply_id} + + def extract_sender(self): + author = self.message.author_signature + sender = user.first_name if (user := self.message.from_user) else "" + return author or sender + + async def get_media(self): + async with asyncio.TaskGroup() as task_group: + tasks = [] + for link in self.message.get_text_list: + if match := url_map.get(urlparse(link).netloc): + tasks.append(task_group.create_task(match.start(link))) + else: + for key, val in url_map.items(): + if key in link: + tasks.append(task_group.create_task(val.start(link))) + self.media_objects = [task.result() for task in tasks if task.result()] + + async def send_media(self): + for obj in self.media_objects: + if "-nc" in self.message.flags: + caption = "" + else: + caption = obj.caption + obj.caption_url + self.sender + try: + if self.doc: + await self.send_document(obj.link, caption=caption, path=obj.path) + elif obj.group: + await self.send_group(obj, caption=caption) + elif obj.photo: + await self.send_photo(obj.link, caption=caption) + elif obj.video: + await self.send_video(obj.link, thumb=obj.thumb, caption=caption) + elif obj.gif: + await self.send_animation(obj.link, caption=caption) + except BaseException: + self.exceptions.append(traceback.format_exc()) + + async def send_photo(self, photo, caption): + try: + try: + await self.message._client.send_photo(**self.args_, photo=photo, caption=caption, has_spoiler=self.spoiler) + except (MediaEmpty, WebpageCurlFailed): + photo = await aiohttp_tools.in_memory_dl(photo) + await self.message._client.send_photo(**self.args_, photo=photo, caption=caption, has_spoiler=self.spoiler) + except PhotoSaveFileInvalid: + await self.message._client.send_document(**self.args, document=photo, caption=caption, force_document=True) + + async def send_video(self, video, caption, thumb): + try: + await self.message._client.send_video( + **self.args_, video=video, caption=caption, thumb=await aiohttp_tools.thumb_dl(thumb), has_spoiler=self.spoiler + ) + except (MediaEmpty, WebpageCurlFailed): + video = await aiohttp_tools.in_memory_dl(video) + await self.message._client.send_video( + **self.args_, video=video, caption=caption, thumb=await aiohttp_tools.thumb_dl(thumb), has_spoiler=self.spoiler + ) + + async def send_animation(self, gif, caption): + try: + await self.message._client.send_animation(**self.args_, animation=gif, caption=caption, unsave=True, has_spoiler=self.spoiler) + except (MediaEmpty, WebpageCurlFailed): + gif = await aiohttp_tools.in_memory_dl(gif) + await self.message._client.send_animation(**self.args_, animation=gif, caption=caption, unsave=True, has_spoiler=self.spoiler) + + async def send_document(self, docs, caption, path=""): + if not path: + docs = await asyncio.gather(*[aiohttp_tools.in_memory_dl(doc) for doc in docs]) + else: + [os.rename(file_, file_ + ".png") for file_ in glob.glob(f"{path}/*.webp")] + docs = glob.glob(f"{path}/*") + for doc in docs: + try: + await self.message._client.send_document(**self.args_, document=doc, caption=caption, force_document=True) + except (MediaEmpty, WebpageCurlFailed): + doc = await aiohttp_tools.in_memory_dl(doc) + await self.message._client.send_document(**self.args_, document=doc, caption=caption, force_document=True) + await asyncio.sleep(0.5) + + async def send_group(self, media, caption): + if media.path: + sorted = await self.sort_media_path(media.path, caption) + else: + sorted = await self.sort_media_urls(media.link, caption) + for data in sorted: + if isinstance(data, list): + await self.message._client.send_media_group(**self.args_, media=data) + else: + await self.send_animation(data, caption=caption) + await asyncio.sleep(1) + + async def sort_media_path(self, path, caption): + [os.rename(file_, file_ + ".png") for file_ in glob.glob(f"{path}/*.webp")] + images, videos, animations = [], [], [] + for file in glob.glob(f"{path}/*"): + if file.endswith((".png", ".jpg", ".jpeg")): + images.append(InputMediaPhoto(file, caption=caption, has_spoiler=self.spoiler)) + if file.endswith((".mp4", ".mkv", ".webm")): + has_audio = await shell.check_audio(file) + if not has_audio: + animations.append(file) + else: + videos.append(InputMediaVideo(file, caption=caption, has_spoiler=self.spoiler)) + return await self.make_chunks(images, videos, animations) + + async def sort_media_urls(self, urls, caption): + images, videos, animations = [], [], [] + downloads = await asyncio.gather(*[aiohttp_tools.in_memory_dl(url) for url in urls]) + for file_obj in downloads: + if file_obj.name.endswith((".png", ".jpg", ".jpeg")): + images.append(InputMediaPhoto(file_obj, caption=caption, has_spoiler=self.spoiler)) + if file_obj.name.endswith((".mp4", ".mkv", ".webm")): + videos.append(InputMediaVideo(file_obj, caption=caption, has_spoiler=self.spoiler)) + if file_obj.name.endswith(".gif"): + animations.append(file_obj) + return await self.make_chunks(images, videos, animations) + + async def make_chunks(self, images=[], videos=[], animations=[]): + chunk_imgs = [images[imgs : imgs + 5] for imgs in range(0, len(images), 5)] + chunk_vids = [videos[vids : vids + 5] for vids in range(0, len(videos), 5)] + return [*chunk_imgs, *chunk_vids, *animations] + + @classmethod + async def process(cls, message): + obj = cls(message=message) + await obj.get_media() + await obj.send_media() + [m_obj.cleanup() for m_obj in obj.media_objects] + return obj diff --git a/app/core/aiohttp_tools.py b/app/core/aiohttp_tools.py new file mode 100755 index 0000000..407ecf5 --- /dev/null +++ b/app/core/aiohttp_tools.py @@ -0,0 +1,46 @@ +import json +import os +from io import BytesIO +from urllib.parse import urlparse + +import aiohttp + +SESSION = None + + +async def session_switch(): + if not SESSION: + globals().update({"SESSION": aiohttp.ClientSession()}) + else: + await SESSION.close() + + +async def get_json(url: str, headers: dict = None, params: dict = None, retry: bool = False, json_: bool = False, timeout: int = 10): + try: + async with SESSION.get(url=url, headers=headers, params=params, timeout=timeout) as ses: + if json_: + ret_json = await ses.json() + else: + ret_json = json.loads(await ses.text()) + return ret_json + except BaseException: + return + + +async def in_memory_dl(url: str): + async with SESSION.get(url) as remote_file: + bytes_data = await remote_file.read() + file = BytesIO(bytes_data) + name = os.path.basename(urlparse(url).path.rstrip("/")) + if name.endswith(".webp"): + name = name + ".jpg" + if name.endswith(".webm"): + name = name + ".mp4" + file.name = name + return file + + +async def thumb_dl(thumb): + if not thumb or not thumb.startswith("http"): + return thumb + return await in_memory_dl(thumb) diff --git a/app/core/client.py b/app/core/client.py new file mode 100755 index 0000000..375dc9e --- /dev/null +++ b/app/core/client.py @@ -0,0 +1,89 @@ +import glob +import importlib +import json +import os +import sys +from functools import wraps +from io import BytesIO + +from pyrogram import Client, idle +from pyrogram.enums import ParseMode + +from app import Config +from app.core import aiohttp_tools + +from app.core.message import Message + + +class BOT(Client): + _LOADED = False + + def __init__(self): + super().__init__( + name="bot", + session_string=os.environ.get("STRING_SESSION"), + api_id=int(os.environ.get("API_ID")), + api_hash=os.environ.get("API_HASH"), + in_memory=True, + parse_mode=ParseMode.DEFAULT, + ) + + def add_cmd(self, cmd, trigger=Config.TRIGGER): # Custom triggers To do + def the_decorator(func): + @wraps(func) + def wrapper(): + Config.CMD_DICT[cmd] = func + + wrapper() + return func + + return the_decorator + + async def boot(self): + await super().start() + await self.import_modules() + await self.set_filter_list() + await aiohttp_tools.session_switch() + await self.edit_restart_msg() + await self.log(text="#Social-dl\n__Started__") + print("started") + await idle() + await aiohttp_tools.session_switch() + + async def edit_restart_msg(self): + if (restart_msg := os.environ.get("RESTART_MSG")) and (restart_chat := os.environ.get("RESTART_CHAT")): + await super().get_chat(int(restart_chat)) + await super().edit_message_text(chat_id=int(restart_chat), message_id=int(restart_msg), text="#Social-dl\n__Started__") + os.environ.pop("RESTART_MSG", "") + os.environ.pop("RESTART_CHAT", "") + + async def import_modules(self): + for module_ in glob.glob("app/*/*.py"): + importlib.import_module(os.path.splitext(module_.replace("/", "."))[0]) + self._LOADED = True + + async def log(self, text, chat=None, func=None, name="log.txt"): + if chat or func: + text = f"Function: {func}\nChat: {chat}\nTraceback:\n{text}" + return await self.send_message(chat_id=Config.LOG_CHAT, text=text, name=name) + + async def restart(self): + await aiohttp_tools.session_switch() + await super().stop(block=False) + os.execl(sys.executable, sys.executable, "-m", "app") + + async def set_filter_list(self): + if chats_id := Config.AUTO_DL_MESSAGE_ID: + Config.CHATS = json.loads((await super().get_messages(Config.LOG_CHAT, chats_id)).text) + if blocked_id := Config.BLOCKED_USERS_MESSAGE_ID: + Config.BLOCKED_USERS = json.loads((await super().get_messages(Config.LOG_CHAT, blocked_id)).text) + if users := Config.USERS_MESSAGE_ID: + Config.USERS = json.loads((await super().get_messages(Config.LOG_CHAT, users)).text) + + async def send_message(self, chat_id, text, name: str = "output.txt", **kwargs): + if len(str(text)) < 4096: + return Message.parse_message((await super().send_message(chat_id=chat_id, text=text, **kwargs))) + doc = BytesIO(bytes(text, encoding="utf-8")) + doc.name = name + kwargs.pop("disable_web_page_preview", "") + return await super().send_document(chat_id=chat_id, document=doc, **kwargs) diff --git a/app/core/filters.py b/app/core/filters.py new file mode 100644 index 0000000..649c440 --- /dev/null +++ b/app/core/filters.py @@ -0,0 +1,41 @@ +from urllib.parse import urlparse + +from pyrogram import filters as _filters + +from app import Config +from app.core.MediaHandler import url_map + + +def DYNAMIC_CHAT_FILTER(_, __, message): + if not message.text or not message.text.startswith("https"): + return False + chat_check = message.chat.id in Config.CHATS + user_check = True + if user := message.from_user: + user_check = user.id not in Config.BLOCKED_USERS and not user.is_bot + return bool(chat_check and user_check and check_for_urls(message.text.split())) + + +def check_for_urls(text_list): + for link in text_list: + if match := url_map.get(urlparse(link).netloc): + return True + else: + for key in url_map.keys(): + if key in link: + return True + + +def DYNAMIC_CMD_FILTER(_, __, message): + if not message.text or not message.text.startswith(Config.TRIGGER): + return False + cmd_check = message.text.split(maxsplit=1)[0].replace(Config.TRIGGER, "", 1) in Config.CMD_DICT + user_check = False + if user := message.from_user: + user_check = user.id in Config.USERS + reaction_check = bool(not message.reactions) + return bool(cmd_check and user_check and reaction_check) + + +chat_filter = _filters.create(DYNAMIC_CHAT_FILTER) +user_filter = _filters.create(DYNAMIC_CMD_FILTER) diff --git a/app/core/message.py b/app/core/message.py new file mode 100755 index 0000000..2e47d08 --- /dev/null +++ b/app/core/message.py @@ -0,0 +1,59 @@ +from pyrogram.types import Message as MSG + + +class Message(MSG): + def __init__(self, message): + self.flags = [] + self.input, self.flt_input = "", "" + self.replied, self.reply_id = None, None + super().__dict__.update(message.__dict__) + self.set_reply_properties() + self.flags_n_input() + self.set_flt_input() + + @property + def get_text_list(self): + text_list = self.text.split() + if self.replied and (reply_text := self.replied.text) and "dl" in text_list[0]: + text_list.extend(reply_text.split()) + return text_list + + def set_reply_properties(self): + if replied := self.reply_to_message: + self.replied = replied + self.reply_id = replied.id + + def flags_n_input(self): + self.flags = [i for i in self.text.split() if i.startswith("-")] + split_cmd_str = self.text.split(maxsplit=1) + if len(split_cmd_str) > 1: + self.input = split_cmd_str[-1] + + def set_flt_input(self): + line_split = self.input.splitlines() + split_n_joined =[ + " ".join([word for word in line.split(" ") if word not in self.flags]) + for line in line_split + ] + self.flt_input = "\n".join(split_n_joined) + + async def reply(self, text, **kwargs): + return await self._client.send_message(chat_id=self.chat.id, text=text, reply_to_message_id=self.id, **kwargs) + + async def edit(self, text, **kwargs): + if len(str(text)) < 4096: + kwargs.pop("name", "") + await self.edit_text(text, **kwargs) + else: + await super().delete() + return await self.reply(text, **kwargs) + + async def delete(self, reply=False): + await super().delete() + if reply and self.replied: + await self.replied.delete() + + @classmethod + def parse_message(cls, message): + ret_obj = cls(message) + return ret_obj diff --git a/app/core/scraper_config.py b/app/core/scraper_config.py new file mode 100644 index 0000000..a9232f7 --- /dev/null +++ b/app/core/scraper_config.py @@ -0,0 +1,29 @@ +import shutil + + +class ScraperConfig: + def __init__(self): + self.path = "" + self.link = "" + self.caption = "" + self.caption_url = "" + self.thumb = None + self.success = False + self.photo = False + self.video = False + self.group = False + self.gif = False + + def set_sauce(self, url): + self.caption_url = f"\n\nSauce" + + @classmethod + async def start(cls, url): + obj = cls(url=url) + await obj.download_or_extract() + if obj.success: + return obj + + def cleanup(self): + if self.path: + shutil.rmtree(self.path, ignore_errors=True) diff --git a/app/core/shell.py b/app/core/shell.py new file mode 100755 index 0000000..2bd3d67 --- /dev/null +++ b/app/core/shell.py @@ -0,0 +1,49 @@ +import asyncio +import os + + +async def take_ss(video: str, path: str): + await run_shell_cmd(f'''ffmpeg -hide_banner -loglevel error -ss 0.1 -i "{video}" -vframes 1 "{path}/i.png"''') + if os.path.isfile(path + "/i.png"): + return path + "/i.png" + + +async def check_audio(file): + result = await run_shell_cmd(f"ffprobe -v error -show_entries format=nb_streams -of default=noprint_wrappers=1:nokey=1 {file}") + return int(result or 0) - 1 + + +async def run_shell_cmd(cmd): + proc = await asyncio.create_subprocess_shell(cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT) + stdout, _ = await proc.communicate() + return stdout.decode("utf-8") + + +class AsyncShell: + full_std = "" + is_not_completed = True + + def __init__(self, process): + self.process = process + + async def get_output(self): + while True: + # Check output and stop loop if it's emtpy + line = (await self.process.stdout.readline()).decode("utf-8") + if not line: + break + self.full_std += line + # Let the Subprocess complete and let it shut down + await self.process.wait() + self.is_not_completed = False + + @classmethod + async def run_cmd(cls, cmd): + # Create Subprocess and initialise self using cls + sub_process = cls(process=await asyncio.create_subprocess_shell(cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.STDOUT)) + # Start Checking output but don't block code by awaiting it. + asyncio.create_task(sub_process.get_output()) + # Sleep for a short time to let previous task start + await asyncio.sleep(0.5) + # Return Self object + return sub_process diff --git a/app/plugins/authorise.py b/app/plugins/authorise.py new file mode 100644 index 0000000..a94d6ac --- /dev/null +++ b/app/plugins/authorise.py @@ -0,0 +1,149 @@ +from pyrogram.errors import MessageNotModified + +from app import Config, bot + + +async def add_or_remove(mode, task, item, config_list, message_id): + err = None + if item in config_list and mode == "add": + return "ID Already in List" + elif item not in config_list and mode == "remove": + return "ID Not in List" + try: + task(item) + await bot.edit_message_text( + chat_id=Config.LOG_CHAT, message_id=message_id, text=str(config_list) + ) + except MessageNotModified: + err = "Duplicate Entries, List Not modified." + except Exception as e: + err = str(e) + return err + + +def extract_user(message): + user, err = message.input.strip(), None + if not Config.USERS_MESSAGE_ID: + return user, "You haven't added `USERS_MESSAGE_ID` Var, Add it." + if message.replied: + user = message.replied.from_user.id + if not user: + return user, "Unable to Extract User IDs. Try again." + try: + user = int(user) + except ValueError: + return user, "Give a Valid User ID." + return user, err + + +def extract_chat(message): + chat, err = message.input.strip() or message.chat.id, None + if not Config.AUTO_DL_MESSAGE_ID: + return user, "You haven't added `AUTO_DL_MESSAGE_ID` Var, Add it." + if not chat: + return user, "Unable to Extract Chat IDs. Try again." + try: + chat = int(chat) + except ValueError: + return chat, "Give a Valid chat ID." + return chat, err + + +@bot.add_cmd(cmd="addsudo") +async def add_sudo(bot, message): + user, err = extract_user(message) + if err: + return await message.reply(err) + if err := await add_or_remove( + mode="add", + task=Config.USERS.append, + item=user, + config_list=Config.USERS, + message_id=Config.USERS_MESSAGE_ID, + ): + return await message.reply(err) + await message.reply("User Added to Authorised List.") + + +@bot.add_cmd(cmd="delsudo") +async def add_sudo(bot, message): + user, err = extract_user(message) + if err: + return await message.reply(err) + if err := await add_or_remove( + mode="remove", + task=Config.USERS.remove, + item=user, + config_list=Config.USERS, + message_id=Config.USERS_MESSAGE_ID, + ): + return await message.reply(err) + await message.reply("User Removed from Authorised List.") + + +@bot.add_cmd(cmd="addchat") +async def add_chat(bot, message): + chat, err = extract_chat(message) + if err: + return await message.reply(err) + if err := await add_or_remove( + mode="add", + task=Config.CHATS.append, + item=chat, + config_list=Config.CHATS, + message_id=Config.AUTO_DL_MESSAGE_ID, + ): + return await message.reply(err) + await message.reply(f"{message.chat.title} Added to Authorised List.") + + +@bot.add_cmd(cmd="delchat") +async def add_chat(bot, message): + chat, err = extract_chat(message) + if err: + return await message.reply(err) + if err := await add_or_remove( + mode="remove", + task=Config.CHATS.remove, + item=chat, + config_list=Config.CHATS, + message_id=Config.AUTO_DL_MESSAGE_ID, + ): + return await message.reply(err) + await message.reply(f"{message.chat.title} Added Removed from Authorised List.") + + + +@bot.add_cmd(cmd="block") +async def add_sudo(bot, message): + user, err = extract_user(message) + if err: + return await message.reply(err) + if err := await add_or_remove( + mode="add", + task=Config.BLOCKED_USERS.append, + item=user, + config_list=Config.BLOCKED_USERS, + message_id=Config.BLOCKED_USERS_MESSAGE_ID, + ): + return await message.reply(err) + await message.reply("User Added to Ban List.") + + +@bot.add_cmd(cmd="unblock") +async def add_sudo(bot, message): + user, err = extract_user(message) + if err: + return await message.reply(err) + if err := await add_or_remove( + mode="remove", + task=Config.BLOCKED_USERS.remove, + item=user, + config_list=Config.BLOCKED_USERS, + message_id=Config.BLOCKED_USERS_MESSAGE_ID, + ): + return await message.reply(err) + await message.reply("User Removed from Ban List.") + + + diff --git a/app/plugins/bot.py b/app/plugins/bot.py new file mode 100755 index 0000000..20d5f16 --- /dev/null +++ b/app/plugins/bot.py @@ -0,0 +1,32 @@ +import os + +from pyrogram.enums import ChatType + +from app import Config, bot + + +@bot.add_cmd(cmd="bot") +async def info(bot, message): + head = "Social-DL is running." + chat_count = f"\nAuto-Dl enabled in: {len(Config.CHATS)} chats\n" + supported_sites, photo = await bot.get_messages("Social_DL", [2, 3]) + await photo.copy(message.chat.id, caption="\n".join([head, chat_count, supported_sites.text.html])) + +@bot.add_cmd(cmd="help") +async def help(bot, message): + commands = "\n".join([ f"{Config.TRIGGER}{i}" for i in Config.CMD_DICT.keys()]) + await message.reply(f"Available Commands:\n\n{commands}") + +@bot.add_cmd(cmd="restart") +async def restart(bot, message): + reply = await message.reply("restarting....") + if message.chat.type in [ChatType.GROUP, ChatType.SUPERGROUP]: + os.environ["RESTART_MSG"] = str(reply.id) + os.environ["RESTART_CHAT"] = str(reply.chat.id) + await bot.restart() + + +@bot.add_cmd(cmd="update") +async def chat_update(bot, message): + await bot.set_filter_list() + await message.reply("Filters Refreshed") diff --git a/app/plugins/tgUtils.py b/app/plugins/tgUtils.py new file mode 100644 index 0000000..dace3b9 --- /dev/null +++ b/app/plugins/tgUtils.py @@ -0,0 +1,75 @@ +import os + +from pyrogram.enums import ChatType +from pyrogram.errors import BadRequest +from pyrogram.types import Message + +from app import bot + +# Delete replied and command message + + +@bot.add_cmd(cmd="del") +async def delete_message(bot, message: Message): + await message.delete(reply=True) + + +# Delete Multiple messages from replied to command. +@bot.add_cmd(cmd="purge") +async def purge_(bot, message: Message): + reply = message.replied + if not reply: + return await message.reply("reply to a message") + start_message = reply.id + end_message = message.id + messages = [end_message] + [i for i in range(int(start_message), int(end_message))] + await bot.delete_messages(chat_id=message.chat.id, message_ids=messages, revoke=True) + + +@bot.add_cmd(cmd="ids") +async def get_ids(bot, message): + if reply := message.replied: + ids = "" + reply_forward = reply.forward_from_chat + reply_user = reply.from_user + ids += f"Chat : `{reply.chat.id}`\n" + if reply_forward: + ids += f"Replied {'Channel' if reply_forward.type == ChatType.CHANNEL else 'Chat'} : `{reply_forward.id}`\n" + if reply_user: + ids += f"User : {reply.from_user.id}" + else: + ids = f"Chat :`{message.chat.id}`" + await message.reply(ids) + + +@bot.add_cmd(cmd="join") +async def join_chat(bot, message): + chat = message.input + if chat.isdigit(): + chat = int(f"-100{chat}") + try: + await bot.join_chat(chat) + except (KeyError, BadRequest): + try: + await bot.join_chat(os.path.basename(chat).strip()) + except Exception as e: + return await message.reply(str(e)) + await message.reply("Joined") + + +@bot.add_cmd(cmd="leave") +async def leave_chat(bot, message): + if message.input: + chat = message.input + else: + chat = message.chat.id + try: + await bot.leave_chat(chat) + except Exception as e: + await message.reply(str(e)) + + +@bot.add_cmd(cmd="reply") +async def reply(bot, message): + text = message.input + await bot.send_message(chat_id=message.chat.id, text=text, reply_to_message_id=message.reply_id, disable_web_page_preview=True) diff --git a/app/plugins/tools.py b/app/plugins/tools.py new file mode 100644 index 0000000..742ad13 --- /dev/null +++ b/app/plugins/tools.py @@ -0,0 +1,76 @@ +import asyncio +import sys +import traceback +from io import StringIO + +from pyrogram.enums import ParseMode + +from app import Config +from app.core import shell +from app.core.aiohttp_tools import SESSION, in_memory_dl + +# Run shell commands + +async def run_cmd(bot, message): + cmd = message.input.strip() + status_ = await message.reply("executing...") + proc_stdout = await shell.run_shell_cmd(cmd) + output = f"`${cmd}`\n\n`{proc_stdout}`" + return await status_.edit(output, name="sh.txt", disable_web_page_preview=True) + + +# Shell but Live Output + + +async def live_shell(bot, message): + cmd = message.input.strip() + sub_process = await shell.AsyncShell.run_cmd(cmd) + reply = await message.reply("`getting live output....`") + output = "" + sleep_for = 1 + while sub_process.is_not_completed: + # Edit message only when there's new output. + if output != sub_process.full_std: + output = sub_process.full_std + if len(output) <= 4096: + await reply.edit(f"`{output}`", disable_web_page_preview=True, parse_mode=ParseMode.MARKDOWN) + # Reset sleep duration + if sleep_for >= 5: + sleep_for = 1 + # Sleep to Unblock running loop and let output reader read new + # output. + await asyncio.sleep(sleep_for) + sleep_for += 1 + # If the subprocess is finished edit the message with cmd and full + # output + return await reply.edit(f"`$ {cmd}\n\n``{sub_process.full_std}`", name="shell.txt", disable_web_page_preview=True) + + +# Run Python code +async def executor_(bot, message): + code = message.flt_input.strip() + if not code: + return await message.reply("exec Jo mama?") + reply = await message.reply("executing") + sys.stdout = codeOut = StringIO() + sys.stderr = codeErr = StringIO() + # Indent code as per proper python syntax + formatted_code = "\n ".join(code.splitlines()) + try: + # Create and initialise the function + exec(f"async def _exec(bot, message):\n {formatted_code}") + func_out = await locals().get("_exec")(bot, message) + except BaseException: + func_out = str(traceback.format_exc()) + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + output = f"`{codeOut.getvalue().strip() or codeErr.getvalue().strip() or func_out}`" + if "-s" not in message.flags: + output = f"> `{code}`\n\n>> {output}" + return await reply.edit(output, name="exec.txt", disable_web_page_preview=True,parse_mode=ParseMode.MARKDOWN) + + +if Config.DEV_MODE: + Config.CMD_DICT["sh"] = run_cmd + Config.CMD_DICT["shell"] = live_shell + Config.CMD_DICT["exec"] = executor_ diff --git a/app/social_dl.py b/app/social_dl.py new file mode 100644 index 0000000..85a322a --- /dev/null +++ b/app/social_dl.py @@ -0,0 +1,39 @@ +import traceback +from app import Config, bot +from app.core import filters +from app.core.MediaHandler import ExtractAndSendMedia +from app.core.message import Message + + +@bot.add_cmd(cmd="dl") +async def dl(bot, message): + reply = await bot.send_message(chat_id=message.chat.id, text="`trying to download...`") + media = await ExtractAndSendMedia.process(message) + if media.exceptions: + exceptions = "\n".join(media.exceptions) + await bot.log(text=exceptions, func="DL", chat=message.chat.id, name="traceback.txt") + return await reply.edit(f"Media Download Failed.") + if media.media_objects: + await message.delete() + await reply.delete() + + +@bot.on_message(filters.user_filter) +@bot.on_edited_message(filters.user_filter) +async def cmd_dispatcher(bot, message): + func = Config.CMD_DICT[message.text.split(maxsplit=1)[0].lstrip(Config.TRIGGER)] + parsed_message = Message.parse_message(message) + try: + await func(bot, parsed_message) + except BaseException: + await bot.log(text=str(traceback.format_exc()), chat=message.chat.id, func=func.__name__, name="traceback.txt") + + +@bot.on_message(filters.chat_filter) +async def dl_dispatcher(bot, message): + func = Config.CMD_DICT["dl"] + parsed_message = Message.parse_message(message) + try: + await func(bot, parsed_message) + except BaseException: + await bot.log(text=str(traceback.format_exc()), chat=message.chat.id, func=func.__name__, name="traceback.txt") diff --git a/assets/social_downloader.png b/assets/social_downloader.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f013b76a3a7d07d759fdc3194d07b8e1ca0502 GIT binary patch literal 269018 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νCrQCqN}vjAM!!563EX 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%0Dqp4GDfyEIe$|9`C(F^ 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 BCEx%6 literal 0 HcmV?d00001 diff --git a/req.txt b/req.txt index cfdc1a1..f9dc497 100644 --- a/req.txt +++ b/req.txt @@ -1,7 +1,10 @@ -aiohttp -aiohttp_retry -pyrogram==2.0.57 +aiohttp>=3.8.4 +beautifulsoup4>=4.12.2 +Brotli>=1.0.9 +gallery_dl>=1.25.7 +pyrogram>=2.0.106 python-dotenv==0.21.0 -tgCrypto==1.2.3 -wget -yt-dlp +PyExecJS>=1.5.1 +tenacity>=8.2.2 +tgCrypto>=1.2.3 +yt-dlp>=2023.6.22 diff --git a/sample-config.env b/sample-config.env index 7eb833c..835a8c5 100644 --- a/sample-config.env +++ b/sample-config.env @@ -1,15 +1,42 @@ -API_ID=123456 +API_ID=12345678 +# You API ID -API_HASH="abcd1238fn...." +API_HASH="abf12395nskfns" +# HASH -DEV_MODE = "no" +API_KEYS=[] +# Your https://api.webscraping.ai/ Keys +# Multiple values are separated by , +# so [122456, 78990] -LOG_CHANNEL=-10012345678 -MESSAGE=12345 +BLOCKED_USERS_MESSAGE_ID = 0 +# Last digits of a link +# t.me/1263849/69 +# 69 in the end of the list so Value is 69 +# Blocked users list + + +DEV_MODE=0 +# Change to 1 if you want exec, sh, shell commands + + +LOG_CHAT=-100..... +# Log channel •Required• + + +AUTO_DL_MESSAGE_ID=0 +# Last digits of link +# For Auto DL chat List -STRING_SESSION="Ab0fbs......." TRIGGER="." -USERS=[12345678] # Multiple user IDs should be separated by , + +STRING_SESSION="Aq0dj......" +# Your session + + +USERS_MESSAGE_ID = 0 +# for Users List with full bot access +# enter last digits of link \ No newline at end of file diff --git a/socialbot.py b/socialbot.py deleted file mode 100644 index 2faaaae..0000000 --- a/socialbot.py +++ /dev/null @@ -1,554 +0,0 @@ -""" - -* socialbot.py Main Logic file of Bot. - -MIT License - -Copyright (c) 2023 Ryuk - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -""" - - -import asyncio -import base64 -import glob -import json -import os -import shutil -import sys -import time -import traceback -from io import StringIO -from urllib.parse import urlparse as url_p - -import aiohttp -import yt_dlp -from aiohttp_retry import ExponentialRetry, RetryClient -from dotenv import load_dotenv -from pyrogram import Client, filters, idle -from pyrogram.enums import ChatType, ParseMode -from pyrogram.errors import MediaEmpty, PeerIdInvalid, PhotoSaveFileInvalid, WebpageCurlFailed -from pyrogram.handlers import MessageHandler -from pyrogram.types import InputMediaPhoto, InputMediaVideo, Message -from wget import download - -if os.path.isfile("config.env"): - load_dotenv("config.env") - -bot = Client( - name="bot", - session_string=os.environ.get("STRING_SESSION"), - api_id=os.environ.get("API_ID"), - api_hash=os.environ.get("API_HASH"), - in_memory=True, - parse_mode=ParseMode.DEFAULT, -) - -LOG_CHAT = os.environ.get("LOG_CHANNEL") - -if LOG_CHAT is None: - print("Enter log channel id in config") - exit() - -USERS = json.loads(os.environ.get("USERS")) - -TRIGGER = os.environ.get("TRIGGER") - -E_JSON = base64.b64decode("Lz9fX2E9MSZfX2Q9MQ==").decode("utf-8") - - -# BOT Section - -@bot.on_edited_message(filters.command(commands="dl", prefixes=TRIGGER) & filters.user(USERS)) -@bot.on_message(filters.command(commands="dl", prefixes=TRIGGER) & filters.user(USERS)) -async def dl(bot, message: Message): - parsed = MESSAGE_PARSER(message) - if not parsed.coro_: - return - status = "failed" - msg_ = await bot.send_message(chat_id=message.chat.id, text="`trying to download...`") - for coroutine_ in parsed.coro_: - media_dict = await coroutine_ - if isinstance(media_dict, dict) and "media" in media_dict: - status = await send_media(message=message, data=media_dict, doc=parsed.doc, caption=parsed.caption) - if status == "failed": - return await msg_.edit(f"Media Download Failed.") - await message.delete() - await msg_.delete() - - -# Parse Message text and return coroutine for matched links -class MESSAGE_PARSER: - def __init__(self, message): - self.text_list = message.text.split() - self.flags = [i for i in self.text_list if i.startswith("-")] - self.sender = message.author_signature or (user.first_name if (user := message.from_user) else "") - self.caption = f"Shared by : {self.sender}" - self.doc = "-d" in self.flags - self.coro_ = [] - self.match_links() - - # Thanks Jeel Patel [TG @jeelpatel231] for url map concept. - def match_links(self): - url_map = { - "tiktok.com": yt_dl, - "www.instagram.com": instagram_dl, - "youtube.com/shorts": yt_dl, - "twitter.com": yt_dl, - "www.reddit.com": reddit_dl, - } - for link in self.text_list: - if (match := url_map.get(url_p(link).netloc)): - self.coro_.append(match(url=link,doc=self.doc, caption=self.caption)) - else: - for key, val in url_map.items(): - if key in link: - self.coro_.append(val(url=link,doc=self.doc, caption=self.caption)) - - - -# Send media back -async def send_media(message: Message, data: dict, caption: str, doc: bool = False): - reply = message.reply_to_message - reply_id = reply.id if reply else None - media = data.get("media") - thumb = data.get("thumb", None) - caption = data.get("caption", "") - is_image, is_video, is_animation, is_grouped = (data.get("is_image"), data.get("is_video"), data.get("is_animation"), data.get("is_grouped")) - status = "failed" - args_ = {"chat_id": message.chat.id, "reply_to_message_id": reply_id} - if isinstance(media, list): - for vv in media: - try: - if isinstance(vv, list): - status = await bot.send_media_group(**args_, media=vv) - await asyncio.sleep(2) - elif doc: - status = await bot.send_document(**args_, caption=caption, document=vv, force_document=True) - else: - status = await bot.send_animation(**args_, caption=caption, animation=vv, unsave=True) - except Exception: - await bot.send_message(chat_id=LOG_CHAT, text=str(traceback.format_exc())) - else: - args_.update({"caption": caption}) - try: - if is_image: - status = await bot.send_photo(**args_, photo=media) - elif is_video: - status = await bot.send_video(**args_, video=media, thumb=thumb) - elif is_animation: - status = await bot.send_animation(**args_, animation=media, unsave=True) - else: - status = await bot.send_document(**args_, document=media, force_document=True) - except PhotoSaveFileInvalid: - await bot.send_document(**args_, document=media, force_document=True) - except (MediaEmpty, WebpageCurlFailed, ValueError): - pass - if os.path.exists(str(data["path"])): - shutil.rmtree(str(data["path"])) - if status != "failed": - return "done" - return status - - - -@bot.on_edited_message(filters.command(commands="bot", prefixes=TRIGGER) & filters.user(USERS)) -@bot.on_message(filters.command(commands="bot", prefixes=TRIGGER) & filters.user(USERS)) -async def multi_func(bot, message: Message): - rw_message = message.text.split() - try: - # Restart - if "restart" in rw_message: - await SESSION.close() - await RETRY_CLIENT.close() - os.execl(sys.executable, sys.executable, __file__) - - # Get chat / channel id - elif "ids" in rw_message: - if (reply := message.reply_to_message): - ids = "" - reply_forward = reply.forward_from_chat - reply_user = reply.from_user - ids += f"Chat : `{reply.chat.id}`\n" - if reply_forward: - ids += f"Replied {'Channel' if reply_forward.type == ChatType.CHANNEL else 'Chat'} : `{reply_forward.id}`\n" - if reply_user: - ids += f"User : {reply.from_user.id}" - else: - ids = f"Chat :`{message.chat.id}`" - await message.reply(ids) - - # Update Auto-DL chats - elif "update" in rw_message: - bot.remove_handler(*HANDLER_) - await add_h() - await message.reply("Chat list refreshed") - - # Join a chat - elif "join" in rw_message: - if len(rw_message) > 2: - try: - await bot.join_chat(rw_message[-1]) - except KeyError: - await bot.join_chat(os.path.basename(rw_message[-1]).strip()) - except Exception as e: - return await message.reply(str(e)) - await message.reply("Joined") - # Leave a chat - elif "leave" in rw_message: - if len(rw_message) == 3: - chat = rw_message[-1] - else: - chat = message.chat.id - await bot.leave_chat(chat) - - else: - await message.reply("Social-DL is running") - except Exception: - await bot.send_message(chat_id=LOG_CHAT, text=str(traceback.format_exc())) - - -# Delete replied and command message -@bot.on_message(filters.command(commands="del", prefixes=TRIGGER) & filters.user(USERS)) -async def delete_message(bot, message: Message): - reply = message.reply_to_message - await message.delete() - if reply: - await reply.delete() - - -# Delete Multiple messages from replied to command. -@bot.on_message(filters.command(commands="purge", prefixes=TRIGGER) & filters.user(USERS)) -async def purge_(bot, message: Message): - reply = message.reply_to_message - if not reply: - return await message.reply("reply to a message") - start_message = reply.id - end_message = message.id - messages = [end_message] + [i for i in range(int(start_message), int(end_message))] - await bot.delete_messages(chat_id=message.chat.id, message_ids=messages, revoke=True) - - -if os.environ.get("DEV_MODE") == "yes": - # Run shell commands - @bot.on_edited_message(filters.command(commands="sh", prefixes=TRIGGER) & filters.user(USERS)) - @bot.on_message(filters.command(commands="sh", prefixes=TRIGGER) & filters.user(USERS)) - async def run_cmd(bot, message: Message): - cmd = message.text.replace(f"{TRIGGER}sh ", "").strip() - status_ = await message.reply("executing...") - proc = await run_shell_cmd(cmd) - output = f"${cmd}" - if (stdout := proc.get("stdout")): - output += f"""\n\n**Output:**\n\n`{stdout}`""" - if (stderr := proc.get("stderr")): - output += f"""\n\n**Error:**\n\n`{stderr}`""" - await status_.edit(output,parse_mode=ParseMode.MARKDOWN) - - - # Run Python code - @bot.on_edited_message( - filters.command(commands="exec", prefixes=TRIGGER) & filters.user(USERS) - ) - @bot.on_message( - filters.command(commands="exec", prefixes=TRIGGER) & filters.user(USERS) - ) - async def executor_(bot, message): - code = message.text.replace(f"{TRIGGER}exec","").strip() - if not code: - return await message.reply("exec Jo mama?") - reply = await message.reply("executing") - sys.stdout = codeOut = StringIO() - sys.stderr = codeErr = StringIO() - # Indent code as per proper python syntax - formatted_code = "".join(["\n "+i for i in code.split("\n")]) - try: - # Create and initialise the function - exec(f"async def exec_(bot, message):{formatted_code}") - func_out = await locals().get("exec_")(bot, message) - except Exception: - func_out = str(traceback.format_exc()) - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - output = codeOut.getvalue().strip() or codeErr.getvalue().strip() or func_out or "" - await reply.edit(f"> `{code}`\n\n>> `{output}`",parse_mode=ParseMode.MARKDOWN) - - -# Add Auto-DL regex Handler -async def add_h(): - message_id = os.environ.get("MESSAGE") - if message_id is None: - print("\nEnter Message id in config.\n") - return 1 - try: - msg = (await bot.get_messages(int(LOG_CHAT), int(message_id))).text - except PeerIdInvalid: - print("\nLog channel not found.\nCheck the variable for mistakes") - return 1 - if msg is None: - print("\nMessage not found\nCheck variable for mistakes\n") - return 1 - try: - chats_list = [int(i) for i in msg.split()] - except ValueError: - print("\nThe message id is wrong. \nOr \nChat id message contains letters\nonly numerical ids are allowed.\n") - return 1 - social_handler = bot.add_handler( - MessageHandler( - dl, - ( - (filters.regex(r"^http*")) - & filters.chat(chats_list) - ), - ), - group=1, - ) - globals().update({"HANDLER_":social_handler}) - - -# Start the bot and wait idle without blocking the main loop -async def boot(): - check_handlers = await add_h() - msg = "#Social-dl\nStarted\n" - if check_handlers == 1: - msg += "\n* Running in command only mode. *" - print(msg) - await bot.send_message(chat_id=int(LOG_CHAT), text="#Social-dl\n__Started__") - globals().update({"SESSION":aiohttp.ClientSession()}) - globals().update({"RETRY_CLIENT":RetryClient(client_session=SESSION, retry_for_statuses={408, 504}, retry_options=ExponentialRetry(attempts=1))}) - await idle() - - - -# API Section - - -# Instagram -async def instagram_dl(url: str, caption: str, doc: bool = False): - args = locals() - # status = await instafix(message=message, link=i, caption=caption) - for i in [yt_dl, api_2]: - data = await i(**args) - if isinstance(data, dict): - break - return data - - -async def api_2(url: str, caption: str, doc: bool): - link = url.split("/?")[0] + E_JSON - response = await get_json(url=link) - if not response or "graphql" not in response: - return "failed" - return await parse_ghraphql( - response["graphql"]["shortcode_media"], caption=caption + "\n.." - ) - - -async def parse_ghraphql(json_: dict, caption: str, doc: bool = False): - try: - path = f"downloads/{time.time()}" - os.makedirs(path) - ret_dict = {"path": path, "thumb": None, "caption": caption} - type_check = json_.get("__typename",None) - if not type_check: - return "failed" - elif type_check == "GraphSidecar": - media = [] - for i in json_["edge_sidecar_to_children"]["edges"]: - if i["node"]["__typename"] == "GraphImage": - media.append(i["node"]["display_url"]) - if i["node"]["__typename"] == "GraphVideo": - media.append(i["node"]["video_url"]) - ret_dict.update({"is_grouped": False if doc else True, "media": await async_download(urls=media, path=path, doc=doc, caption=caption)}) - else: - media = json_.get("video_url") or json_.get("display_url") - ret_dict.update(**await get_media(url=media, path=path)) - except Exception: - await bot.send_message(chat_id=LOG_CHAT, text=str(traceback.format_exc())) - return ret_dict - - -# YT-DLP for videos from multiple sites -async def yt_dl(url: str, caption: str, doc:bool=False): - if "instagram.com/p/" in url: - return - path = str(time.time()) - video = f"{path}/v.mp4" - _opts = { - "outtmpl": video, - "ignoreerrors": True, - "ignore_no_formats_error": True, - "quiet": True, - "logger": FakeLogger(), - } - if "shorts" in url: - _opts.update({"format": "bv[ext=mp4][res=480]+ba[ext=m4a]/b[ext=mp4]"}) - else: - _opts.update({"format": "bv[ext=mp4]+ba[ext=m4a]/b[ext=mp4]"}) - data = "failed" - try: - yt_dlp.YoutubeDL(_opts).download(url) - if os.path.isfile(video): - data = { - "path": path, - "is_video": True, - "media": video, - "thumb": await take_ss(video=video, path=path), - "caption": caption, - } - except BaseException: - pass - return data - - -# To disable YT-DLP logging -class FakeLogger(object): - def debug(self, msg): - pass - - def warning(self, msg): - pass - - def error(self, msg): - pass - - -# Reddit -async def reddit_dl(url: str, caption: str, doc: bool = False): - link = url.split("/?")[0] + ".json?limit=1" - headers = { - "user-agent": "Mozilla/5.0 (Macintosh; PPC Mac OS X 10_8_7 rv:5.0; en-US) AppleWebKit/533.31.5 (KHTML, like Gecko) Version/4.0 Safari/533.31.5" - } - try: - response = await get_json(url=link, headers=headers, json_=True) - if not response: - return "failed" - json_ = response[0]["data"]["children"][0]["data"] - caption = f'__{json_["subreddit_name_prefixed"]}:__\n**{json_["title"]}**\n\n' + caption - path = str(time.time()) - os.mkdir(path) - is_vid, is_gallery = json_.get("is_video"), json_.get("is_gallery") - data = {"path": path, "caption": caption} - if is_vid: - video = f"{path}/v.mp4" - vid_url = json_["secure_media"]["reddit_video"]["hls_url"] - await run_shell_cmd(f'ffmpeg -hide_banner -loglevel error -i "{vid_url.strip()}" -c copy {video}') - data.update({"is_video": True, "media": video, "thumb": await take_ss(video=video, path=path)}) - - elif is_gallery: - grouped_media_urls = [json_["media_metadata"][val]["s"]["u"].replace("preview", "i") for val in json_["media_metadata"]] - downloads = await async_download(urls=grouped_media_urls, path=path, doc=doc, caption=caption) - data.update({"is_grouped": True, "media": downloads}) - - else: - url_ = json_.get("preview", {}).get("reddit_video_preview", {}).get("fallback_url", "") or json_.get("url_overridden_by_dest", "").strip() - if not url_: - return "failed" - data.update(await get_media(url=url_, path=path)) - - except Exception: - await bot.send_message(chat_id=LOG_CHAT, text=str(traceback.format_exc())) - return data - - -# Get Json response from APIs -async def get_json(url: str, headers: dict = None, params: dict = None, retry: bool = False, json_: bool = False, timeout: int = 10): - if retry: - client = RETRY_CLIENT - else: - client = SESSION - try: - async with client.get(url=url, headers=headers, params=params, timeout=timeout) as ses: - if json_: - ret_json = await ses.json() - else: - ret_json = json.loads(await ses.text()) - except (json.decoder.JSONDecodeError, aiohttp.ContentTypeError, asyncio.TimeoutError): - return - except Exception: - await bot.send_message(chat_id=LOG_CHAT, text=str(traceback.format_exc())) - return - return ret_json - - -# Download media and return it with media type -async def get_media(url: str, path: str): - down_load = download(url, path) - ret_dict = {"media": down_load} - if down_load.lower().endswith((".jpg", ".jpeg", ".png", ".webp")): - ret_dict["is_image"] = True - if down_load.lower().endswith(".webp"): - os.rename(down_load, down_load + ".jpg") - ret_dict.update({"media": down_load + ".jpg"}) - elif down_load.lower().endswith((".mkv", ".mp4", ".webm")): - ret_dict.update({"is_video": True, "thumb": await take_ss(video=down_load, path=path)}) - elif down_load.lower().endswith(".gif"): - ret_dict.update({"is_animation": True}) - else: - return {} - return ret_dict - - -# Download multiple media asynchronously to save time; -# Return it in a list or a list with smaller lists each containing upto 5 media. -async def async_download(urls: list, path: str, doc: bool = False, caption: str = ""): - down_loads = await asyncio.gather(*[asyncio.to_thread(download, url, path) for url in urls]) - if doc: - return down_loads - [os.rename(file, file + ".png") for file in glob.glob(f"{path}/*.webp")] - files = [i + ".png" if i.endswith(".webp") else i for i in down_loads] - grouped_images, grouped_videos, animations = [], [], [] - for file in files: - if file.endswith((".png", ".jpg", ".jpeg")): - grouped_images.append(InputMediaPhoto(file, caption=caption)) - if file.endswith((".mp4", ".mkv", ".webm")): - has_audio = await check_audio(file) - if not has_audio: - animations.append(file) - else: - grouped_videos.append(InputMediaVideo(file, caption=caption)) - return_list = [ - grouped_images[imgs : imgs + 5] for imgs in range(0, len(grouped_images), 5) - ] + [grouped_videos[vids : vids + 5] for vids in range(0, len(grouped_videos), 5) - ] + animations - return return_list - - -# Thumbnail -async def take_ss(video: str, path: str): - await run_shell_cmd(f'''ffmpeg -hide_banner -loglevel error -ss 0.1 -i "{video}" -vframes 1 "{path}/i.png"''') - if os.path.isfile(path + "/i.png"): - return path + "/i.png" - - -async def check_audio(file): - result = await run_shell_cmd(f"ffprobe -v error -show_entries format=nb_streams -of default=noprint_wrappers=1:nokey=1 {file}") - return int(result.get("stdout", 0)) - 1 - - -async def run_shell_cmd(cmd): - proc = await asyncio.create_subprocess_shell(cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) - stdout, stderr = await proc.communicate() - return {"stdout": stdout.decode("utf-8"), "stderr": stderr.decode("utf-8")} - - -# Start only bot when file is called directly. -if __name__ == "__main__": - bot.start() - bot.run(boot())