Advertisement
Guest User

Untitled

a guest
Jan 6th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (defun get-message (room-id message-id)
  2.   (cl-json:decode-json-from-string
  3.    (status-200-or-lose
  4.      (drakma:http-request (make-url "/_matrix/client/unstable/rooms/" room-id
  5.                                     "/event/" message-id)
  6.                           :additional-headers `(("Authorization" . ,*bearer*))))))
  7.  
  8. (snakes:defgenerator context-generator (room-id first-message-id &key (limit 100))
  9.   (let ((message-id first-message-id))
  10.     (block main-loop
  11.       (loop
  12.          (let ((messages (get-messages-from-context room-id message-id :limit limit)))
  13.            (format *debug-io* "Got ~d items from ~a~%" (length messages) message-id)
  14.            (if (null messages)
  15.                (let ((last-message (get-message room-id message-id)))
  16.                  (if (and (string= (cdrassoc :type last-message) "m.room.member")
  17.                           (cdrassoc :replaces--state last-message))
  18.                      (setf message-id (cdrassoc :replaces--state last-message))
  19.                      (return-from main-loop)))
  20.                (progn
  21.                  (dolist (event (reverse messages))
  22.                    (snakes:yield event))
  23.                  (setf message-id (cdrassoc :event--id (first messages))))))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement