├── Dockerfile ├── LICENSE ├── Procfile ├── README.md ├── app.json ├── configs.py ├── helpers ├── block_exts_handler.py ├── file_size_checker.py ├── filters.py ├── forwarder.py └── kanger.py ├── main.py └── requirements.txt /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:20.04 2 | 3 | ENV DEBIAN_FRONTEND=noninteractive 4 | 5 | WORKDIR /app 6 | 7 | RUN apt-get update 8 | RUN echo y | apt-get install locales 9 | RUN echo y | apt install build-essential 10 | RUN apt -qq install -y --no-install-recommends \ 11 | curl \ 12 | git \ 13 | gnupg2 \ 14 | wget \ 15 | 16 | RUN set -ex; \ 17 | apt-get update \ 18 | && apt-get install -y --no-install-recommends \ 19 | busybox \ 20 | git \ 21 | python3 \ 22 | python3-dev \ 23 | python3-pip \ 24 | python3-lxml \ 25 | pv \ 26 | && apt-get autoclean \ 27 | && apt-get autoremove \ 28 | && rm -rf /var/lib/apt/lists/* 29 | 30 | RUN pip3 install setuptools wheel yarl multidict 31 | COPY requirements.txt . 32 | RUN pip3 install -r requirements.txt 33 | RUN dpkg-reconfigure locales 34 | COPY . /app 35 | 36 | CMD ["python3", "main.py"] -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Abir Hasan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | worker: python3 main.py 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Forward-Client 2 | This is Telegram Messages Forwarder bot by [@AbirHasan2005](https://github.com/AbirHasan2005). 3 | 4 | Use this at your own risk. I will not be responsible for any kind of issue while using this! Better use a different Telegram Account instead of using Main Telegram Account. 5 | 6 | ### Features: 7 | - Kang Whole Chat Messages to other Chats. 8 | - Can cause Telegram Account Ban! 9 | - Forward From Chat To Chat. 10 | - Can Forward from Multiple Chats to Multiple Chats :) 11 | - Automatically forward new messages From Chat To Chat. 12 | - Bot 😁 13 | - Simple & Userfriendly 😅 14 | 15 | ### Configs: 16 | - `API_ID` - Get from my.telegram.org or [@TeleORG_Bot](https://t.me/TeleORG_Bot) 17 | - `API_HASH` - Get from my.telegram.org or [@TeleORG_Bot](https://t.me/TeleORG_Bot) 18 | - `STRING_SESSION` - Get this from [@StringSessionGen_Bot](https://t.me/StringSessionGen_Bot) 19 | - `FORWARD_FILTERS` - Filters can be `text`, `video`, `document`, `gif`, `sticker`, `photo`, `audio`, `poll`, `forwarded`. Separate with Space. 20 | - `FORWARD_TO_CHAT_ID` - Forward To Chat IDs. Separate with Space. 21 | - `FORWARD_FROM_CHAT_ID` - Forward From Chat IDs. Separate with Space. 22 | - `FORWARD_AS_COPY` - Forward Messages as Copy or with Forward Tag. Value should be `True`/`False`. 23 | - `BLOCKED_EXTENSIONS` - Don't Forward those Media Messages which contains Blocked Extensions. Example: `mp4 mkv mp3 zip rar`. Separate with Space. 24 | - `MINIMUM_FILE_SIZE` - Minimum File Size for Media Message to be able to Forward. Should be in Bytes. 25 | - `BLOCK_FILES_WITHOUT_EXTENSIONS` - Value can be `True`/`False`. If `True` those files which doesn't have file extension will not be Forwarded. 26 | 27 | ### **Commands:** 28 | - `!start` - Check Bot Alive or Not. 29 | - `!help` - Get this Message. 30 | - `!kang` - Start All Messages Kanger. 31 | - `!restart` - Restart Heroku App Dyno Workers. 32 | - `!stop` - Stop Kanger & Restart Service. 33 | 34 | ### Support Group: 35 | 36 | 37 | ### Video Tutorial: 38 | [![YouTube](https://img.shields.io/badge/YouTube-Video%20Tutorial-red?logo=youtube)](https://youtu.be/_xuptk2KUbk) 39 | 40 | ### Deploy Now: 41 | [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/AbirHasan2005/Forward-Client) 42 | 43 | ### Host Locally: 44 | ```sh 45 | git clone https://github.com/AbirHasan2005/Forward-Client 46 | cd Forward-Client 47 | pip3 install -r requirements.txt 48 | # Setup Configurations in configs.py file! 49 | python3 main.py 50 | ``` 51 | 52 | ### Follow on: 53 |

54 | 55 |

56 |

57 | 58 |

59 |

60 | 61 |

62 |

63 | 64 |

65 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "This is Telegram Messages Forwarder Userbot by @AbirHasan2005", 3 | "description": "This is Telegram Messages Forwarder Userbot in Pyrogram by @AbirHasan2005", 4 | "keywords": [ 5 | "telegram", 6 | "messages", 7 | "forwarder", 8 | "userbot" 9 | ], 10 | "repository": "https://github.com/AbirHasan2005/Forward-Client", 11 | "website": "https://telegram.dog/AbirHasan2005", 12 | "success_url": "https://t.me/Discovery_Updates", 13 | "env": { 14 | "API_ID": { 15 | "description": "Get this value from my.telegram.org or @TeleORG_Bot" 16 | }, 17 | "API_HASH": { 18 | "description": "Get this value from my.telegram.org or @TeleORG_Bot" 19 | }, 20 | "STRING_SESSION": { 21 | "description": "Get this from @StringSessionGen_Bot" 22 | }, 23 | "FORWARD_FROM_CHAT_ID": { 24 | "description": "Forward From Chat IDs. Separate with Space." 25 | }, 26 | "FORWARD_TO_CHAT_ID": { 27 | "description": "Forward To Chat IDs. Separate with Space." 28 | }, 29 | "FORWARD_FILTERS": { 30 | "description": "Filters can be `text`, `video`, `document`, `gif`, `sticker`, `photo`, `audio`, `poll`, `forwarded`. Separate with Space.", 31 | "required": false 32 | }, 33 | "BLOCKED_EXTENSIONS": { 34 | "description": "Don't Forward those Media Messages which contains Blocked Extensions. Example: `mp4 mkv mp3 zip rar`. Separate with Space.", 35 | "required": false 36 | }, 37 | "MINIMUM_FILE_SIZE": { 38 | "description": "Minimum File Size for Media Message to be able to Forward. Should be in Bytes.", 39 | "required": false 40 | }, 41 | "BLOCK_FILES_WITHOUT_EXTENSIONS": { 42 | "description": "Value can be `True`/`False`. If `True` those files which doesn't have file extension will not be Forwarded.", 43 | "required": false 44 | }, 45 | "HEROKU_API_KEY": { 46 | "description": "Put Heroku API Key from https://dashboard.heroku.com/account" 47 | }, 48 | "HEROKU_APP_NAME": { 49 | "description": "Your Heroku App Name." 50 | }, 51 | "FORWARD_AS_COPY": { 52 | "description": "Forward Messages as Copy or with Forward Tag. Value should be True/False.", 53 | "required": false 54 | } 55 | }, 56 | "buildpacks": [ 57 | { 58 | "url": "heroku/python" 59 | } 60 | ], 61 | "formation": { 62 | "worker": { 63 | "quantity": 1, 64 | "size": "free" 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /configs.py: -------------------------------------------------------------------------------- 1 | # (c) @AbirHasan2005 2 | 3 | import os 4 | import heroku3 5 | 6 | 7 | class Config(object): 8 | # Get This From @TeleORG_Bot 9 | API_ID = int(os.environ.get("API_ID")) 10 | API_HASH = os.environ.get("API_HASH") 11 | # Get This From @StringSessionGen_Bot 12 | STRING_SESSION = os.environ.get("STRING_SESSION") 13 | # Forward From Chat ID 14 | FORWARD_FROM_CHAT_ID = list(set(int(x) for x in os.environ.get("FORWARD_FROM_CHAT_ID", "-100").split())) 15 | # Forward To Chat ID 16 | FORWARD_TO_CHAT_ID = list(set(int(x) for x in os.environ.get("FORWARD_TO_CHAT_ID", "-100").split())) 17 | # Filters for Forwards 18 | DEFAULT_FILTERS = "video document photo audio text gif forwarded poll sticker" 19 | FORWARD_FILTERS = list(set(x for x in os.environ.get("FORWARD_FILTERS", DEFAULT_FILTERS).split())) 20 | BLOCKED_EXTENSIONS = list(set(x for x in os.environ.get("BLOCKED_EXTENSIONS", "").split())) 21 | MINIMUM_FILE_SIZE = os.environ.get("MINIMUM_FILE_SIZE", None) 22 | BLOCK_FILES_WITHOUT_EXTENSIONS = bool(os.environ.get("BLOCK_FILES_WITHOUT_EXTENSIONS", False)) 23 | # Forward as Copy. Value Should be True or False 24 | FORWARD_AS_COPY = bool(os.environ.get("FORWARD_AS_COPY", True)) 25 | # Sleep Time while Kang 26 | SLEEP_TIME = int(os.environ.get("SLEEP_TIME", 10)) 27 | # Heroku Management 28 | HEROKU_API_KEY = os.environ.get("HEROKU_API_KEY") 29 | HEROKU_APP_NAME = os.environ.get("HEROKU_APP_NAME") 30 | HEROKU_APP = heroku3.from_key(HEROKU_API_KEY).apps()[HEROKU_APP_NAME] if HEROKU_API_KEY and HEROKU_APP_NAME else None 31 | # Message Texts 32 | HELP_TEXT = """ 33 | This UserBot can forward messages from any Chat to any other Chat also you can kang all messages from one Chat to another Chat. 34 | 35 | 👨🏻‍💻 **Commands:** 36 | • `!start` - Check UserBot Alive or Not. 37 | • `!help` - Get this Message. 38 | • `!kang` - Start All Messages Kanger. 39 | • `!restart` - Restart Heroku App Dyno Workers. 40 | • `!stop` - Stop Kanger & Restart Service. 41 | 42 | ©️ **Developer:** @AbirHasan2005 43 | 👥 **Support Group:** [【★ʟя★】](https://t.me/JoinOT)""" 44 | -------------------------------------------------------------------------------- /helpers/block_exts_handler.py: -------------------------------------------------------------------------------- 1 | # (c) @AbirHasan2005 2 | 3 | from configs import Config 4 | from pyrogram.types import Message 5 | 6 | 7 | async def CheckBlockedExt(event: Message): 8 | media = event.document or event.video or event.audio or event.animation 9 | if (Config.BLOCK_FILES_WITHOUT_EXTENSIONS is True) and ("." not in media.file_name): 10 | return True 11 | if (media is not None) and (media.file_name is not None): 12 | _file = media.file_name.rsplit(".", 1) 13 | if len(_file) == 2: 14 | if (_file[-1].lower() in Config.BLOCKED_EXTENSIONS) or (_file[-1].upper() in Config.BLOCKED_EXTENSIONS): 15 | return True 16 | else: 17 | return False 18 | else: 19 | return False 20 | -------------------------------------------------------------------------------- /helpers/file_size_checker.py: -------------------------------------------------------------------------------- 1 | # (c) @AbirHasan2005 2 | 3 | from pyrogram.types import Message 4 | from configs import Config 5 | 6 | 7 | async def CheckFileSize(msg: Message): 8 | media = msg.video or msg.document or msg.audio or msg.photo or msg.animation 9 | if (Config.MINIMUM_FILE_SIZE is not None) and (media.file_size < int(Config.MINIMUM_FILE_SIZE)): 10 | return False 11 | else: 12 | return True 13 | -------------------------------------------------------------------------------- /helpers/filters.py: -------------------------------------------------------------------------------- 1 | # (c) @AbirHasan2005 2 | 3 | from configs import Config 4 | from pyrogram.types import Message 5 | 6 | 7 | async def FilterMessage(message: Message): 8 | if (message.forward_from or message.forward_from_chat) and ("forwarded" not in Config.FORWARD_FILTERS): 9 | return 400 10 | if (len(Config.FORWARD_FILTERS) == 9) or ((message.video and ("video" in Config.FORWARD_FILTERS)) or (message.document and ("document" in Config.FORWARD_FILTERS)) or (message.photo and ("photo" in Config.FORWARD_FILTERS)) or (message.audio and ("audio" in Config.FORWARD_FILTERS)) or (message.text and ("text" in Config.FORWARD_FILTERS)) or (message.animation and ("gif" in Config.FORWARD_FILTERS)) or (message.poll and ("poll" in Config.FORWARD_FILTERS)) or (message.sticker and ("sticker" in Config.FORWARD_FILTERS))): 11 | return 200 12 | else: 13 | return 400 14 | -------------------------------------------------------------------------------- /helpers/forwarder.py: -------------------------------------------------------------------------------- 1 | # (c) @AbirHasan2005 2 | 3 | import asyncio 4 | from configs import Config 5 | from pyrogram import Client 6 | from pyrogram.types import Message 7 | from pyrogram.errors import FloodWait 8 | from helpers.filters import FilterMessage 9 | from helpers.file_size_checker import CheckFileSize 10 | from helpers.block_exts_handler import CheckBlockedExt 11 | 12 | 13 | async def ForwardMessage(client: Client, msg: Message): 14 | try: 15 | ## --- Check 1 --- ## 16 | can_forward = await FilterMessage(message=msg) 17 | if can_forward == 400: 18 | return 400 19 | ## --- Check 2 --- ## 20 | has_blocked_ext = await CheckBlockedExt(event=msg) 21 | if has_blocked_ext is True: 22 | return 400 23 | ## --- Check 3 --- ## 24 | file_size_passed = await CheckFileSize(msg=msg) 25 | if file_size_passed is False: 26 | return 400 27 | ## --- Check 4 --- ## 28 | for i in range(len(Config.FORWARD_TO_CHAT_ID)): 29 | try: 30 | if Config.FORWARD_AS_COPY is True: 31 | await msg.copy(Config.FORWARD_TO_CHAT_ID[i]) 32 | else: 33 | await msg.forward(Config.FORWARD_TO_CHAT_ID[i]) 34 | except FloodWait as e: 35 | await asyncio.sleep(e.value) 36 | await client.send_message(chat_id="me", text=f"#FloodWait: Stopped Forwarder for `{e.value}s`!") 37 | await asyncio.sleep(Config.SLEEP_TIME) 38 | await ForwardMessage(client, msg) 39 | except Exception as err: 40 | await client.send_message(chat_id="me", text=f"#ERROR: `{err}`\n\nUnable to Forward Message to `{str(Config.FORWARD_TO_CHAT_ID[i])}`") 41 | except Exception as err: 42 | await client.send_message(chat_id="me", text=f"#ERROR: `{err}`") 43 | -------------------------------------------------------------------------------- /helpers/kanger.py: -------------------------------------------------------------------------------- 1 | # (c) @AbirHasan2005 2 | 3 | import asyncio 4 | from configs import Config 5 | from pyrogram import Client 6 | from pyrogram.types import Message 7 | from pyrogram.errors import UserDeactivatedBan 8 | from helpers.forwarder import ForwardMessage 9 | 10 | 11 | async def Kanger(c: Client, m: Message): 12 | await m.edit(text=f"Checking `{str(Config.FORWARD_FROM_CHAT_ID[0])}` ...") 13 | await asyncio.sleep(2) 14 | try: 15 | ForwardFromChat = await c.get_chat(chat_id=Config.FORWARD_FROM_CHAT_ID[0]) 16 | await m.edit(text=f"Successfully Linked with `{ForwardFromChat.title}` !") 17 | except Exception as err: 18 | await m.edit(text=f"Sorry, can't get **Forward From Chat**!\n\n**Error:** `{err}`") 19 | return 400 20 | await asyncio.sleep(2) 21 | for i in range(len(Config.FORWARD_TO_CHAT_ID)): 22 | await m.edit(text=f"Checking `{Config.FORWARD_TO_CHAT_ID[i]}` ...") 23 | await asyncio.sleep(2) 24 | try: 25 | ForwardToChat = await c.get_chat_member(chat_id=Config.FORWARD_TO_CHAT_ID[i], user_id=(await c.get_me()).id) 26 | if not ForwardToChat.permissions.can_send_messages: 27 | await m.edit(text=f"Sorry, you don't have permission to send messages in {ForwardToChat.title} !") 28 | return 400 29 | await m.edit(text=f"Successfully Linked with `{ForwardToChat.title}` !") 30 | await asyncio.sleep(2) 31 | except Exception as err: 32 | await m.edit(text=f"Sorry, can't get **Forward To Chat**!\n\n**Error:** `{err}`") 33 | return 400 34 | await asyncio.sleep(2) 35 | await m.edit(text="Trying to Forward Now ...") 36 | async for message in c.iter_history(chat_id=Config.FORWARD_FROM_CHAT_ID[0], reverse=True): 37 | await asyncio.sleep(Config.SLEEP_TIME) 38 | try: 39 | try_forward = await ForwardMessage(c, message) 40 | if try_forward == 400: 41 | return 400 42 | except UserDeactivatedBan: 43 | print("Congratulations!\nYour Account Banned Successfully!\nI already told you use a Fake Account. Hope you remember.") 44 | break 45 | except Exception as err: 46 | await c.send_message(chat_id="me", text=f"#ERROR: `{err}`") 47 | await m.edit(text="Channel Files Successfully Kanged!\n\n©️ A Forwarder Userbot by @AbirHasan2005") 48 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | # (c) @AbirHasan2005 | Thomas Shelby 2 | # This is Telegram Messages Forwarder UserBot! 3 | # Use this at your own risk. I will not be responsible for any kind of issue while using this! 4 | 5 | import os 6 | import sys 7 | import time 8 | import asyncio 9 | from pyrogram import Client, filters, enums 10 | from pyrogram.types import Message 11 | from pyrogram.errors import FloodWait 12 | from configs import Config 13 | from helpers.kanger import Kanger 14 | from helpers.forwarder import ForwardMessage 15 | 16 | RUN = {"isRunning": True} 17 | User = Client( 18 | name='pyrogram', 19 | api_hash=Config.API_HASH, 20 | api_id=Config.API_ID, 21 | in_memory=True, 22 | session_string=Config.STRING_SESSION 23 | ) 24 | 25 | 26 | @User.on_message((filters.text | filters.media)) 27 | async def main(client: Client, message: Message): 28 | if (-100 in Config.FORWARD_TO_CHAT_ID) or (-100 in Config.FORWARD_FROM_CHAT_ID): 29 | try: 30 | await client.send_message( 31 | chat_id="me", 32 | text=f"#VARS_MISSING: Please Set `FORWARD_FROM_CHAT_ID` or `FORWARD_TO_CHAT_ID` Config!" 33 | ) 34 | except FloodWait as e: 35 | await asyncio.sleep(e.value) 36 | return 37 | if (message.text == "!start") and message.from_user.is_self: 38 | if not RUN["isRunning"]: 39 | RUN["isRunning"] = True 40 | await message.edit( 41 | text=f"Hi, **{(await client.get_me()).first_name}**!\nThis is a Forwarder Userbot by @AbirHasan2005", 42 | disable_web_page_preview=True) 43 | elif (message.text == "!stop") and message.from_user.is_self: 44 | RUN["isRunning"] = False 45 | return await message.edit("Userbot Stopped!\n\nSend `!start` to start userbot again.") 46 | elif (message.text == "!help") and message.from_user.is_self and RUN["isRunning"]: 47 | await message.edit( 48 | text=Config.HELP_TEXT, 49 | disable_web_page_preview=True) 50 | elif message.text and (message.text.startswith("!add_forward_")) and message.from_user.is_self and RUN["isRunning"]: 51 | if len(message.text.split(" ", 1)) < 2: 52 | return await message.edit(f"{message.text} chat_id") 53 | for x in message.text.split(" ", 1)[-1].split(" "): 54 | if x.isdigit() and message.text.startswith("!add_forward_to_chat"): 55 | Config.FORWARD_TO_CHAT_ID.append(int(x)) 56 | elif x.isdigit() and message.text.startswith("!add_forward_from_chat"): 57 | Config.FORWARD_FROM_CHAT_ID.append(int(x)) 58 | elif x.lower().startswith("all_joined_"): 59 | chat_ids = [] 60 | if x.lower() == "all_joined_groups": 61 | await message.edit("Listing all joined groups ...") 62 | async for dialog in client.get_dialogs(): 63 | chat = dialog.chat 64 | if chat and (chat.type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]): 65 | chat_ids.append(chat.id) 66 | if x.lower() == "all_joined_channels": 67 | await message.edit("Listing all joined channels ...") 68 | async for dialog in client.get_dialogs(): 69 | chat = dialog.chat 70 | if chat and (chat.type == enums.ChatType.CHANNEL): 71 | chat_ids.append(chat.id) 72 | if not chat_ids: 73 | return await message.edit("No Chats Found !!") 74 | for chat_id in chat_ids: 75 | if chat_id not in Config.FORWARD_TO_CHAT_ID: 76 | Config.FORWARD_TO_CHAT_ID.append(chat_id) 77 | else: 78 | pass 79 | return await message.edit("Added Successfully!") 80 | elif message.text and (message.text.startswith("!remove_forward_")) and message.from_user.is_self and RUN["isRunning"]: 81 | if len(message.text.split(" ", 1)) < 2: 82 | return await message.edit(f"{message.text} chat_id") 83 | for x in message.text.split(" ", 1)[-1].split(" "): 84 | try: 85 | if x.isdigit() and message.text.startswith("!remove_forward_to_chat"): 86 | Config.FORWARD_TO_CHAT_ID.remove(int(x)) 87 | elif x.isdigit() and message.text.startswith("!remove_forward_from_chat"): 88 | Config.FORWARD_FROM_CHAT_ID.remove(int(x)) 89 | else: 90 | pass 91 | except ValueError: 92 | pass 93 | return await message.edit("Removed Successfully!") 94 | elif (message.text in ["!restart"]) and message.from_user.is_self: 95 | if Config.HEROKU_APP is None: 96 | await message.edit( 97 | text="Restarting Userbot ...", 98 | disable_web_page_preview=True 99 | ) 100 | # https://stackoverflow.com/a/57032597/15215201 101 | os.execl(sys.executable, sys.executable, *sys.argv) 102 | else: 103 | await message.edit( 104 | text="Restarting Heroku Dyno ..." 105 | ) 106 | Config.HEROKU_APP.restart() 107 | time.sleep(30) 108 | elif (message.text == "!kang") and message.from_user.is_self and RUN["isRunning"]: 109 | if len(Config.FORWARD_FROM_CHAT_ID) > 1: 110 | await message.edit( 111 | text="Sorry Sir,\n" 112 | "We can Kang only one Chat! But you put multiple Chat IDs in `FORWARD_FROM_CHAT_ID` Config!", 113 | disable_web_page_preview=True 114 | ) 115 | return 116 | await message.edit( 117 | text=f"Trying to Get All Messages from `{str(Config.FORWARD_FROM_CHAT_ID[0])}` and Forwarding to {' '.join(str(Config.FORWARD_TO_CHAT_ID))} ...", 118 | disable_web_page_preview=True) 119 | await asyncio.sleep(5) 120 | try_kang = await Kanger(c=User, m=message) 121 | if try_kang == 400: 122 | return 123 | elif message.chat.id in Config.FORWARD_FROM_CHAT_ID and RUN["isRunning"]: 124 | try_forward = await ForwardMessage(client, message) 125 | if try_forward == 400: 126 | return 127 | 128 | 129 | User.run() 130 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pyrogram 2 | TgCrypto 3 | heroku3 4 | --------------------------------------------------------------------------------