~aleteoryx/tclfeed-bsky

1a743ad0a140bbe67620aefd54f83bb3a427bc38 — Aleteoryx 29 days ago c20f63f
improved moderation tools
1 files changed, 23 insertions(+), 11 deletions(-)

M bin/rmpost.tcl
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;"
}