Rename from memento to ephemera

This commit is contained in:
arne 2024-06-20 18:38:36 +02:00
commit 1b2dd7b541

View file

@ -1,76 +0,0 @@
(ns memento
(:require [cheshire.core :as json]
[org.httpkit.client :as http]
[clojure.string :as str])
(:import [java.time LocalDateTime Instant ZoneId Duration]
[java.net URLEncoder]))
(def acct (System/getenv "MASTODON_ACCOUNT"))
(def auth-token (System/getenv "MASTODON_AUTH_TOKEN"))
(def assert-msg "Please set the MASTODON_ACCOUNT, MASTODON_AUTH_TOKEN and MEMENTO_ACCOUNT env vars.")
(assert (not (empty? acct)) assert-msg)
(assert (not (empty? auth-token)) assert-msg)
(def instance-url (format "https://%s" (last (str/split acct #"@"))))
(defn mastodon-api [path params]
(->
@(http/request
(merge-with
#(if (map? %1) (merge %1 %2) %2)
{:url (format "%s/%s" instance-url path)
:method :get
:headers {"Authorization" (format "Bearer %s" auth-token)}}
params))
(update :body #(json/parse-string % true))))
(defn prn-res [res]
(prn (assoc-in res [:opts :headers "Authorization"] "Bearer XXX")))
(println "Requesting account details for" acct)
(def account-details
(mastodon-api "api/v1/accounts/lookup" {:query-params {:acct acct}}))
(prn-res account-details)
(def cutoff (.. (Instant/now) (minus (Duration/ofDays 1))))
(println "cutoff" cutoff)
(def delete-xf
(comp (filter #(. (Instant/parse (:created_at %)) isBefore cutoff))
(remove #(= (:visibility %) "direct"))))
(def to-delete
(->
(mastodon-api (format "api/v1/accounts/%s/statuses" (-> account-details :body :id))
{:query-params {:tagged "today"
:exclude_reblogs true}})
(update :body #(into [] delete-xf %))))
(defn sleep [ms]
(future (Thread/sleep ms)))
(doseq [status (:body to-delete)]
(try
(print "Deleting post ")
(prn (select-keys status [:created_at :url]))
(let [deleted (mastodon-api (format "api/v1/statuses/%s" (:id status)) {:method :delete})]
(print "Deleted ")
(prn-res deleted)
@(sleep 2500) ; we need to wait, otherwise media_ids are still "attached" and can't be reused
(print "Recreating ")
(prn-res (mastodon-api
(format "api/v1/statuses" #_(:id refiled))
{:method :post
:headers {"Content-Type" "application/json"}
:body (json/encode
{:visibility "direct"
:media_ids (map :id (-> deleted :body :media_attachments))
:status (-> deleted :body :text)})})))
(catch Exception e
(println "Error deleting " (:url status))
(throw e))))