(require :eve-quine)
(require :tooter)
(defparameter *client*
(make-instance 'tooter:client
:base "
https://mastodon.sdf.org"
:name "tooter-client eve-quine lamb"))
(format t
"Visit and authenticate from a in-browser mastodon app:~%~a~%"
(nth-value 1 (tooter:authorize (func-of *clamb*))))
(format t "Enter code from the browser:~%")
(tooter:authorize (func-of *clamb*) (read-line))
(print "We get one of @publius' posts:")
(print
(tooter:plain-format-html
(tooter:content
(tooter:find-status *client*
"109894889851888658"))))
;;;; Using an eve-quine to persist that client with secret
;;; Everything is reusable
;;; Make an eve-quine that persists eve-quines to disk.
(defparameter *wriamb*
(form-eve ('lamb) :form-of
''(lambda (eve name outpath)
(with-open-file (out outpath :Direction :output :if-exists :append
:if-does-not-exist :create)
(let ((*print-pretty* t))
(prin1 '(require :asdf) out) (terpri out)
(prin1 '(require :eve-quine) out) (terpri out)
(format out "(defparameter ~a ~s)~%" name
(make-load-form eve) out) (terpri out))))))
;;; Make a dependency-loading eve-quine
;; just requires dep when loaded
(defparameter *depamb*
(form-eve ('lamb) :form-of
''(prog1 (values) (require "tooter"))))
;;; Make a client-containing eve-quine
(defparameter *clamb*
(form-eve ('lamb) :form-of
(funcall (lambda (x) `',x)
(make-load-form *client*))))
;;; persist them to disk to just be #'load ed later.
(loop for clos-quine in (list *wriamb* *depamb* *clamb*)
for name in '(*wriamb* *depamb* *clamb*)
do (funcall (Func-of *wriamb*) clos-quine name
#p"load-me.lisp"))
;;; Later:
(print "reloading")
(load #p"load-me.lisp")
(print
(tooter:find-status (func-of *clamb*)
"109894889851888658"))
(terpri)
(quit)