імпорт ре
імпорт asyncio
з телемарафону імпортувати TelegramClient, події
з telethon.tl.custom.button кнопка імпорту
з deep_translator імпортуйте GoogleTranslator
api_id = '29526682'
api_hash = 'c94a2402a4d826061a8b7e1ec67848e4'
вихідні_канали = [-1001132013128, -1001462219382, -1001866903385, -1002021984947,-1001311016719,-1001598032163]
канал_призначення = -1001969352277
review_channel = -1002134829593 # Ідентифікатор каналу для перегляду
клієнт = TelegramClient('session_name', api_id, api_hash)
bot = TelegramClient('bot_session', api_id, api_hash).start(bot_token='7157651829:AAHn0CJXUzCeGlC0wsp3Ozb25p34fZJerxY')
перекладач = GoogleTranslator()
async def process_message(подія):
оригінальний_текст = event.message.text або ""
оригінальний_текст = event.message.text або ""
стоп_слова = [
"#промо",
"рф",
"Росія",
"РФ",
"реклама",
"🇷🇺",
"Пост дружбы",
"текст надано",
"Російська Федерація",
"Тінькоф",
"скоро удалю пост",
"приглашаю в групу",
"МОС",
"рублі",
"рубль",
"Сбербанк",
"Сбер",
"мськ",
"СП",
"мосбиржа",
"Держдума",
"москвич",
"москвичі",
"дума",
"росіянин",
"Руських"
]
нижній_текст = вихідний_текст.нижчий()
якщо є (stop_word у нижньому регістрі_text для stop_word у stop_words):
# Тут ви можете обробляти повідомлення, що містять стоп-слова.
# Наприклад, ви можете надрукувати повідомлення або виконати будь-яку іншу дію за потреби.
print("Повідомлення містить стоп-слова та буде проігноровано або оброблено інакше.")
повернення
кнопки = [
[Button.inline("✅ Опублікувати", data=f"publish_{event.message.id}"),
Button.inline("❌ Відхилити", data=f"reject_{event.message.id}")]
]
# Якщо повідомлення надходить зі спеціального каналу
# Чищення від заданих фраз
якщо event.chat_id в [-1001311016719]:
phrases_to_remove = ["TG чат", "Instagram", "TikTok", "YouTube", "Facebook", "Twitter", "Блог", "Binance App"]
для фрази у phrases_to_remove:
шаблон = rf'\b{re.escape(фраза)}\b'
original_text = re.sub(pattern, '', original_text)
оригінальний_текст = re.sub(r'[\*\|]', '', оригінальний_текст)
оригінальний_текст = re.sub(r'\[\]\((https?://[^\s]+)\)', '', вихідний_текст)
оригінальний_текст = оригінальний_текст.strip()
# Видалення посилань з кінця тексту
# Шукаємо індекс початкової останньої симптоматики посилань
last_links_start_index = re.search(r"(https?://[^\s]+)(?=(\s+https?://|\s*$))", оригінальний_текст[::-1])
якщо last_links_start_index:
# Якщо знайдете, видаляємо використання з цього місця
оригінальний_текст = оригінальний_текст[:len(оригінальний_текст) - останні_посилання_початок_індексу.старт()]
original_text = original_text.strip() # Очищаємо можливості можливості на початку та в кінці
кнопки = [
[Button.inline("✅ Опублікувати", data=f"publish_{event.message.id}"),
Button.inline("❌ Відхилити", data=f"reject_{event.message.id}")]
]
# Відправлення повідомлення
якщо event.message.media:
медіа = очікування event.message.download_media()
await bot.send_file(review_channel, media, caption=original_text, buttons=кнопки)
ще:
await bot.send_message(review_channel, original_text, buttons=buttons)
elif event.chat_id == -1002021984947 або event.chat_id == -1001866903385:
# Додаткова перевірка для іншого каналу і видалення конкретної фрази
original_text = original_text.replace("@SatoshiNews | Главное о крипте", "")
translated_text = GoogleTranslator(source='auto', target='uk').translate(original_text)
якщо event.message.media:
медіа = очікування event.message.download_media()
await bot.send_file(review_channel, media, caption=translated_text, buttons=кнопки)
ще:
await bot.send_message(review_channel, translated_text, buttons=buttons)
ще:
# Видалення лише посилань, які не є частиною перелічених фраз
no_links_text = re.sub(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\'() ,]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', '',
оригінальний_текст)
cleaned_text = re.sub(r'[\[\](){}*]', '', no_links_text)
modified_text = cleaned_text.replace("Crypto Headlines", "").rstrip("\n")
if modified_text.endswith("\n\n"):
змінений_текст = змінений_текст[:-2]
спробуйте:
# Переклад тексту
translated_text = GoogleTranslator(source='auto', target='uk').translate(modified_text)
крім винятку як translate_error:
print(f"Помилка перекладу: {translate_error}")
перекладений_текст = змінений_текст
якщо event.chat_id != -1001462219382 і event.message.media:
медіа = очікування event.message.download_media()
await bot.send_file(review_channel, media, caption=translated_text, buttons=кнопки)
ще:
await bot.send_message(review_channel, translated_text, buttons=buttons)
async def callback_handler (подія):
callback_data = event.data.decode("utf-8")
дія, msg_id = callback_data.split("_")
msg_id = int(msg_id)
if action == "publish":
msg = очікування event.get_message()
якщо msg.media:
await bot.send_file(destination_channel, msg.media, caption=msg.text)
ще:
очікувати bot.send_message(destination_channel, msg.text)
await msg.delete() # Видалити повідомлення з каналу перевірки після публікації
elif action == "reject":
msg = очікування event.get_message()
await msg.delete() # Просто видаляємо повідомлення, якщо воно було відхилено
# Реєстрація подій для моніторингу нових повідомлень у вказаних каналах
# для channel_id у source_channels:
# @client.on(events.NewMessage(chats=channel_id))
# обробник async def (подія):
# очікування process_message(event)
async def main():
асинхронно з клієнтом, ботом:
# Реєстрація обробників
client.add_event_handler(process_message, events.NewMessage(chats=source_channels))
bot.add_event_handler(callback_handler, events.CallbackQuery)
# Запуск клієнтів
await client.run_until_disconnected()
очікувати bot.run_until_disconnected()
цикл = asyncio.get_event_loop()
# Використовуємо цикл для запуску головної корутини
loop.run_until_complete(main())
# Закриваємо цикл після завершення роботи
loop.close()