И уже на основе их написал свой новый код:
Теперь он прекрасно справляется со своей задачей. Мой второй аккаунт моментально пересылает мне сообщения после того, как в указанном публичном канале появился пост. +, я сам могу подписаться на любой канал - закрытый или открытый.
Возможно, идея не нова, не претендую на авторство, реализовал - так. Если кому-то интересно узнать полный разбор кода бота и бота на вашу учетку - могу сделать, но только если будет спрос.
import os
import asyncio
import logging
from telethon import TelegramClient, events
from dotenv import load_dotenv
# Здесь я загружаю переменные окружения из файла .env, чтобы безопасно хранить конфиденциальные данные
load_dotenv()
# Настраиваю логирование, чтобы записывать важные события и ошибки в файл
logging.basicConfig(
filename='monitoring.log',
format='%(asctime)s - %(levelname)s - %(message)s',
level=logging.INFO
)
# Получаю API ID и API HASH из переменных окружения
api_id = os.getenv('API_ID')
api_hash = os.getenv('API_HASH')
session_name = 'monitoring_session'
# Указываю список каналов, которые хочу мониторить
MONITORED_CHANNELS = ['realgachi', 'mgerkom']
# Определяю ключевые слова, по которым буду искать сообщения
KEYWORDS = ['промокод', 'акция', 'розыгрыш', 'раздача']
# Получаю свой Telegram ID для пересылки сообщений
YOUR_TELEGRAM_ID = int(os.getenv('YOUR_TELEGRAM_ID'))
# Создаю клиент Telethon с заданными параметрами
client = TelegramClient(session_name, api_id, api_hash)
# Обработчик новых сообщений в указанных каналах
@client.on(events.NewMessage(chats=MONITORED_CHANNELS))
async def handler(event):
try:
message = event.message.message
# Проверяю, содержит ли сообщение одно из ключевых слов
if any(keyword.lower() in message.lower() for keyword in KEYWORDS):
# Пересылаю сообщение на свой Telegram ID
await client.forward_messages(YOUR_TELEGRAM_ID, event.message)
logging.info(f"Сообщение из {event.chat.username} переслано.")
except Exception as e:
logging.error(f"Ошибка при обработке сообщения: {e}")
async def main():
# Запускаю клиента и начинаю мониторинг
await client.start()
logging.info("Мониторинг запущен.")
await client.run_until_disconnected()
if __name__ == '__main__':
asyncio.run(main())
Теперь он прекрасно справляется со своей задачей. Мой второй аккаунт моментально пересылает мне сообщения после того, как в указанном публичном канале появился пост. +, я сам могу подписаться на любой канал - закрытый или открытый.
Возможно, идея не нова, не претендую на авторство, реализовал - так. Если кому-то интересно узнать полный разбор кода бота и бота на вашу учетку - могу сделать, но только если будет спрос.