51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import sys
|
|
from typing import Optional
|
|
|
|
from bridge_common import TelegramClient, RouteStore, config_get, load_telegram_config
|
|
|
|
|
|
def main() -> None:
|
|
config = load_telegram_config()
|
|
default_chat_id = config_get(config, "chat_id")
|
|
if isinstance(default_chat_id, str):
|
|
default_chat_id = int(default_chat_id) if default_chat_id.strip() else None
|
|
elif not isinstance(default_chat_id, int):
|
|
default_chat_id = None
|
|
|
|
ap = argparse.ArgumentParser()
|
|
ap.add_argument("--chat-id", type=int, default=default_chat_id, required=default_chat_id is None)
|
|
ap.add_argument("--tmux-target", type=str, required=True, help='tmux target, e.g. "codex1:0.0" or "codex1"')
|
|
ap.add_argument(
|
|
"--db",
|
|
type=str,
|
|
default=config_get(config, "bridge_db") or "./bridge_routes.sqlite3",
|
|
)
|
|
ap.add_argument("--reply-to", type=int, default=None, help="Optional Telegram message_id to reply to")
|
|
ap.add_argument("--text", type=str, default=None, help="Message text. If omitted, read stdin.")
|
|
args = ap.parse_args()
|
|
|
|
token = config_get(config, "bot_token") or ""
|
|
bot = TelegramClient(token)
|
|
store = RouteStore(args.db)
|
|
|
|
text = args.text
|
|
if text is None:
|
|
text = sys.stdin.read()
|
|
|
|
sent = bot.send_message_chunked(
|
|
chat_id=args.chat_id,
|
|
text=text,
|
|
reply_to_message_id=args.reply_to,
|
|
)
|
|
|
|
# Store mapping for every chunk so user can reply to any chunk.
|
|
for m in sent:
|
|
store.link(args.chat_id, m["message_id"], "tmux", args.tmux_target, meta={})
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|