Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun get-message (room-id message-id)
- (cl-json:decode-json-from-string
- (status-200-or-lose
- (drakma:http-request (make-url "/_matrix/client/unstable/rooms/" room-id
- "/event/" message-id)
- :additional-headers `(("Authorization" . ,*bearer*))))))
- (snakes:defgenerator context-generator (room-id first-message-id &key (limit 100))
- (let ((message-id first-message-id))
- (block main-loop
- (loop
- (let ((messages (get-messages-from-context room-id message-id :limit limit)))
- (format *debug-io* "Got ~d items from ~a~%" (length messages) message-id)
- (if (null messages)
- (let ((last-message (get-message room-id message-id)))
- (if (and (string= (cdrassoc :type last-message) "m.room.member")
- (cdrassoc :replaces--state last-message))
- (setf message-id (cdrassoc :replaces--state last-message))
- (return-from main-loop)))
- (progn
- (dolist (event (reverse messages))
- (snakes:yield event))
- (setf message-id (cdrassoc :event--id (first messages))))))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement