#!/usr/bin/env python3 """TeamPulse — Teams meeting chat audit tool. Usage: .venv/bin/python main.py Opens a browser, navigates to Teams Web. Post !start "Presenter Name" and !stop in the meeting chat to define a time window. A Markdown memo is saved to the current directory when the window closes. """ import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).parent / "src")) from playwright.sync_api import sync_playwright from teampulse.auth import create_context, ensure_logged_in from teampulse.memo import generate_memo, save_memo from teampulse.models import AuditEntry from teampulse.monitor import Monitor from teampulse.resolver import Resolver CACHE_PATH = Path.home() / ".teampulse" / "cache.json" def main(): with sync_playwright() as playwright: print("Starte Browser...") context = create_context(playwright, headless=False) ensure_logged_in(context) page = context.new_page() page.goto("https://teams.microsoft.com") monitor = Monitor(page=page, current_user="") print("Lese eingeloggten Nutzer...") current_user = monitor.get_current_user_display_name() monitor._current_user = current_user print(f"Eingeloggt als: {current_user}") print("\nNavigiere im Browser zur Meeting-Chat-Seite.") print("Poste dann '!start \"Name des Vortragenden\"' im Chat.\n") window = monitor.run() resolver = Resolver(cache_path=CACHE_PATH, page=page) print(f"\nLöse {len(window.entries)} E-Mail-Adresse(n) auf...") resolved_entries = [] for entry in window.entries: email = resolver.resolve(entry.display_name) print(f" {entry.display_name} → {email}") resolved_entries.append(AuditEntry(display_name=entry.display_name, email=email)) window.entries = resolved_entries memo_content = generate_memo(window) path = save_memo(memo_content) print(f"\nMemo gespeichert: {path}") print("\n" + memo_content) context.close() if __name__ == "__main__": main()