Files
tg-digest-docker/main.py
Тимур Абайдулин ba1245a06c init
2026-02-07 16:31:46 +03:00

101 lines
3.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Telegram News Digest — точка входа.
Использование (через Docker):
docker compose run --rm app python main.py --auth # Авторизация
docker compose run --rm app python main.py --dry-run # Тест (без отправки)
docker compose run --rm app python main.py # Боевой запуск
"""
import argparse
import asyncio
import logging
import sys
from config import get_config
from collector import MessageCollector
from summarizer import Summarizer
from delivery import DeliveryManager
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
datefmt="%H:%M:%S",
)
logger = logging.getLogger(__name__)
async def run_auth(config: dict):
logger.info("🔑 Авторизация в Telegram...")
collector = MessageCollector(config)
await collector.auth()
logger.info("✓ Авторизация завершена. Сессия сохранена в /data/")
async def run_digest(
config: dict, collect_only: bool = False, dry_run: bool = False
):
# 1. Сбор
logger.info("📥 Сбор сообщений из каналов...")
collector = MessageCollector(config)
result = await collector.collect()
if result.errors:
logger.warning(f"Ошибки в {len(result.errors)} каналах:")
for ch, err in result.errors.items():
logger.warning(f" {ch}: {err}")
if not result.messages:
logger.info("📭 Нет новых сообщений. Выход.")
return
if collect_only:
for msg in result.messages[:20]:
print(f"\n[{msg.channel_title}] {msg.date.strftime('%H:%M')}")
print(msg.text[:200] + ("..." if len(msg.text) > 200 else ""))
return
# 2. Суммаризация
logger.info("🤖 Суммаризация через LLM...")
summarizer = Summarizer(config)
digest = await summarizer.summarize(result.messages)
if dry_run:
print("\n" + "=" * 60)
print(digest)
print("=" * 60)
logger.info("(dry-run: дайджест не отправлен)")
return
# 3. Доставка
logger.info("📤 Отправка дайджеста...")
delivery = DeliveryManager(config)
await delivery.deliver(digest)
logger.info("✅ Готово!")
def main():
parser = argparse.ArgumentParser(description="Telegram News Digest")
parser.add_argument("--auth", action="store_true")
parser.add_argument("--collect", action="store_true")
parser.add_argument("--dry-run", action="store_true")
args = parser.parse_args()
try:
config = get_config()
except (KeyError, ValueError) as e:
logger.error(f"Ошибка конфигурации: {e}")
logger.error("Проверь .env файл (см. .env.example)")
sys.exit(1)
if args.auth:
asyncio.run(run_auth(config))
else:
asyncio.run(
run_digest(config, collect_only=args.collect, dry_run=args.dry_run)
)
if __name__ == "__main__":
main()