summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2025-05-08 04:31:17 -0400
committerLLLL Colonq <llll@colonq>2025-05-08 04:31:17 -0400
commit5d003af92aff89cc600c1125e2e8767fc88b7ae4 (patch)
tree8d7c4c0cd4c55f015e475031865d7595039718e3
parent936221a3fb0b285b6ab0b50be2ef7ebca8c8072d (diff)
The latest and greatest updates that you crave, now
-rw-r--r--assets/avatars/thelinuxdeveloper.pngbin0 -> 7654 bytes
-rw-r--r--assets/emotes/305253899bin0 -> 1356 bytes
-rw-r--r--assets/emotes/743892bin0 -> 3581 bytes
-rw-r--r--assets/emotes/emotesv2_05169161f5a94af39ec596028c1db21dbin0 -> 2736 bytes
-rw-r--r--assets/emotes/emotesv2_0554d02dacff41e581b5afeab4c0a7cabin0 -> 7592 bytes
-rw-r--r--assets/emotes/emotesv2_06bfc6b158144849a4eef12a00556b67bin0 -> 2792 bytes
-rw-r--r--assets/emotes/emotesv2_1089a8ae44254372b1575327ff30812fbin0 -> 2552 bytes
-rw-r--r--assets/emotes/emotesv2_1faf6c1e1020451d90fda9bcb0a99f3cbin0 -> 21587 bytes
-rw-r--r--assets/emotes/emotesv2_217e1e34ea2046fe8c0bbde5caf5f0c8bin0 -> 8961 bytes
-rw-r--r--assets/emotes/emotesv2_227b6a85ff56478d8d28837fcde03ac4bin0 -> 7290 bytes
-rw-r--r--assets/emotes/emotesv2_261bfa0359934a178c35d253e4b4de21bin0 -> 1495 bytes
-rw-r--r--assets/emotes/emotesv2_4b06d5f5321b489faf37ae38babd5064bin0 -> 46176 bytes
-rw-r--r--assets/emotes/emotesv2_4c0f316564f54d219c9bda42272cdacabin0 -> 2778 bytes
-rw-r--r--assets/emotes/emotesv2_874ef23b8d294ba49bc2402daee9efbebin0 -> 2163 bytes
-rw-r--r--assets/emotes/emotesv2_97ef546130b747258790859cf26388c0bin0 -> 2384 bytes
-rw-r--r--assets/emotes/emotesv2_9961a2709cab4334ab49eb15a2b4803ebin0 -> 7813 bytes
-rw-r--r--assets/emotes/emotesv2_9b6ef9bc0c644c599dc986eeb251dd83bin0 -> 9365 bytes
-rw-r--r--assets/emotes/emotesv2_9d9299fadae44c52abfedef321027585bin0 -> 2288 bytes
-rw-r--r--assets/emotes/emotesv2_9f757dc6a7414bbabe304e3e29b55407bin0 -> 2819 bytes
-rw-r--r--assets/emotes/emotesv2_badab775ebbc4c129cb5927d63262490bin0 -> 12272 bytes
-rw-r--r--assets/emotes/emotesv2_bf37df4a50254659a1b92f0f60a8b2e8bin0 -> 9108 bytes
-rw-r--r--assets/emotes/emotesv2_c5012a17cc9c4b6487c71e4b30676d10bin0 -> 32871 bytes
-rw-r--r--assets/emotes/emotesv2_e00f86eef5614559bde9c67dc1a66237bin0 -> 6687 bytes
-rw-r--r--assets/emotes/emotesv2_e2b5c0a5d9434281ac7990c06381121ebin0 -> 690 bytes
-rw-r--r--assets/emotes/emotesv2_eac39b2603744cbbb82662e0cf23a241bin0 -> 1841 bytes
-rw-r--r--assets/emotes/emotesv2_fedc29d7866f4e15b00cfed3e15cccd8bin0 -> 2665 bytes
-rw-r--r--assets/emotes/emotesv2_ffe411bce9c44a9886ab7d2d6c51a2b4bin0 -> 1968 bytes
-rw-r--r--assets/glossary/2025-05-06.txt1
-rw-r--r--src/wasp-bus-binary.el144
-rw-r--r--src/wasp-event-handlers-binary.el24
-rw-r--r--src/wasp-event-handlers.el2
-rw-r--r--src/wasp-twitch.el102
-rw-r--r--src/wasp-user-whitelist.el2
33 files changed, 223 insertions, 52 deletions
diff --git a/assets/avatars/thelinuxdeveloper.png b/assets/avatars/thelinuxdeveloper.png
new file mode 100644
index 00000000..39a934f0
--- /dev/null
+++ b/assets/avatars/thelinuxdeveloper.png
Binary files differ
diff --git a/assets/emotes/305253899 b/assets/emotes/305253899
new file mode 100644
index 00000000..9874c22e
--- /dev/null
+++ b/assets/emotes/305253899
Binary files differ
diff --git a/assets/emotes/743892 b/assets/emotes/743892
new file mode 100644
index 00000000..5c43dd71
--- /dev/null
+++ b/assets/emotes/743892
Binary files differ
diff --git a/assets/emotes/emotesv2_05169161f5a94af39ec596028c1db21d b/assets/emotes/emotesv2_05169161f5a94af39ec596028c1db21d
new file mode 100644
index 00000000..43013eee
--- /dev/null
+++ b/assets/emotes/emotesv2_05169161f5a94af39ec596028c1db21d
Binary files differ
diff --git a/assets/emotes/emotesv2_0554d02dacff41e581b5afeab4c0a7ca b/assets/emotes/emotesv2_0554d02dacff41e581b5afeab4c0a7ca
new file mode 100644
index 00000000..468b772b
--- /dev/null
+++ b/assets/emotes/emotesv2_0554d02dacff41e581b5afeab4c0a7ca
Binary files differ
diff --git a/assets/emotes/emotesv2_06bfc6b158144849a4eef12a00556b67 b/assets/emotes/emotesv2_06bfc6b158144849a4eef12a00556b67
new file mode 100644
index 00000000..3ecb20a9
--- /dev/null
+++ b/assets/emotes/emotesv2_06bfc6b158144849a4eef12a00556b67
Binary files differ
diff --git a/assets/emotes/emotesv2_1089a8ae44254372b1575327ff30812f b/assets/emotes/emotesv2_1089a8ae44254372b1575327ff30812f
new file mode 100644
index 00000000..a1201b31
--- /dev/null
+++ b/assets/emotes/emotesv2_1089a8ae44254372b1575327ff30812f
Binary files differ
diff --git a/assets/emotes/emotesv2_1faf6c1e1020451d90fda9bcb0a99f3c b/assets/emotes/emotesv2_1faf6c1e1020451d90fda9bcb0a99f3c
new file mode 100644
index 00000000..bbd4d086
--- /dev/null
+++ b/assets/emotes/emotesv2_1faf6c1e1020451d90fda9bcb0a99f3c
Binary files differ
diff --git a/assets/emotes/emotesv2_217e1e34ea2046fe8c0bbde5caf5f0c8 b/assets/emotes/emotesv2_217e1e34ea2046fe8c0bbde5caf5f0c8
new file mode 100644
index 00000000..4b019b9b
--- /dev/null
+++ b/assets/emotes/emotesv2_217e1e34ea2046fe8c0bbde5caf5f0c8
Binary files differ
diff --git a/assets/emotes/emotesv2_227b6a85ff56478d8d28837fcde03ac4 b/assets/emotes/emotesv2_227b6a85ff56478d8d28837fcde03ac4
new file mode 100644
index 00000000..7a9ff768
--- /dev/null
+++ b/assets/emotes/emotesv2_227b6a85ff56478d8d28837fcde03ac4
Binary files differ
diff --git a/assets/emotes/emotesv2_261bfa0359934a178c35d253e4b4de21 b/assets/emotes/emotesv2_261bfa0359934a178c35d253e4b4de21
new file mode 100644
index 00000000..870bfd54
--- /dev/null
+++ b/assets/emotes/emotesv2_261bfa0359934a178c35d253e4b4de21
Binary files differ
diff --git a/assets/emotes/emotesv2_4b06d5f5321b489faf37ae38babd5064 b/assets/emotes/emotesv2_4b06d5f5321b489faf37ae38babd5064
new file mode 100644
index 00000000..a9f8e6e3
--- /dev/null
+++ b/assets/emotes/emotesv2_4b06d5f5321b489faf37ae38babd5064
Binary files differ
diff --git a/assets/emotes/emotesv2_4c0f316564f54d219c9bda42272cdaca b/assets/emotes/emotesv2_4c0f316564f54d219c9bda42272cdaca
new file mode 100644
index 00000000..ad477d6a
--- /dev/null
+++ b/assets/emotes/emotesv2_4c0f316564f54d219c9bda42272cdaca
Binary files differ
diff --git a/assets/emotes/emotesv2_874ef23b8d294ba49bc2402daee9efbe b/assets/emotes/emotesv2_874ef23b8d294ba49bc2402daee9efbe
new file mode 100644
index 00000000..7fa94842
--- /dev/null
+++ b/assets/emotes/emotesv2_874ef23b8d294ba49bc2402daee9efbe
Binary files differ
diff --git a/assets/emotes/emotesv2_97ef546130b747258790859cf26388c0 b/assets/emotes/emotesv2_97ef546130b747258790859cf26388c0
new file mode 100644
index 00000000..70897c61
--- /dev/null
+++ b/assets/emotes/emotesv2_97ef546130b747258790859cf26388c0
Binary files differ
diff --git a/assets/emotes/emotesv2_9961a2709cab4334ab49eb15a2b4803e b/assets/emotes/emotesv2_9961a2709cab4334ab49eb15a2b4803e
new file mode 100644
index 00000000..ad9ccea7
--- /dev/null
+++ b/assets/emotes/emotesv2_9961a2709cab4334ab49eb15a2b4803e
Binary files differ
diff --git a/assets/emotes/emotesv2_9b6ef9bc0c644c599dc986eeb251dd83 b/assets/emotes/emotesv2_9b6ef9bc0c644c599dc986eeb251dd83
new file mode 100644
index 00000000..818f29e0
--- /dev/null
+++ b/assets/emotes/emotesv2_9b6ef9bc0c644c599dc986eeb251dd83
Binary files differ
diff --git a/assets/emotes/emotesv2_9d9299fadae44c52abfedef321027585 b/assets/emotes/emotesv2_9d9299fadae44c52abfedef321027585
new file mode 100644
index 00000000..822177b3
--- /dev/null
+++ b/assets/emotes/emotesv2_9d9299fadae44c52abfedef321027585
Binary files differ
diff --git a/assets/emotes/emotesv2_9f757dc6a7414bbabe304e3e29b55407 b/assets/emotes/emotesv2_9f757dc6a7414bbabe304e3e29b55407
new file mode 100644
index 00000000..4112c047
--- /dev/null
+++ b/assets/emotes/emotesv2_9f757dc6a7414bbabe304e3e29b55407
Binary files differ
diff --git a/assets/emotes/emotesv2_badab775ebbc4c129cb5927d63262490 b/assets/emotes/emotesv2_badab775ebbc4c129cb5927d63262490
new file mode 100644
index 00000000..69f36d99
--- /dev/null
+++ b/assets/emotes/emotesv2_badab775ebbc4c129cb5927d63262490
Binary files differ
diff --git a/assets/emotes/emotesv2_bf37df4a50254659a1b92f0f60a8b2e8 b/assets/emotes/emotesv2_bf37df4a50254659a1b92f0f60a8b2e8
new file mode 100644
index 00000000..86bb6239
--- /dev/null
+++ b/assets/emotes/emotesv2_bf37df4a50254659a1b92f0f60a8b2e8
Binary files differ
diff --git a/assets/emotes/emotesv2_c5012a17cc9c4b6487c71e4b30676d10 b/assets/emotes/emotesv2_c5012a17cc9c4b6487c71e4b30676d10
new file mode 100644
index 00000000..dd179f95
--- /dev/null
+++ b/assets/emotes/emotesv2_c5012a17cc9c4b6487c71e4b30676d10
Binary files differ
diff --git a/assets/emotes/emotesv2_e00f86eef5614559bde9c67dc1a66237 b/assets/emotes/emotesv2_e00f86eef5614559bde9c67dc1a66237
new file mode 100644
index 00000000..0ed53c2b
--- /dev/null
+++ b/assets/emotes/emotesv2_e00f86eef5614559bde9c67dc1a66237
Binary files differ
diff --git a/assets/emotes/emotesv2_e2b5c0a5d9434281ac7990c06381121e b/assets/emotes/emotesv2_e2b5c0a5d9434281ac7990c06381121e
new file mode 100644
index 00000000..8fac151c
--- /dev/null
+++ b/assets/emotes/emotesv2_e2b5c0a5d9434281ac7990c06381121e
Binary files differ
diff --git a/assets/emotes/emotesv2_eac39b2603744cbbb82662e0cf23a241 b/assets/emotes/emotesv2_eac39b2603744cbbb82662e0cf23a241
new file mode 100644
index 00000000..7b25ce46
--- /dev/null
+++ b/assets/emotes/emotesv2_eac39b2603744cbbb82662e0cf23a241
Binary files differ
diff --git a/assets/emotes/emotesv2_fedc29d7866f4e15b00cfed3e15cccd8 b/assets/emotes/emotesv2_fedc29d7866f4e15b00cfed3e15cccd8
new file mode 100644
index 00000000..1ca447c7
--- /dev/null
+++ b/assets/emotes/emotesv2_fedc29d7866f4e15b00cfed3e15cccd8
Binary files differ
diff --git a/assets/emotes/emotesv2_ffe411bce9c44a9886ab7d2d6c51a2b4 b/assets/emotes/emotesv2_ffe411bce9c44a9886ab7d2d6c51a2b4
new file mode 100644
index 00000000..e4a4abbf
--- /dev/null
+++ b/assets/emotes/emotesv2_ffe411bce9c44a9886ab7d2d6c51a2b4
Binary files differ
diff --git a/assets/glossary/2025-05-06.txt b/assets/glossary/2025-05-06.txt
new file mode 100644
index 00000000..47f23cc0
--- /dev/null
+++ b/assets/glossary/2025-05-06.txt
@@ -0,0 +1 @@
+there was a guest appearance by a clonkhead, discussions about emacs debugging, and we continued making progress on the gba system while testing some new features. \ No newline at end of file
diff --git a/src/wasp-bus-binary.el b/src/wasp-bus-binary.el
new file mode 100644
index 00000000..bb9fc6da
--- /dev/null
+++ b/src/wasp-bus-binary.el
@@ -0,0 +1,144 @@
+;;; wasp-bus-binary --- Pub/sub bus client -*- lexical-binding: t; -*-
+;;; Commentary:
+;;; Code:
+
+(require 'dash)
+(require 's)
+(require 'wasp-utils)
+
+(defcustom w/bus-binary-process "wasp-bus-binary"
+ "Name of process connected to binary message bus."
+ :type '(string)
+ :group 'wasp)
+
+(defcustom w/bus-binary-buffer " *wasp-bus-binary*"
+ "Name of buffer used to store intermediate binary message bus data."
+ :type '(string)
+ :group 'wasp)
+
+(defcustom w/bus-binary-host "shiro"
+ "Hostname of the binary message bus."
+ :type '(string)
+ :group 'wasp)
+
+(defcustom w/bus-binary-port 32051
+ "Port of the binary message bus."
+ :type '(integer)
+ :group 'wasp)
+
+(defvar w/bus-binary-event-handlers nil
+ "List of pairs of events and handler functions.")
+
+(defun w/bus-binary-read-bytes (len)
+ "Read LEN bytes from the current buffer.
+Advances point by LEN also."
+ (let ((end (+ (point) len)))
+ (when (<= end (point-max))
+ (let ((istr (buffer-substring (point) end)))
+ (forward-char len)
+ istr))))
+
+(defun w/bus-binary-read-int32le ()
+ "Read a 32-bit little endian integer from the current buffer."
+ (when-let* ((istr (w/bus-binary-read-bytes 4)))
+ (-let [(x0 x1 x2 x3) (seq-into istr 'list)]
+ (logior x0 (ash x1 8) (ash x2 16) (ash x3 24)))))
+
+(defun w/bus-binary-read-length-prefixed ()
+ "Read a length-prefixed string from the current buffer.
+Return nil if unable."
+ (let ((start (point)))
+ (if-let* ((len (w/bus-binary-read-int32le)))
+ (progn
+ (w/bus-binary-read-bytes len))
+ (goto-char start)
+ nil)))
+
+(defun w/bus-binary-read-message ()
+ "Parse a message from the current buffer.
+Return non-nil if a message was successfully parsed."
+ (if-let* ( (start (point))
+ (ev (w/bus-binary-read-length-prefixed))
+ (d (w/bus-binary-read-length-prefixed)))
+ (progn
+ (delete-region start (point))
+ (cons ev d))
+ (goto-char start)
+ nil))
+
+(defun w/bus-binary-handle-message ()
+ "Parse and handle a message from the current buffer.
+Return non-nil if a message was successfully parsed."
+ (when-let* ((msg (w/bus-binary-read-message)))
+ (-let [(ev . d) msg]
+ (print (cons ev d))
+ (when-let* ((handler (w/saget ev w/bus-binary-event-handlers)))
+ (funcall handler d))
+ t)))
+
+(defun w/bus-binary-process-filter (proc data)
+ "Process filter for binary message bus connection on PROC and DATA."
+ (with-current-buffer (get-buffer-create w/bus-binary-buffer)
+ (set-buffer-multibyte nil)
+ (when (not (marker-position (process-mark proc)))
+ (set-marker (process-mark proc) (point-max)))
+ (goto-char (process-mark proc))
+ (insert data)
+ (set-marker (process-mark proc) (point))
+ (goto-char (point-min))
+ (while (w/bus-binary-handle-message))))
+
+(defun w/bus-binary-build-int32le (x)
+ "Convert X into the bytes for a little endian 32-bit integer."
+ (unibyte-string
+ (logand x #xff)
+ (logand (lsh x -8) #xff)
+ (logand (lsh x -16) #xff)
+ (logand (lsh x -24) #xff)))
+
+(defun w/bus-binary-build-length-prefixed (s)
+ "Turn S into a length-prefixed unibyte string."
+ (s-concat
+ (w/bus-binary-build-int32le (string-bytes s))
+ s))
+
+(defun w/bus-binary-convert-event (ev)
+ "Convert the s-expression EV to a string event."
+ (s-chop-suffix ")" (s-chop-prefix "(" (format "%s" ev))))
+
+(defun w/binary-sub (ev)
+ "Subscribe to the event EV."
+ (process-send-string
+ w/bus-binary-process
+ (s-concat "s"
+ (w/bus-binary-build-length-prefixed (w/bus-binary-convert-event ev)))))
+
+(defun w/binary-pub (ev &optional d)
+ "Publish the data D to the event EV."
+ (process-send-string
+ w/bus-binary-process
+ (s-concat "p"
+ (w/bus-binary-build-length-prefixed (w/bus-binary-convert-event ev))
+ (w/bus-binary-build-length-prefixed (or d "")))))
+
+(defun w/bus-binary-disconnect ()
+ "Disconnect from Redis."
+ (when (process-live-p (get-process w/bus-binary-process))
+ (delete-process w/bus-binary-process)))
+
+(defun w/bus-binary-connect ()
+ "Connect to Redis."
+ (w/bus-binary-disconnect)
+ (with-current-buffer (get-buffer-create w/bus-binary-buffer)
+ (set-buffer-multibyte nil)
+ (erase-buffer))
+ (make-network-process
+ :coding 'no-conversion
+ :name w/bus-binary-process
+ :buffer nil
+ :host w/bus-binary-host
+ :service w/bus-binary-port
+ :filter #'w/bus-binary-process-filter))
+
+(provide 'wasp-bus-binary)
+;;; wasp-bus-binary.el ends here
diff --git a/src/wasp-event-handlers-binary.el b/src/wasp-event-handlers-binary.el
new file mode 100644
index 00000000..ae373b8c
--- /dev/null
+++ b/src/wasp-event-handlers-binary.el
@@ -0,0 +1,24 @@
+;;; wasp-event-handlers-binary --- Event handlers -*- lexical-binding: t; -*-
+;;; Commentary:
+;;; Code:
+
+(require 'dash)
+(require 's)
+(require 'wasp-utils)
+(require 'wasp-twitch)
+(require 'wasp-bus-binary)
+
+(setf
+ w/bus-binary-event-handlers
+ (list
+ (cons "monitor twitch chat incoming"
+ (lambda (d)
+ (-let [(user stags msg) (s-split-up-to " " d 2)]
+ (w/twitch-handle-incoming-chat
+ user
+ (--map (s-split "\t" it) (s-split "\n" stags))
+ msg)))))
+ ))
+
+(provide 'wasp-event-handlers-binary)
+;;; wasp-event-handlers-binary.el ends here
diff --git a/src/wasp-event-handlers.el b/src/wasp-event-handlers.el
index 0e5b8d46..d45debaf 100644
--- a/src/wasp-event-handlers.el
+++ b/src/wasp-event-handlers.el
@@ -39,7 +39,7 @@
((s-equals? (car msg) "won") (w/write-chat-event "Fufufu... I win..."))
(t (w/write-chat-event "that it's over")))
(setf w/overlay-barrage-active nil)))
- (cons '(monitor twitch chat incoming) #'w/twitch-handle-incoming-chat)
+ (cons '(monitor twitch chat incoming) #'w/twitch-handle-incoming-chat-sexp)
(cons '(monitor twitch redeem incoming) #'w/twitch-handle-redeem)
(cons
'(frontend redeem incoming)
diff --git a/src/wasp-twitch.el b/src/wasp-twitch.el
index 2ff66567..252ea8c2 100644
--- a/src/wasp-twitch.el
+++ b/src/wasp-twitch.el
@@ -538,48 +538,48 @@ CALLBACK will be passed the winner when the poll concludes."
(when (-contains? badges "subscriber/0") "💻")
(when (-contains? badges "founder/0") "🖥️"))))))
-(defun w/twitch-handle-incoming-chat (msg)
- "Write MSG to the chat buffer, processing any commands."
- ;; (w/write-log (format "%s" msg))
- (let ((user (w/decode-string (car msg))))
- (w/user-bind
- user
- (lambda ()
- (let* ((tags (cadr msg))
- (userid (car (w/saget "user-id" tags)))
+(defun w/twitch-handle-incoming-chat (user tags text)
+ "Write the message TEXT from USER with TAGS to the chat buffer.
+Process any commands included."
+ (w/user-bind
+ user
+ (lambda ()
+ (let* ( (userid (car (w/saget "user-id" tags)))
(color (car (w/saget "color" tags)))
(emotes (car (w/saget "emotes" tags)))
(badges (s-split "," (car (w/saget "badges" tags))))
- (text (w/decode-string (caddr msg)))
(biblicality (w/bible-colorize-sentence text))
(text-colored-bible (car biblicality))
(text-with-emotes
- (w/twitch-add-7tv-emotes
- (w/twitch-process-emote-ranges
- (s-split "/" emotes)
- text-colored-bible))))
- (push (cons user text) w/twitch-chat-history)
-
- (w/user-stats-update)
- (w/hexamedia-update-user user)
- (w/shindaggers-update-user user)
- (w/copfish-update-user user)
- (when (s-equals? (s-downcase user) "modclonk")
- (w/obs-activate-toggle 'modclonk))
- (w/resolve-record-user user)
- (w/hex-tick user)
- (w/hex-transform
+ (w/twitch-add-7tv-emotes
+ (w/twitch-process-emote-ranges
+ (s-split "/" emotes)
+ text-colored-bible))))
+ (push (cons user text) w/twitch-chat-history)
+ (w/user-stats-update)
+ (w/hexamedia-update-user user)
+ (w/shindaggers-update-user user)
+ (w/copfish-update-user user)
+ (when (s-equals? (s-downcase user) "modclonk")
+ (w/obs-activate-toggle 'modclonk))
+ (w/resolve-record-user user)
+ (w/hex-tick user)
+ (w/hex-transform
user
(w/make-chat-message
- :user user
- :id userid
- :text text-with-emotes
- :user-color (when (s-present? color) color)
- :biblicality (cdr biblicality)
- :sigil (w/twitch-badges-sigil badges)))
- (--each w/twitch-chat-commands
- (when (s-contains? (car it) text)
- (funcall (cdr it) user text))))))))
+ :user user
+ :id userid
+ :text text-with-emotes
+ :user-color (when (s-present? color) color)
+ :biblicality (cdr biblicality)
+ :sigil (w/twitch-badges-sigil badges)))
+ (--each w/twitch-chat-commands
+ (when (s-contains? (car it) text)
+ (funcall (cdr it) user text)))))))
+
+(defun w/twitch-handle-incoming-chat-sexp (msg)
+ "Write MSG to the chat buffer, processing any commands."
+ (w/twitch-handle-incoming-chat (w/decode-string (car msg)) (cadr msg) (w/decode-string (caddr msg))))
(defun w/twitch-handle-redeem-helper (user redeem input &optional limit)
"Handle the channel point redeem REDEEM from USER with INPUT.
@@ -587,35 +587,35 @@ Optionally, only apply redeems with point costs less than LIMIT."
(unless (-contains? w/user-hell (s-downcase user))
(let ((handler (alist-get redeem w/twitch-redeems nil nil #'cl-equalp)))
(if handler
- (if (or (not limit) (< (car handler) limit))
- (w/user-bind
- user
- (lambda ()
- (condition-case err
- (funcall (cadr handler) user input)
- (error
- (w/write-chat-event (format "Error during redeem: %s" err))))))
- (w/write-chat-event (format "User %s attempted to activate overly expensive redeem \"%s\" via API" user redeem)))
+ (if (or (not limit) (< (car handler) limit))
+ (w/user-bind
+ user
+ (lambda ()
+ (condition-case err
+ (funcall (cadr handler) user input)
+ (error
+ (w/write-chat-event (format "Error during redeem: %s" err))))))
+ (w/write-chat-event (format "User %s attempted to activate overly expensive redeem \"%s\" via API" user redeem)))
(w/write-chat-event (format "Unknown channel point redeem: %S" redeem))))))
(defun w/twitch-handle-redeem (r)
"Handle the channel point redeem R."
;; (w/write-log r)
(let* ((user (car r))
- (redeem (cadr r))
- (encoded-input (caddr r))
- (input (when encoded-input (w/decode-string encoded-input))))
+ (redeem (cadr r))
+ (encoded-input (caddr r))
+ (input (when encoded-input (w/decode-string encoded-input))))
(w/twitch-handle-redeem-helper user redeem input)))
(defun w/twitch-handle-redeem-api (r)
"Handle a channel point redeem R coming from the API."
(w/write-log r)
(let* ((encoded-user (car r))
- (encoded-redeem (cadr r))
- (encoded-input (caddr r))
- (user (when encoded-user (w/decode-string encoded-user)))
- (redeem (when encoded-redeem (w/decode-string encoded-redeem)))
- (input (when encoded-input (w/decode-string encoded-input))))
+ (encoded-redeem (cadr r))
+ (encoded-input (caddr r))
+ (user (when encoded-user (w/decode-string encoded-user)))
+ (redeem (when encoded-redeem (w/decode-string encoded-redeem)))
+ (input (when encoded-input (w/decode-string encoded-input))))
(w/twitch-handle-redeem-helper user redeem input 1000)))
(provide 'wasp-twitch)
diff --git a/src/wasp-user-whitelist.el b/src/wasp-user-whitelist.el
index f23471d6..5f298b3d 100644
--- a/src/wasp-user-whitelist.el
+++ b/src/wasp-user-whitelist.el
@@ -240,6 +240,8 @@
"taske666"
"rat_not_like_noah"
"RealNaesten"
+ "Wh4i3"
+ "kamszee"
)))
(setq