summaryrefslogtreecommitdiff
path: root/utility-apps.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'utility-apps.lisp')
-rw-r--r--utility-apps.lisp33
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))))