mv visibility to transform

This commit is contained in:
jem 2020-05-29 21:13:43 +02:00
parent 64fa3120eb
commit 0c72647d5b
5 changed files with 51 additions and 40 deletions

View file

@ -55,9 +55,6 @@ with later timestamps to avoid duplicate posts. On the first run the timestamp w
;; optional boolean defaults to false ;; optional boolean defaults to false
;; only sources containing media will be posted when set to true ;; only sources containing media will be posted when set to true
:media-only? true :media-only? true
;; optional visibility flag: direct, private, unlisted, public
;; defaults to public
:visibility "unlisted"
;; optional limit for the post length ;; optional limit for the post length
:max-post-length 300 :max-post-length 300
;; optionally try to resolve URLs in posts to skip URL shorteners ;; optionally try to resolve URLs in posts to skip URL shorteners
@ -82,6 +79,9 @@ with later timestamps to avoid duplicate posts. On the first run the timestamp w
;; optional flag specifying wether the name of the account ;; optional flag specifying wether the name of the account
;; will be appended in the post, defaults to false ;; will be appended in the post, defaults to false
:append-screen-name? false :append-screen-name? false
;; optional visibility flag: direct, private, unlisted, public
;; defaults to public
:visibility "unlisted"
;; optional signature for posts ;; optional signature for posts
:signature "#newsbot"}}] :signature "#newsbot"}}]
} }

View file

