import argparse import json from pathlib import Path from linkki_poster.broadcast_ops import delete_binding_from_telegram, update_texts from linkki_poster.models import Config, Language from linkki_poster.progress import ProgressDisplay from webapp.storage import get_binding, load_metadata def main() -> None: parser = argparse.ArgumentParser(description="Advanced broadcast management helper.") parser.add_argument("directory", help="Broadcast directory") parser.add_argument("action", choices=["update-texts", "delete-telegram"]) parser.add_argument("--languages", default="fi,sv,en", help="Comma-separated languages for update-texts") parser.add_argument("--config", default="telegram_config.json", help="Path to Telegram config JSON") args = parser.parse_args() config = load_config(Path(args.config)) post_dir = Path(args.directory).resolve() metadata = load_metadata(post_dir) binding = get_binding(metadata) if binding is None: raise ValueError("Broadcast is not linked to Telegram.") progress = ProgressDisplay() if args.action == "delete-telegram": delete_binding_from_telegram(config, binding, progress) return changed_languages = { Language(language.strip()) for language in args.languages.split(",") if language.strip() } update_texts(post_dir, config, binding, changed_languages, progress) def load_config(config_path: Path) -> Config: payload = json.loads(config_path.read_text(encoding="utf-8")) return Config( bot_token=str(payload["bot_token"]).strip(), chat_id=str(payload["chat_id"]).strip(), channel_username=str(payload.get("channel_username", "")).strip(), ) if __name__ == "__main__": main()