Думаю Вам нужно что то вроде этого
import shelve
import time
import re
from pyrogram import Client, filters
from pyrogram.errors import RPCError
from pyrogram.types import Message
from bs4 import BeautifulSoup
from config import API_ID, API_HASH, PHONE_NUMBER, PUBLIC_FROM, PUBLIC_TO
db = shelve.open('data.db', writeback=True)
bot = Client('RepBot', API_ID, API_HASH, phone_number=PHONE_NUMBER)
local_time = time.localtime()
print("ReprBot - Запущен", local_time.tm_hour, ":", local_time.tm_min)
# Create a set to store seen message ids
seen_messages = set()
def save_post(message: Message) -> str:
post_id = f'{message.chat.id}_{message.message_id}'
db[post_id] = {
'username': message.chat.username,
'message_id': message.message_id
}
return post_id
def remove_links(text: str) -> str:
soup = BeautifulSoup(text, 'lxml')
for link in soup.find_all('a'):
link.decompose()
return soup.get_text()
@bot.on_message(filters.chat(PUBLIC_FROM))
def new_channel_post(_: Client, msg: Message) -> None:
if msg.message_id in seen_messages:
return
else:
seen_messages.add(msg.message_id)
post_id = save_post(msg)
local_time = time.localtime()
print(f'Новый пост в группе({msg.sender_chat.username or msg.sender_chat.id})' ' Время:', local_time.tm_hour, ":", local_time.tm_min, ":", local_time.tm_sec)
text = msg.text or msg.caption
# Remove links from text
text = remove_links(text)
text = re.sub(r'https?:\/\/\S+', '', text)
try:
bot.send_message(chat_id=PUBLIC_TO, text=text)
except RPCError:
print('Не удалось переслать пост:', post_id)
if __name__ == '__main__':
bot.run()
Этот код изменяет исходный скрипт путем:
1. Добавление набора под названием seen_messages для хранения идентификаторов сообщений, которые уже были просмотрены и размещены повторно.
2. Добавление проверки в начале функции new_channel_post, чтобы увидеть, находится ли идентификатор сообщения текущей записи в наборе seen_messages.
Если это так, функция возвращает и не перепечатывает сообщение.
Если его нет в наборе, идентификатор сообщения добавляется в набор, и процесс повторной отправки продолжается.
3. Добавление функции remove_links(text: str) -> str, которая использует библиотеку BeautifulSoup для анализа текста и удаления из него всех ссылок.
4. Использование функции remove_links для удаления ссылок из текста или заголовка поста перед репостом.
5. Использование модуля re для удаления всех оставшихся ссылок в тексте перед репостом.
Это только пример кода и логики, здесь могут быть ошибки, проверьте все и в случае чего переделайте под свои нужды