import time import asyncio from telethon.sync import TelegramClient class TelegramForwarder: def __init__(self, api_id, api_hash, phone_number): self.api_id = api_id self.api_hash = api_hash self.phone_number = phone_number self.client = TelegramClient('session_' + phone_number, api_id, api_hash) async def list_chats(self): await self.client.connect() # Ensure you're authorized if not await self.client.is_user_authorized(): await self.client.send_code_request(self.phone_number) await self.client.sign_in(self.phone_number, input('Enter the code: ')) # Get a list of all the dialogs (chats) dialogs = await self.client.get_dialogs() chats_file = open(f"chats_of_{self.phone_number}.txt", "w") # Print information about each chat for dialog in dialogs: print(f"Chat ID: {dialog.id}, Title: {dialog.title}") chats_file.write(f"Chat ID: {dialog.id}, Title: {dialog.title} \n") print("List of groups printed successfully!") async def forward_messages_to_channel(self, source_chat_id, destination_channel_id, keywords): await self.client.connect() # Ensure you're authorized if not await self.client.is_user_authorized(): await self.client.send_code_request(self.phone_number) await self.client.sign_in(self.phone_number, input('Enter the code: ')) replytexts ="None" ref_msg = "None" previous_message_UK ="None" previous_message_Younus ="None" previous_message_Ankit ="None" previous_message_Pablo ="None" previous_message_GSociety ="None" previous_message_FXM ="None" x=0 destination_channel_id_UK= -1002477328454 keywords_UK = "MyOwnUK: " source_chat_id_UK=-1002466214276 keywords_Younus = "Younus: " source_chat_id_Younus= -1002562218812 keywords_Ankit = "Ankit: " source_chat_id_Ankit=-1001178695857 keywords_Pablo = "Pablo: " source_chat_id_Pablo=-1001897903474 keywords_GSociety = "GSociety: " source_chat_id_GSociety=-1001883957585 keywords_FXM = "FXM: " source_chat_id_FXM=-1001959885205 last_message_id_UK = (await self.client.get_messages(source_chat_id_UK, limit=1))[0].id last_message_id_Younus = (await self.client.get_messages(source_chat_id_Younus, limit=1))[0].id last_message_id_Ankit = (await self.client.get_messages(source_chat_id_Ankit, limit=1))[0].id last_message_id_Pablo = (await self.client.get_messages(source_chat_id_Pablo, limit=1))[0].id last_message_id_GSociety = (await self.client.get_messages(source_chat_id_GSociety, limit=1))[0].id last_message_id_FXM = (await self.client.get_messages(source_chat_id_FXM, limit=1))[0].id while True: print("Checking for messages and forwarding them...") # Get new messages since the last checked message messages_UK = await self.client.get_messages(source_chat_id_UK, min_id=last_message_id_UK-1, limit=None) messages_Younus = await self.client.get_messages(source_chat_id_Younus, min_id=last_message_id_Younus-1, limit=None) messages_Ankit = await self.client.get_messages(source_chat_id_Ankit, min_id=last_message_id_Ankit-1, limit=None) messages_Pablo = await self.client.get_messages(source_chat_id_Pablo, min_id=last_message_id_Pablo-1, limit=None) messages_GSociety = await self.client.get_messages(source_chat_id_GSociety, min_id=last_message_id_GSociety-1, limit=None) messages_FXM = await self.client.get_messages(source_chat_id_FXM, min_id=last_message_id_FXM-1, limit=None) print( f"LMID UK: {last_message_id_UK}, " f"Younus: {last_message_id_Younus}, " f"Ankit: {last_message_id_Ankit}, " f"Pablo: {last_message_id_Pablo}, " f"GSociety: {last_message_id_GSociety}, " f"FXM: {last_message_id_FXM}" ) for message_UK in reversed(messages_UK): if message_UK.text != previous_message_UK: previous_message_UK =message_UK.text if message_UK.reply_to_msg_id: replytexts = await self.client.get_messages(source_chat_id_UK, min_id=message_UK.reply_to_msg_id-1, limit=None) x = len(replytexts) if (x>0): ref_msg=replytexts[x-1].text if not message_UK.edit_date: print(f"Message contains: {message_UK.text}") await self.client.send_message(destination_channel_id_UK, keywords_UK+"\n"+str(message_UK.id)+"\n\n"+message_UK.text+"\n\nMessage_is_reply_of:\n"+str(message_UK.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Message forwarded from UK") await asyncio.sleep(3) if message_UK.edit_date: print(f"Edited Message contains: {message_UK.text}") await self.client.send_message(destination_channel_id_UK, keywords_UK+"\nEdited Message:"+"\n"+str(message_UK.id)+"\n\n"+message_UK.text+"\n\nMessage_is_reply_of:\n"+str(message_UK.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Edited Message forwarded from UK") await asyncio.sleep(3) replytexts ="None" ref_msg = "None" x=0 last_message_id_UK = max(last_message_id_UK, message_UK.id) # Update the last message ID for message_Younus in reversed(messages_Younus): if message_Younus.text != previous_message_Younus: previous_message_Younus =message_Younus.text if message_Younus.reply_to_msg_id: replytexts = await self.client.get_messages(source_chat_id_Younus, min_id=message_Younus.reply_to_msg_id-1, limit=None) x = len(replytexts) if (x>0): ref_msg=replytexts[x-1].text if not message_Younus.edit_date: print(f"Message contains: {message_Younus.text}") await self.client.send_message(destination_channel_id_UK, keywords_Younus+"\n"+str(message_Younus.id)+"\n\n"+message_Younus.text+"\n\nMessage_is_reply_of:\n"+str(message_Younus.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Message forwarded from Younus") await asyncio.sleep(3) if message_Younus.edit_date: print(f"Edited Message contains: {message_Younus.text}") await self.client.send_message(destination_channel_id_UK, keywords_Younus+"\nEdited Message:"+"\n"+str(message_Younus.id)+"\n\n"+message_Younus.text+"\n\nMessage_is_reply_of:\n"+str(message_Younus.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Edited Message forwarded from Younus") await asyncio.sleep(3) replytexts ="None" ref_msg = "None" x=0 last_message_id_Younus = max(last_message_id_Younus, message_Younus.id) # Update the last message ID for message_Ankit in reversed(messages_Ankit): if message_Ankit.text != previous_message_Ankit: previous_message_Ankit =message_Ankit.text if message_Ankit.reply_to_msg_id: replytexts = await self.client.get_messages(source_chat_id_Ankit, min_id=message_Ankit.reply_to_msg_id-1, limit=None) x = len(replytexts) if (x>0): ref_msg=replytexts[x-1].text if not message_Ankit.edit_date: print(f"Message contains: {message_Ankit.text}") await self.client.send_message(destination_channel_id_UK, keywords_Ankit+"\n"+str(message_Ankit.id)+"\n\n"+message_Ankit.text+"\n\nMessage_is_reply_of:\n"+str(message_Ankit.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Message forwarded from Ankit") await asyncio.sleep(3) if message_Ankit.edit_date: print(f"Edited Message contains: {message_Ankit.text}") await self.client.send_message(destination_channel_id_UK, keywords_Ankit+"\nEdited Message:"+"\n"+str(message_Ankit.id)+"\n\n"+message_Ankit.text+"\n\nMessage_is_reply_of:\n"+str(message_Ankit.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Edited Message forwarded from Ankit") await asyncio.sleep(3) replytexts ="None" ref_msg = "None" x=0 last_message_id_Ankit = max(last_message_id_Ankit, message_Ankit.id) # Update the last message ID for message_Pablo in reversed(messages_Pablo): if message_Pablo.text != previous_message_Pablo: previous_message_Pablo =message_Pablo.text if message_Pablo.reply_to_msg_id: replytexts = await self.client.get_messages(source_chat_id_Pablo, min_id=message_Pablo.reply_to_msg_id-1, limit=None) x = len(replytexts) if (x>0): ref_msg=replytexts[x-1].text if not message_Pablo.edit_date: print(f"Message contains: {message_Pablo.text}") await self.client.send_message(destination_channel_id_UK, keywords_Pablo+"\n"+str(message_Pablo.id)+"\n\n"+message_Pablo.text+"\n\nMessage_is_reply_of:\n"+str(message_Pablo.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Message forwarded from Pablo") await asyncio.sleep(3) if message_Pablo.edit_date: print(f"Edited Message contains: {message_Pablo.text}") await self.client.send_message(destination_channel_id_UK, keywords_Pablo+"\nEdited Message:"+"\n"+str(message_Pablo.id)+"\n\n"+message_Pablo.text+"\n\nMessage_is_reply_of:\n"+str(message_Pablo.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Edited Message forwarded from Pablo") await asyncio.sleep(3) replytexts ="None" ref_msg = "None" x=0 last_message_id_Pablo = max(last_message_id_Pablo, message_Pablo.id) # Update the last message ID for message_GSociety in reversed(messages_GSociety): if message_GSociety.text != previous_message_GSociety: previous_message_GSociety =message_GSociety.text if message_GSociety.reply_to_msg_id: replytexts = await self.client.get_messages(source_chat_id_GSociety, min_id=message_GSociety.reply_to_msg_id-1, limit=None) x = len(replytexts) if (x>0): ref_msg=replytexts[x-1].text if not message_GSociety.edit_date: print(f"Message contains: {message_GSociety.text}") await self.client.send_message(destination_channel_id_UK, keywords_GSociety+"\n"+str(message_GSociety.id)+"\n\n"+message_GSociety.text+"\n\nMessage_is_reply_of:\n"+str(message_GSociety.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Message forwarded from GSociety") await asyncio.sleep(3) if message_GSociety.edit_date: print(f"Edited Message contains: {message_GSociety.text}") await self.client.send_message(destination_channel_id_UK, keywords_GSociety+"\nEdited Message:"+"\n"+str(message_GSociety.id)+"\n\n"+message_GSociety.text+"\n\nMessage_is_reply_of:\n"+str(message_GSociety.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Edited Message forwarded from GSociety") await asyncio.sleep(3) replytexts ="None" ref_msg = "None" x=0 last_message_id_GSociety = max(last_message_id_GSociety, message_GSociety.id) # Update the last message ID for message_FXM in reversed(messages_FXM): if message_FXM.text != previous_message_FXM: previous_message_FXM =message_FXM.text if message_FXM.reply_to_msg_id: replytexts = await self.client.get_messages(source_chat_id_FXM, min_id=message_FXM.reply_to_msg_id-1, limit=None) x = len(replytexts) if (x>0): ref_msg=replytexts[x-1].text if not message_FXM.edit_date: print(f"Message contains: {message_FXM.text}") await self.client.send_message(destination_channel_id_UK, keywords_FXM+"\n"+str(message_FXM.id)+"\n\n"+message_FXM.text+"\n\nMessage_is_reply_of:\n"+str(message_FXM.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Message forwarded from FXM") await asyncio.sleep(3) if message_FXM.edit_date: print(f"Edited Message contains: {message_FXM.text}") await self.client.send_message(destination_channel_id_UK, keywords_FXM+"\nEdited Message:"+"\n"+str(message_FXM.id)+"\n\n"+message_FXM.text+"\n\nMessage_is_reply_of:\n"+str(message_FXM.reply_to_msg_id)+"\n\n"+ref_msg) print("\n"+f"Reply of Message: {ref_msg}"+"\n") print("Edited Message forwarded from FXM") await asyncio.sleep(3) replytexts ="None" ref_msg = "None" x=0 last_message_id_FXM = max(last_message_id_FXM, message_FXM.id) # Update the last message ID # Add a delay before checking for new messages again await asyncio.sleep(3) # Adjust the delay time as needed # Function to read credentials from file def read_credentials(): try: with open("credentials.txt", "r") as file: lines = file.readlines() api_id = lines[0].strip() api_hash = lines[1].strip() phone_number = lines[2].strip() return api_id, api_hash, phone_number except FileNotFoundError: print("Credentials file not found.") return None, None, None # Function to write credentials to file def write_credentials(api_id, api_hash, phone_number): with open("credentials.txt", "w") as file: file.write(api_id + "\n") file.write(api_hash + "\n") file.write(phone_number + "\n") async def main(): # Attempt to read credentials from file api_id, api_hash, phone_number = read_credentials() # If credentials not found in file, prompt the user to input them if api_id is None or api_hash is None or phone_number is None: api_id = input("Enter your API ID: ") api_hash = input("Enter your API Hash: ") phone_number = input("Enter your phone number: ") # Write credentials to file for future use write_credentials(api_id, api_hash, phone_number) forwarder = TelegramForwarder(api_id, api_hash, phone_number) destination_channel_id= -1002477328454 keywords = "MyOwnUK: " source_chat_id=-1002466214276 await forwarder.forward_messages_to_channel(source_chat_id, destination_channel_id, keywords) # Start the event loop and run the main function if __name__ == "__main__": asyncio.run(main())