68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
#!/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()
|