Initial Marktplaats CLI scaffold
Create mrktplaats-cli from twdehands-cli, updating module/import names, command branding, and token paths while preserving command behavior and payload formats.
This commit is contained in:
111
scripts/poll_nvidia_reply.py
Executable file
111
scripts/poll_nvidia_reply.py
Executable file
@@ -0,0 +1,111 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Long-running poller for a conversation on the mrktplaats-cli.
|
||||
|
||||
Usage: python3 scripts/poll_nvidia_reply.py --conv CONV_ID --user USER_ID [--interval 900]
|
||||
|
||||
The script runs in a loop, calling `go run main.go messages --conv CONV_ID --limit 50`
|
||||
in the repo directory, parses the JSON output and exits when it finds any message
|
||||
whose `sender_id` is not the provided USER_ID (i.e. a seller reply).
|
||||
|
||||
When a reply is found the script writes a JSON file with the matching messages to
|
||||
/home/joren/.local/share/opencode/tool-output/nvidia_reply_found.json and exits with
|
||||
code 0. It logs progress to stdout/stderr so you can follow the `nohup` log file.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import subprocess
|
||||
import time
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
def now():
|
||||
return datetime.utcnow().isoformat() + "Z"
|
||||
|
||||
|
||||
def fetch_messages(conv, workdir):
|
||||
# Run the mrktplaats-cli to fetch the conversation messages
|
||||
cmd = ["go", "run", "main.go", "messages", "--conv", conv, "--limit", "50"]
|
||||
proc = subprocess.run(cmd, cwd=workdir, capture_output=True, text=True)
|
||||
if proc.returncode != 0:
|
||||
raise RuntimeError(f"messages command failed: {proc.stderr.strip()}")
|
||||
return proc.stdout
|
||||
|
||||
|
||||
def find_foreign_messages(json_text, user_id):
|
||||
data = json.loads(json_text)
|
||||
msgs = data.get("messages") or []
|
||||
foreign = [m for m in msgs if int(m.get("sender_id", 0)) != int(user_id)]
|
||||
return foreign
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--conv", required=True, help="Conversation id to poll")
|
||||
parser.add_argument("--user", required=True, help="Our user id (numeric)")
|
||||
parser.add_argument(
|
||||
"--interval",
|
||||
type=int,
|
||||
default=900,
|
||||
help="Poll interval in seconds (default 900 = 15m)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--workdir",
|
||||
default="/home/joren/dev/marktplaatsApi/mrktplaats-cli",
|
||||
help="Path to mrktplaats-cli repo",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
out_dir = os.path.expanduser("/home/joren/.local/share/opencode/tool-output")
|
||||
os.makedirs(out_dir, exist_ok=True)
|
||||
found_path = os.path.join(out_dir, "nvidia_reply_found.json")
|
||||
|
||||
print(
|
||||
f"{now()} Poller started for conv={args.conv}, user={args.user}, interval={args.interval}s"
|
||||
)
|
||||
# write pid file
|
||||
pid_path = os.path.join(out_dir, "nvidia_poll.pid")
|
||||
with open(pid_path, "w") as f:
|
||||
f.write(str(os.getpid()))
|
||||
|
||||
try:
|
||||
while True:
|
||||
try:
|
||||
raw = fetch_messages(args.conv, args.workdir)
|
||||
except Exception as e:
|
||||
print(f"{now()} Error fetching messages: {e}")
|
||||
time.sleep(30)
|
||||
continue
|
||||
|
||||
try:
|
||||
foreign = find_foreign_messages(raw, args.user)
|
||||
except Exception as e:
|
||||
print(f"{now()} Error parsing messages JSON: {e}")
|
||||
time.sleep(30)
|
||||
continue
|
||||
|
||||
if foreign:
|
||||
result = {"conv": args.conv, "detected_at": now(), "messages": foreign}
|
||||
with open(found_path, "w") as f:
|
||||
json.dump(result, f, indent=2)
|
||||
print(
|
||||
f"{now()} Found {len(foreign)} foreign message(s) — wrote {found_path}"
|
||||
)
|
||||
# also print the messages for immediate visibility
|
||||
print(json.dumps(result, indent=2))
|
||||
return 0
|
||||
|
||||
print(f"{now()} No reply yet; sleeping {args.interval} seconds")
|
||||
time.sleep(args.interval)
|
||||
finally:
|
||||
# cleanup pid file
|
||||
try:
|
||||
os.remove(pid_path)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user