@ -48,12 +48,14 @@
(:target (first (transform config))) %)) (:target (first (transform config))) %))
(masto/post-items (masto/post-items
(mastodon-auth config) (mastodon-auth config)
(:target (first (transform config)))
last-post-time)))) last-post-time))))
(defn parse-feed [last-post-time parser [title url]] (defn parse-feed [last-post-time parser [title url]]
(-> (.parseURL parser url) (-> (.parseURL parser url)
(.then #(masto/post-items (.then #(masto/post-items
(mastodon-auth config) (mastodon-auth config)
(:target (first (transform config)))
last-post-time last-post-time
(for [{:keys [title isoDate pubDate content link]} (-> % infra/js->edn :items)] (for [{:keys [title isoDate pubDate content link]} (-> % infra/js->edn :items)]
{:created-at (js/Date. (or isoDate pubDate)) {:created-at (js/Date. (or isoDate pubDate))

View file

@ -19,7 +19,7 @@
(s/def ::sensitive? boolean?) (s/def ::sensitive? boolean?)
(s/def ::resolve-urls? boolean?) (s/def ::resolve-urls? boolean?)
(s/def ::nitter-urls? boolean?) (s/def ::nitter-urls? boolean?)
(s/def ::visibility string?) (s/def ::visibility #{"direct" "private" "unlisted" "public"})
(s/def ::replacements string?) (s/def ::replacements string?)
(s/def ::max-post-length (fn [n] (and (s/def ::max-post-length (fn [n] (and
(int? n) (int? n)
@ -33,7 +33,7 @@
;::content-filters ::keyword-filters ;::content-filters ::keyword-filters
;::max-post-length ;::max-post-length
::signature ::signature
;::visibility ::visibility
::append-screen-name? ::append-screen-name?
;::sensitive? ::resolve-urls? ;::sensitive? ::resolve-urls?
;::nitter-urls? ::replacements ;::nitter-urls? ::replacements
@ -106,64 +106,72 @@
(string/replace #"https://twitter.com" "https://nitter.net"))) (string/replace #"https://twitter.com" "https://nitter.net")))
(defn post-status (defn post-status
([mastodon-config status-text] ([mastodon-auth target status-text]
(post-status mastodon-config status-text nil print)) (post-status mastodon-auth target status-text nil print))
([mastodon-config status-text media-ids] ([mastodon-auth target status-text media-ids]
(post-status mastodon-config status-text media-ids print)) (post-status mastodon-auth target status-text media-ids print))
([mastodon-config status-text media-ids callback] ([mastodon-auth target status-text media-ids callback]
(let [{:keys [sensitive? signature visibility]} mastodon-config] (let [{:keys [sensitive?]} mastodon-auth
(-> (.post (mastodon-client mastodon-config) "statuses" {:keys [visibility]} target]
(-> (.post (mastodon-client mastodon-auth) "statuses"
(clj->js (merge {:status (->> status-text (clj->js (merge {:status (->> status-text
(resolve-urls mastodon-config) (resolve-urls mastodon-auth)
(perform-replacements mastodon-config))} (perform-replacements mastodon-auth))}
(when media-ids {:media_ids media-ids}) (when media-ids {:media_ids media-ids})
(when sensitive? {:sensitive sensitive?}) (when sensitive? {:sensitive sensitive?})
(when visibility {:visibility visibility})))) (when visibility {:visibility visibility}))))
(.then #(-> % callback)))))) (.then #(-> % callback))))))
(defn-spec post-image any? (defn-spec post-image any?
[mastodon-config mastodon-config? [mastodon-auth mastodon-auth?
target mastodon-target?
image-stream any? image-stream any?
description string? description string?
callback fn?] callback fn?]
(-> (.post (mastodon-client mastodon-config) "media" (-> (.post (mastodon-client mastodon-auth) "media"
#js {:file image-stream :description description}) #js {:file image-stream :description description})
(.then #(-> % .-data .-id callback)))) (.then #(-> % .-data .-id callback))))
(defn post-status-with-images (defn post-status-with-images
([mastodon-config status-text urls] ([mastodon-auth target status-text urls]
(post-status-with-images mastodon-config status-text urls [] print)) (post-status-with-images mastodon-auth target status-text urls [] print))
([mastodon-config status-text urls ids] ([mastodon-auth target status-text urls ids]
(post-status-with-images mastodon-config status-text urls ids print)) (post-status-with-images mastodon-auth target status-text urls ids print))
([mastodon-config status-text [url & urls] ids callback] ([mastodon-auth target status-text [url & urls] ids callback]
(if url (if url
(-> request (-> request
(.get url) (.get url)
(.on "response" (.on "response"
(fn [image-stream] (fn [image-stream]
(post-image mastodon-config image-stream status-text (post-image mastodon-auth target image-stream status-text
#(post-status-with-images mastodon-config status-text urls (conj ids %) callback))))) #(post-status-with-images mastodon-auth
(post-status mastodon-config status-text (not-empty ids) callback)))) target
status-text
urls
(conj ids %)
callback)))))
(post-status mastodon-auth target status-text (not-empty ids) callback))))
(defn-spec post-items any?
[mastodon-auth mastodon-auth?
target mastodon-target?
last-post-time any?
items any?]
(doseq [{:keys [text media-links]}
(->> items
(remove #(blocked-content? mastodon-auth (:text %)))
(filter #(> (:created-at %) last-post-time)))]
(if media-links
(post-status-with-images mastodon-auth target text media-links)
(when-not (::media-only? mastodon-auth)
(post-status mastodon-auth target text)))))
(defn-spec get-mastodon-timeline any? (defn-spec get-mastodon-timeline any?
[mastodon-auth mastodon-auth? [mastodon-auth mastodon-auth?
callback fn?] callback fn?]
(.then (.get (mastodon-client mastodon-auth) (.then (.get (mastodon-client mastodon-auth)
(str "accounts/" (:account-id mastodon-auth)"/statuses") #js {}) (str "accounts/" (:account-id mastodon-auth) "/statuses") #js {})
#(let [response (-> % .-data infra/js->edn)] #(let [response (-> % .-data infra/js->edn)]
(if-let [error (::error response)] (if-let [error (::error response)]
(infra/exit-with-error error) (infra/exit-with-error error)
(callback response))))) (callback response)))))
(defn-spec post-items any?
[mastodon-config mastodon-config?
last-post-time any?
items any?]
(doseq [{:keys [text media-links]}
(->> items
(remove #(blocked-content? mastodon-config (:text %)))
(filter #(> (:created-at %) last-post-time)))]
(if media-links
(post-status-with-images mastodon-config text media-links)
(when-not (::media-only? mastodon-config)
(post-status mastodon-config text)))))

View file

@ -82,7 +82,7 @@
(->> (infra/js->edn tweets) (->> (infra/js->edn tweets)
(map twitter/parse-tweet) (map twitter/parse-tweet)
(map #(intermediate-to-mastodon mastodon-auth target %)) (map #(intermediate-to-mastodon mastodon-auth target %))
(masto/post-items mastodon-auth last-post-time))))) (masto/post-items mastodon-auth target last-post-time)))))
(defn-spec tweets-to-mastodon any? (defn-spec tweets-to-mastodon any?
[mastodon-auth masto/mastodon-auth? [mastodon-auth masto/mastodon-auth?

View file

@ -15,4 +15,5 @@
:accounts ["an-twitter-account"]} :accounts ["an-twitter-account"]}
:target {:type :mastodon-target :target {:type :mastodon-target
:append-screen-name? true :append-screen-name? true
:visibility "unlisted"
:signature "my-bot"}}]))) :signature "my-bot"}}])))