diff options
author | Boutade <thegoofist@protonmail.com> | 2019-09-26 08:34:45 -0500 |
---|---|---|
committer | Boutade <thegoofist@protonmail.com> | 2019-09-26 08:34:45 -0500 |
commit | c13c3fa4d6a3cd7604f9e9a1009415fb672d0f72 (patch) | |
tree | 4392bf71d3a0ba0b756bec5dcb9ea327f873e57e /utility-apps.lisp | |
parent | 61d66a9cd09ad3c01f97f2fc5abc98505258eb9c (diff) |
created auto-joiner to respond to invites
Diffstat (limited to 'utility-apps.lisp')
-rw-r--r-- | utility-apps.lisp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/utility-apps.lisp b/utility-apps.lisp index 3280289..f6b4416 100644 --- a/utility-apps.lisp +++ b/utility-apps.lisp @@ -18,6 +18,7 @@ :do (format stream "~a: ~a~%" k v))) (defmethod handle-event :after ((log message-log) room (event timeline-event)) + (print "Joined Room Message/Timeline Event" (output log)) (let ((fields `(("room" . ,room) ("sender" . ,(sender event)) ("event type" . ,(event-type event)) @@ -29,6 +30,18 @@ (defmethod handle-event :after ((log message-log) room (event room-state-event)) + (print "Joined Room State Event" (output log)) + (let ((fields `(("room" . ,room) + ("sender" . ,(sender event)) + ("event type" . ,(event-type event)) + ("state key" . ,(state-key event)) + ("content" . ,(event-content event))))) + (print-assoc fields (output log)) + (terpri (output log)))) + + +(defmethod handle-event :after ((log message-log) room (event invitation-event)) + (print "Invitation Event" (output log)) (let ((fields `(("room" . ,room) ("sender" . ,(sender event)) ("event type" . ,(event-type event)) @@ -102,3 +115,23 @@ (and like (search name (room-name room) :test #'string-equal))) :collect (if full room (room-id room))))) + +;;; Basic Joiner Bot + +(defclass auto-joiner () ()) + +(defmethod handle-event :after ((client auto-joiner) room-id (event invitation-event)) + (when (equal "invite" + (getf (event-content event) :|join_rule|)) + (join-room client room-id))) + +(defparameter +join-room-path+ "/_matrix/client/r0/rooms/~a/join") + + + +(defun join-room (client room-id) + (let ((body (list :|roomId| room-id)) + (url (format nil +join-room-path+ room-id))) + (send (client url body :method :post :wrap make-basic-json) + (format *standard-output* "JOINED ROOM ~a" room-id) + (format *error-output* "JOIN ROOM FAILED ~a" room-id)))) |