Проблема в граббере постов тг, посты криво отправляются если в посте больше одной фотографии - сначала кидается пост с первой фотографией из альбома и последующие посты с оставшимися фотографиями, происходит это когда в канал "откуда" пересылают пост. Также не сохраняется форматирование. Проблему эту я уже решал, но не помню как, прошу помощи у форумчан from telethon import TelegramClient, events from telethon import errors import asyncio import re # ---- api_id = 6118138 api_hash = "adc8s354e5243aacaasddf569567b3be7c" # ---- channels = '@' # откуда my_channel = '@' # куда # ----- KEYS = { "": '', "": '', "": "", "": "", "": "", r"https://\S+": "", r"http://\S+": "", "": "" } # ---- Bad_Keys = [''] # ---- tags = '' # ---- with TelegramClient('myApp13', api_id, api_hash) as client: print("~Activated~") Client.on(events.NewMessage(chats=channels)) async def Messages(event): if not [element for element in Bad_Keys if event.raw_text.lower().__contains__(element)]: text = event.raw_text for i in KEYS: text = re.sub(i, KEYS, text) if not event.grouped_id\ and not event.message.forward: try: await client.send_message( entity=my_channel, file=event.message.media, message=text + tags, parse_mode='md', link_preview=False) except errors.FloodWaitError as e: print(f'[!] Ошибка флуда ждем: {e.seconds} секунд') await asyncio.sleep(e.seconds) except Exception as e: print('[!] Ошибка', e) elif event.message.text and not event.message.media\ and not event.message.forward\ and not event.grouped_id: try: await client.send_message( entity=my_channel, message=text + tags, parse_mode='md', link_preview=False) except errors.FloodWaitError as e: print(f'[!] Ошибка флуда ждем: {e.seconds} секунд') await asyncio.sleep(e.seconds) except Exception as e: print('[!] Ошибка', e) elif event.message.forward: try: await event.message.forward_to(my_channel) except errors.FloodWaitError as e: print(f'[!] Ошибка флуда ждем: {e.seconds} секунд') except Exception as e: print('[!] Ошибка', e) Client.on(events.Album(chats=channels)) async def Album(event): text = event.original_update.message.message print(text) if not [element for element in Bad_Keys if text.lower().__contains__(element)]: for i in KEYS: text = re.sub(i, KEYS, text) try: await client.send_message( entity=my_channel, file=event.messages, message=text + tags, parse_mode='md', link_preview=False) except errors.FloodWaitError as e: print(f'[!] Ошибка флуда ждем: {e.seconds} секунд') await asyncio.sleep(e.seconds) except Exception as e: print('[!] Ошибка', e) client.run_until_disconnected()
from telethon import TelegramClient, events from telethon import errors import asyncio import re # ---- api_id = 6118138 api_hash = "adc8s354e5243aacaasddf569567b3be7c" # ---- channels = '@' # откуда my_channel = '@' # куда # ----- KEYS = { "": '', "": '', "": "", "": "", "": "", r"https://\S+": "", r"http://\S+": "", "": "" } # ---- Bad_Keys = [''] # ---- tags = '' # ---- client = TelegramClient('myApp13', api_id, api_hash) Client.on(events.NewMessage(chats=channels)) async def Messages(event): if not [element for element in Bad_Keys if element in event.raw_text.lower()]: text = event.raw_text for i in KEYS: text = re.sub(i, KEYS, text) # Обрабатываем только если это не часть альбома (grouped_id) if not event.grouped_id and not event.message.forwards: try: if event.message.media: await client.send_message( entity=my_channel, file=event.message.media, message=text + tags, parse_mode='md', link_preview=False ) else: await client.send_message( entity=my_channel, message=text + tags, parse_mode='md', link_preview=False ) except errors.FloodWaitError as e: print(f'[!] Ошибка флуда ждем: {e.seconds} секунд') await asyncio.sleep(e.seconds) except Exception as e: print('[!] Ошибка', e) # Обрабатываем пересланные сообщения elif event.message.forwards: try: await event.message.forward_to(my_channel) except errors.FloodWaitError as e: print(f'[!] Ошибка флуда ждем: {e.seconds} секунд') await asyncio.sleep(e.seconds) except Exception as e: print('[!] Ошибка', e) Client.on(events.Album(chats=channels)) async def Album(event): # Получаем текст из первого сообщения в альбоме text = event.messages[0].message if event.messages and event.messages[0].message else "" if not [element for element in Bad_Keys if element in text.lower()]: for i in KEYS: text = re.sub(i, KEYS, text) try: # Отправляем весь альбом вместе await client.send_message( entity=my_channel, file=event.messages, # Все медиафайлы из альбома message=text + tags, parse_mode='md', link_preview=False ) except errors.FloodWaitError as e: print(f'[!] Ошибка флуда ждем: {e.seconds} секунд') await asyncio.sleep(e.seconds) except Exception as e: print('[!] Ошибка', e) with client: client.run_until_disconnected()
тебе надо чекать является ли сообщение медиа группой, если это так, то собирать все фотки из этой медиа группы с помощью каждой отработки хендлера(тг так устроен, что каждая медиа обрабатывается как отдельное сообщение). Попробуй какую-то общую переменную сделать или что-то типа того и собирать туда все фотки, чтобы потом собрать на пересылке в одну медиа группу и отправить разом