M bin/rmpost.tcl => bin/rmpost.tcl +23 -11
@@ 1,20 1,32 @@
#!/bin/env tclsh
-lassign $argv db feed uri
+if {$argc < 3} { return -code error "Usage: bin/rmpost.tcl DB FEED URI ?URI ...?" }
+set uris [lassign $argv db feed]
cd [file dirname [file dirname [dict get [info frame [info frame]] file]]]
-switch -regexp -matchvar matches -- $uri {
- {^at://.+} {}
- {^(?:(?:(?:(?:(?:https://)?bsky.app)?/)?profile)?/)?([^/]+)/post/(.+)$} {
- lassign $matches pub mkey
- set uri at://$pub/app.bsky.feed.post/$mkey
- }
- default {return -code error "unknown URI format!"}
-}
-
package require sqlite3
+package require json
+package require http
+package require tls
+::http::register https 443 ::tls::socket
sqlite3 db $db
-db eval "DELETE FROM $feed WHERE uri = :uri;"
+foreach uri $uris {
+ switch -regexp -matchvar matches -- $uri {
+ {^at://.+} {}
+ {^(?:(?:(?:(?:(?:https://)?bsky.app)?/)?profile)?/)?([^/]+)/post/(.+)$} {
+ lassign $matches _ pub rkey
+
+ set endpoint {https://public.api.bsky.app/xrpc/com.atproto.repo.getRecord}
+
+ set http_state [http::geturl "$endpoint?repo=$pub&collection=app.bsky.feed.post&rkey=$rkey"]
+ if {[::http::ncode $http_state] != 200} { return -code error "couldn't resolve bsky.app URI!\n[::http::data $http_state]" }
+ set uri [dict get [::json::json2dict [::http::data $http_state]] uri]
+ }
+ default { return -code error "unknown URI format!" }
+ }
+
+ db eval "DELETE FROM $feed WHERE uri = :uri;"
+}