70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
#!/usr/bin/env python
|
|
"""Weekly digest script - generates and sends to Telegram."""
|
|
|
|
import asyncio
|
|
import logging
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Add project root to path
|
|
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
|
|
|
from aiogram import Bot
|
|
from aiogram.client.default import DefaultBotProperties
|
|
from aiogram.enums import ParseMode
|
|
|
|
from d_brain.config import get_settings
|
|
from d_brain.services.git import VaultGit
|
|
from d_brain.services.processor import ClaudeProcessor
|
|
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
async def main() -> None:
|
|
"""Generate weekly digest and send to Telegram."""
|
|
settings = get_settings()
|
|
processor = ClaudeProcessor(settings.vault_path, settings.todoist_api_key)
|
|
git = VaultGit(settings.vault_path)
|
|
|
|
logger.info("Starting weekly digest generation...")
|
|
|
|
result = processor.generate_weekly()
|
|
|
|
if "error" in result:
|
|
report = f"Error: {result['error']}"
|
|
logger.error("Weekly digest failed: %s", result["error"])
|
|
else:
|
|
report = result.get("report", "No output")
|
|
logger.info("Weekly digest generated successfully")
|
|
# Commit any changes
|
|
git.commit_and_push("chore: weekly digest")
|
|
|
|
# Send to Telegram
|
|
bot = Bot(
|
|
token=settings.telegram_bot_token,
|
|
default=DefaultBotProperties(parse_mode=ParseMode.HTML),
|
|
)
|
|
try:
|
|
user_id = settings.allowed_user_ids[0] if settings.allowed_user_ids else None
|
|
if not user_id:
|
|
logger.error("No allowed user IDs configured")
|
|
return
|
|
|
|
try:
|
|
await bot.send_message(chat_id=user_id, text=report)
|
|
except Exception:
|
|
# Fallback: send without HTML parsing
|
|
await bot.send_message(chat_id=user_id, text=report, parse_mode=None)
|
|
|
|
logger.info("Weekly digest sent to user %s", user_id)
|
|
finally:
|
|
await bot.session.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|