Budget: 3000 UAH Deadline: 1 day
Good day,
I have a ready-made similar bot that works steadily 24/7, parses a large number of channels, and sends them to the moderation group. The moderation group has many editing functions, including translation, link removal, rewrite, and much more.
The bot has been tested and has been successfully working for 2 clients for a couple of months without any issues. On average, it parses about 50 channels simultaneously for clients.
I can provide access for testing for free.
I have indicated the price for transferring the bot to you and launching it on your server.
You can read reviews of other clients about this bot in the profile.
Mykhailo P.
Winning proposal- Projects 125
- Rating 5.0
- Rating 4 053
Budget: 1750 UAH Deadline: 2 days
According to the project brief, there are many questions. Write to discuss, I am currently available for work!
Budget: 2000 UAH Deadline: 10 days
Good day, Andriy.
I can do this for you without any problems.
Feel free to contact me.
Budget: 3000 UAH Deadline: 4 days
As I understand, you need a bot intermediary for moderating posts?
I just did a similar project.
I will be glad to discuss cooperation.
Budget: 1000 UAH Deadline: 1 day
Good day, we can do it quickly!
I write in the Python language
Please reply in DM with a more detailed SOW!
Proposals are currently absent
-
Andrii K.
13 May 2024
імпорт ре
імпорт 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()