summaryrefslogtreecommitdiff
path: root/src/gizmo
diff options
context:
space:
mode:
Diffstat (limited to 'src/gizmo')
-rw-r--r--src/gizmo/wasp-alert-message.el17
-rw-r--r--src/gizmo/wasp-animism.el2
-rw-r--r--src/gizmo/wasp-bannerads.el22
-rw-r--r--src/gizmo/wasp-biblicality.el2
-rw-r--r--src/gizmo/wasp-bless.el4
-rw-r--r--src/gizmo/wasp-chatsummary.el18
-rw-r--r--src/gizmo/wasp-cyclone.el89
-rw-r--r--src/gizmo/wasp-fakechat.el17
-rw-r--r--src/gizmo/wasp-friend-journalism.el4
-rw-r--r--src/gizmo/wasp-friend-music.el2
-rw-r--r--src/gizmo/wasp-friend.el11
-rw-r--r--src/gizmo/wasp-gdq.el2
-rw-r--r--src/gizmo/wasp-heartrate.el39
-rw-r--r--src/gizmo/wasp-hex.el9
-rw-r--r--src/gizmo/wasp-irish.el2
-rw-r--r--src/gizmo/wasp-prod.el2
-rw-r--r--src/gizmo/wasp-tcg.el115
-rw-r--r--src/gizmo/wasp-wikipedia.el2
18 files changed, 181 insertions, 178 deletions
diff --git a/src/gizmo/wasp-alert-message.el b/src/gizmo/wasp-alert-message.el
index c645b01f..da5f214f 100644
--- a/src/gizmo/wasp-alert-message.el
+++ b/src/gizmo/wasp-alert-message.el
@@ -27,30 +27,21 @@
:group 'w
(setq-local cursor-type nil))
-(defun w/get-alert-message-buffer ()
+(defun w/alert-message-get-buffer ()
"Return the alert message buffer."
(unless (get-buffer w/alert-message-buffer)
(with-current-buffer (get-buffer-create w/alert-message-buffer)
(w/alert-message-mode)))
(get-buffer w/alert-message-buffer))
-(defun w/render-alert-message ()
+(defun w/alert-message-update ()
"Render the heartrate buffer."
- (with-current-buffer (w/get-alert-message-buffer)
+ (with-current-buffer (w/alert-message-get-buffer)
(setq-local cursor-type nil)
(let* ((inhibit-read-only t))
(erase-buffer)
(w/write (w/pick-random w/alert-message-phrases)))))
-
-(defvar w/alert-message-timer nil)
-(defun w/run-alert-message-timer ()
- "Run the alert message timer."
- (when w/alert-message-timer
- (cancel-timer w/alert-message-timer))
- (w/render-alert-message)
- (setq
- w/alert-message-timer
- (run-with-timer 10 nil #'w/run-alert-message-timer)))
+(add-hook 'w/gizmo-update-hook #'w/alert-message-update)
(provide 'wasp-alert-message)
;;; wasp-alert-message.el ends here
diff --git a/src/gizmo/wasp-animism.el b/src/gizmo/wasp-animism.el
index 80c6f70e..de3b8510 100644
--- a/src/gizmo/wasp-animism.el
+++ b/src/gizmo/wasp-animism.el
@@ -51,7 +51,7 @@ Pass the resulting BulletML XML string to K."
((bml/barrage-toplevel b)))
(progn
(funcall k data))
- (w/write-chat-event "That spell card is too powerful... ")))))
+ (w/chat-write-event "That spell card is too powerful... ")))))
(provide 'wasp-animism)
;;; wasp-animism.el ends here
diff --git a/src/gizmo/wasp-bannerads.el b/src/gizmo/wasp-bannerads.el
index 7d64ac1b..5ce7628e 100644
--- a/src/gizmo/wasp-bannerads.el
+++ b/src/gizmo/wasp-bannerads.el
@@ -8,6 +8,7 @@
(require 'ht)
(require 'wasp-utils)
(require 'wasp-chat)
+(require 'wasp-model)
(defvar w/banner-ad-block nil)
@@ -21,16 +22,16 @@
:group 'w
(setq-local cursor-type nil))
-(defun w/get-banner-ad-buffer ()
+(defun w/banner-ad-get-buffer ()
"Return the banner ad buffer."
(unless (get-buffer w/banner-ad-buffer)
(with-current-buffer (get-buffer-create w/banner-ad-buffer)
(w/banner-ad-mode)))
(get-buffer w/banner-ad-buffer))
-(defun w/render-banner-ad ()
+(defun w/banner-ad-update ()
"Render the banner ad buffer."
- (with-current-buffer (w/get-banner-ad-buffer)
+ (with-current-buffer (w/banner-ad-get-buffer)
(setq-local cursor-type nil)
(let* ((inhibit-read-only t))
(erase-buffer)
@@ -41,27 +42,18 @@
(img (create-image path nil nil :max-width 555 :max-height 175)))
(image-animate img nil t)
(w/write (propertize "bannerad" 'display img)))))))
-
-(defvar w/banner-ad-timer nil)
-(defun w/run-banner-ad-timer ()
- "Run the banner ad timer."
- (when w/banner-ad-timer
- (cancel-timer w/banner-ad-timer))
- (w/render-banner-ad)
- (setq
- w/banner-ad-timer
- (run-with-timer 60 nil #'w/run-banner-ad-timer)))
+(add-hook 'w/gizmo-update-hook #'w/banner-ad-update)
(defun w/banner-ad-block ()
"Toggle adblock."
(setq w/banner-ad-block t)
- (w/render-banner-ad)
+ (w/banner-ad-update)
(w/model-toggle-set "adblock")
(run-with-timer 10 nil
(lambda ()
(setq w/banner-ad-block nil)
(w/model-toggle-unset "adblock")
- (w/render-banner-ad)))
+ (w/banner-ad-update)))
nil)
(provide 'wasp-bannerads)
diff --git a/src/gizmo/wasp-biblicality.el b/src/gizmo/wasp-biblicality.el
index c9b8cb44..10c38236 100644
--- a/src/gizmo/wasp-biblicality.el
+++ b/src/gizmo/wasp-biblicality.el
@@ -18,7 +18,7 @@
(w/asset "bible.txt"))
(ht-set! w/bible-table user 1000))
-(defun w/populate-bible-table ()
+(defun w/bible-table-populate ()
"Populate `w/bible-table' from the Bible text file."
(unless w/bible-table
(let* ((bible-string (s-downcase (w/slurp (w/asset "bible.txt"))))
diff --git a/src/gizmo/wasp-bless.el b/src/gizmo/wasp-bless.el
index c3175548..fa79a4a7 100644
--- a/src/gizmo/wasp-bless.el
+++ b/src/gizmo/wasp-bless.el
@@ -49,8 +49,8 @@
(defun w/bless-apply-effect (e)
"Apply the list of side effects E."
(cl-case (car e)
- (print (w/write-chat-event (format "%s" (cadr e))))
- (print-backwards (w/write-chat-event (reverse (format "%s" (cadr e)))))
+ (print (w/chat-write-event (format "%s" (cadr e))))
+ (print-backwards (w/chat-write-event (reverse (format "%s" (cadr e)))))
(soundboard (soundboard//play-clip (cadr e)))
(model-toggle (w/model-toggle (cadr e)))
(t (message "Unknown effect tag: %s" (car e)))))
diff --git a/src/gizmo/wasp-chatsummary.el b/src/gizmo/wasp-chatsummary.el
index 3087c18d..169c3a21 100644
--- a/src/gizmo/wasp-chatsummary.el
+++ b/src/gizmo/wasp-chatsummary.el
@@ -3,7 +3,7 @@
;;; Code:
(require 'wasp-ai)
-(require 'wasp-friend)
+(require 'wasp-friend-journalism)
(defcustom w/chatsummary-buffer "*wasp-chatsummary*"
"Name of buffer used to display chat summary."
@@ -12,7 +12,7 @@
(define-derived-mode w/chatsummary-mode special-mode "Chat Summary"
"Major mode for displaying chat summary."
- :group 'w
+ :group 'wasp
(setq-local cursor-type nil)
(visual-line-mode))
@@ -23,7 +23,7 @@
(w/chatsummary-mode)))
(get-buffer w/chatsummary-buffer))
-(defun w/update-chatsummary ()
+(defun w/chatsummary-update ()
"Update the chat summary."
(w/ai
(w/friend-journalism-input)
@@ -38,21 +38,21 @@
"Given a list of recent YouTube chatter activity, produce a summary of the topics discussed. The summary should be very short, maximum two sentences total. Do not introduce yourself. Simply provide a short summary of the chat. Do not mention specific names of chatters. Keep it succinct. Do not mention that you are summarizing YouTube activity. Be laconic."))
(defvar w/chatsummary-timer nil)
-(defun w/run-chatsummary-timer ()
+(defun w/chatsummary-run-timer ()
"Run the chat summary timer."
(when w/chatsummary-timer
(cancel-timer w/chatsummary-timer))
- (w/update-chatsummary)
+ (w/chatsummary-update)
(setq
w/chatsummary-timer
- (run-with-timer 120 nil #'w/run-chatsummary-timer)))
+ (run-with-timer 120 nil #'w/chatsummary-run-timer)))
-(defun w/start-chatsummary ()
+(defun w/chatsummary-start ()
"Enable fake chatters."
(interactive)
- (w/run-chatsummary-timer))
+ (w/chatsummary-run-timer))
-(defun w/stop-chatsummary ()
+(defun w/chatsummary-stop ()
"Disable fake chatters."
(interactive)
(cancel-timer w/chatsummary-timer)
diff --git a/src/gizmo/wasp-cyclone.el b/src/gizmo/wasp-cyclone.el
deleted file mode 100644
index 6ad7a4f8..00000000
--- a/src/gizmo/wasp-cyclone.el
+++ /dev/null
@@ -1,89 +0,0 @@
-;;; wasp-cyclone --- Gizmocycling -*- lexical-binding: t; -*-
-;;; Commentary:
-;;; Code:
-
-(require 'wasp-utils)
-(require 'wasp-friend)
-(require 'wasp-heartrate)
-(require 'wasp-chatsummary)
-(require 'wasp-alert-message)
-(require 'wasp-fakechat)
-(require 'wasp-bannerads)
-
-(defconst w/gizmo-buffer-names
- (list
- w/friend-buffer
- w/heartrate-buffer
- w/chatsummary-buffer
- w/alert-message-buffer
- w/fake-chatter-enclosure-buffer
- w/banner-ad-buffer
- w/chat-event-buffer
- ))
-
-(defvar w/gizmo-windows (list))
-
-(defun w/gizmo-tag-window ()
- "Tag the current window as containing a gizmo."
- (interactive)
- (when-let* ((w (selected-window)))
- (add-to-list 'w/gizmo-windows w)))
-
-(defun w/gizmo-cycle-window (w)
- "Cycle the gizmo in W."
- (when-let*
- ((cur (buffer-name (window-buffer w)))
- (idx (--find-index (equal it cur) w/gizmo-buffer-names))
- (bufs (-non-nil (-map #'get-buffer w/gizmo-buffer-names)))
- (nidx (mod (+ idx 1) (length bufs)))
- (buf (nth nidx bufs)))
- (set-window-buffer w buf)))
-
-(defun w/gizmo-cycle ()
- "Cycle all gizmo-bearing windows."
- (interactive)
- (--each w/gizmo-windows
- (w/gizmo-cycle-window it)))
-
-(defun w/gizmo-ensure-shown (buf)
- "Ensure that BUF is shown in one of the windows."
- (unless (--any (s-equals? (buffer-name (window-buffer it)) (buffer-name (get-buffer buf))) w/gizmo-windows)
- (when (window-live-p (car w/gizmo-windows))
- (set-window-buffer (car w/gizmo-windows) buf))))
-
-(defvar w/gizmo-cycle-timer nil)
-(defun w/run-gizmo-cycle-timer ()
- "Run the gizmo cycle timer."
- (when w/gizmo-cycle-timer
- (cancel-timer w/gizmo-cycle-timer))
- (w/gizmo-cycle)
- (setq
- w/gizmo-cycle-timer
- (run-with-timer 300 nil #'w/run-gizmo-cycle-timer)))
-(w/run-gizmo-cycle-timer)
-
-(require 'htmlize)
-(defvar w/gizmo-html-cache (ht-create))
-(defun w/gizmo-render-html (buf)
- "Render BUF to HTML with embedded images."
- (let* ( (htmlize-output-type 'inline-css)
- (htmlize-force-inline-images t)
- (buf (htmlize-buffer buf))
- (html (with-current-buffer buf (buffer-string))))
- (kill-buffer buf)
- html))
-(defun w/gizmo-upload (buf)
- "Upload the HTML contents of BUF to the database."
- (let* ( (b (get-buffer buf))
- (nm (buffer-name b))
- (render (w/gizmo-render-html b))
- (cached (ht-get w/gizmo-html-cache nm)))
- (unless (and cached (s-equals? cached render))
- (ht-set w/gizmo-html-cache nm render)
- (w/db-hset-then "gizmos" nm
- render
- (lambda (_)
- (w/pub '(gizmo buffer update) (list nm)))))))
-
-(provide 'wasp-cyclone)
-;;; wasp-cyclone.el ends here
diff --git a/src/gizmo/wasp-fakechat.el b/src/gizmo/wasp-fakechat.el
index ffdd750a..ff7ed5d5 100644
--- a/src/gizmo/wasp-fakechat.el
+++ b/src/gizmo/wasp-fakechat.el
@@ -51,7 +51,7 @@
(unless (string-empty-p text-colored-bible)
(when (s-contains? "hexadiCoding" trimmed)
(soundboard//play-clip "developers.ogg"))
- (w/write-chat-message
+ (w/chat-write-message
(w/make-chat-message
:user (w/fake-chatter-profile-username prof)
:id ""
@@ -87,21 +87,21 @@
(w/fake-chatter-run st)))
(defvar w/fake-chatter-timer nil)
-(defun w/run-fake-chatter-timer ()
+(defun w/fake-chatters-run-timer ()
"Run the fake chatter timer."
(when w/fake-chatter-timer
(cancel-timer w/fake-chatter-timer))
(w/fake-chatters-handle)
(setq
w/fake-chatter-timer
- (run-with-timer 30 nil #'w/run-fake-chatter-timer)))
+ (run-with-timer 30 nil #'w/fake-chatters-run-timer)))
-(defun w/start-fake-chatters ()
+(defun w/fake-chatters-start ()
"Enable fake chatters."
(interactive)
- (w/run-fake-chatter-timer))
+ (w/fake-chatters-run-timer))
-(defun w/stop-fake-chatters ()
+(defun w/fake-chatters-stop ()
"Disable fake chatters."
(interactive)
(cancel-timer w/fake-chatter-timer)
@@ -147,6 +147,7 @@
(defun w/fake-chatter-elevated-likeliness (st)
"Compute the elevated likeliness for ST to chat."
+ (ignore st)
0.1)
(defconst w/fake-chatter-profile-prodzpod
@@ -179,7 +180,7 @@
:compute-likeliness #'w/fake-chatter-standard-likeliness
:send-message
(lambda (_)
- (w/write-chat-event "eighteyedsixwingedseraph is lurking"))))
+ (w/chat-write-event "eighteyedsixwingedseraph is lurking"))))
(defconst w/fake-chatter-profile-quasiconformal
(w/make-fake-chatter-profile
@@ -188,7 +189,7 @@
:compute-likeliness #'w/fake-chatter-standard-likeliness
:send-message
(lambda (_)
- (w/write-chat-event "quasiconformal is lurking"))))
+ (w/chat-write-event "quasiconformal is lurking"))))
(defconst w/fake-chatter-profile-nefrayu
(w/make-fake-chatter-profile
diff --git a/src/gizmo/wasp-friend-journalism.el b/src/gizmo/wasp-friend-journalism.el
index 25d18bdb..c6415afb 100644
--- a/src/gizmo/wasp-friend-journalism.el
+++ b/src/gizmo/wasp-friend-journalism.el
@@ -26,12 +26,12 @@ AUTHOR was a contributing author btw."
(w/friend-journalism-input))
(lambda (resp)
(when resp
- (w/write-chat-event (format "\"friend\" finished writing about: %s" headline))
+ (w/chat-write-event (format "\"friend\" finished writing about: %s" headline))
(funcall
(if (= (random 5) 0) #'w/newspaper-screenshot (lambda (k) (funcall k nil)))
(lambda (img)
(when img
- (w/write-chat-event "...and the article included some photojournalism"))
+ (w/chat-write-event "...and the article included some photojournalism"))
(push
(w/make-newspaper-article
:headline headline
diff --git a/src/gizmo/wasp-friend-music.el b/src/gizmo/wasp-friend-music.el
index 76e2c606..dfb376cd 100644
--- a/src/gizmo/wasp-friend-music.el
+++ b/src/gizmo/wasp-friend-music.el
@@ -20,7 +20,7 @@
(w/friend-respond
(format "You just composed a song about %s called %s! Say something about it!" theme name)
(lambda ()
- (w/write-chat-event (format "The song is called %s: %s" name song))
+ (w/chat-write-event (format "The song is called %s: %s" name song))
(w/add-song (s-concat "friend's " name) song)
(w/audio-muzak-enqueue "\"friend\"" song))))))
"Please compose a song about the provided theme. The format for the song is a sequence of characters with meanings as follows: / represents a rest, uppercase letters A through G indicate semitones, octaves are specified with a number following a semitone, ~ extends the duration of a note, square brackets like [] group notes together into a chord. The pipe character | separates tracks. Respond only with the song's name followed by a colon folowed by the song notes. Do not explain yourself. The song should ideally be 20 to 30 notes long."
diff --git a/src/gizmo/wasp-friend.el b/src/gizmo/wasp-friend.el
index aff6e358..dfa6f513 100644
--- a/src/gizmo/wasp-friend.el
+++ b/src/gizmo/wasp-friend.el
@@ -45,7 +45,7 @@
(defun w/friend-set-speech (msg &optional time)
"Have \"friend\" say MSG for TIME."
- (w/write-chat-event (s-concat "Friend says: " msg))
+ (w/chat-write-event (s-concat "Friend says: " msg))
(setf w/friend-speech msg)
(setf w/friend-speech-timer (or time 5)))
@@ -158,11 +158,18 @@ If K is specified, call it after the response."
(w/write
(format-spec
"%a\
- /----\\
+ /\\ /\\
+ \\----/
/ %l %r \\
\\ %m /
+----+\
"
+;; "%a\
+;; /----\\
+;; / %l %r \\
+;; \\ %m /
+;; +----+\
+;; "
`((?a . ,(s-repeat (w/friend-get-offset) " \n"))
(?l . ,(car face))
(?r . ,(cadr face))
diff --git a/src/gizmo/wasp-gdq.el b/src/gizmo/wasp-gdq.el
index 03d9bb64..9ce3e60c 100644
--- a/src/gizmo/wasp-gdq.el
+++ b/src/gizmo/wasp-gdq.el
@@ -78,7 +78,7 @@
user
(lambda (s)
(let ((sp (s-split "|" s)))
- (w/write-chat-event (format "%s donated %s!" (car sp) (cadr sp)))
+ (w/chat-write-event (format "%s donated %s!" (car sp) (cadr sp)))
(w/tts
(format
"%s donated %s with the message: %s"
diff --git a/src/gizmo/wasp-heartrate.el b/src/gizmo/wasp-heartrate.el
index 91e758fd..fa27d64d 100644
--- a/src/gizmo/wasp-heartrate.el
+++ b/src/gizmo/wasp-heartrate.el
@@ -9,23 +9,13 @@
(require 'wasp-utils)
(require 'wasp-chat)
-(defun w/get-load ()
- "Get the current CPU load."
- (let ((res (shell-command-to-string "uptime")))
- (string-to-number (s-trim (car (s-split "," (cadr (s-split "load average:" res))))))))
-
-(defun w/get-disk-usage (disk)
- "Get the current usage percent for DISK"
- (let ((res (shell-command-to-string (format "df %s" disk))))
- (string-to-number (s-chop-suffix "%" (nth 4 (s-split " " (cadr (s-lines res)) t))))))
-
-(defun w/get-heartrate ()
+(defun w/heartrate ()
"Get the streamer's heart rate."
- (* 100 (w/get-load)))
+ (* 100 (w/cpu-load)))
-(defun w/get-blood-pressure ()
+(defun w/heartrate-blood-pressure ()
"Get the streamer's blood pressure."
- (format "%s/%s" (w/get-disk-usage "/") (w/get-disk-usage "/home")))
+ (format "%s/%s" (w/disk-usage "/") (w/disk-usage "/home")))
(defface w/heartrate-big
'((t
@@ -52,32 +42,23 @@
:group 'w
(setq-local cursor-type nil))
-(defun w/get-heartrate-buffer ()
+(defun w/heartrate-get-buffer ()
"Return the heartrate buffer."
(unless (get-buffer w/heartrate-buffer)
(with-current-buffer (get-buffer-create w/heartrate-buffer)
(w/heartrate-mode)))
(get-buffer w/heartrate-buffer))
-(defun w/render-heartrate ()
+(defun w/heartrate-update ()
"Render the heartrate buffer."
- (with-current-buffer (w/get-heartrate-buffer)
+ (with-current-buffer (w/heartrate-get-buffer)
(setq-local cursor-type nil)
(let* ((inhibit-read-only t))
(erase-buffer)
- (w/write-line (format "%3d bpm" (w/get-heartrate)) 'w/heartrate-big)
- (w/write-line (format "blood pressure: %s" (w/get-blood-pressure)) 'w/heartrate-small)
+ (w/write-line (format "%3d bpm" (w/heartrate)) 'w/heartrate-big)
+ (w/write-line (format "blood pressure: %s" (w/heartrate-blood-pressure)) 'w/heartrate-small)
(w/write (format "arbitrary counter: %s times" w/chat-bpm-count) 'w/heartrate-small))))
-
-(defvar w/heartrate-timer nil)
-(defun w/run-heartrate-timer ()
- "Run the heartrate timer."
- (when w/heartrate-timer
- (cancel-timer w/heartrate-timer))
- (w/render-heartrate)
- (setq
- w/heartrate-timer
- (run-with-timer 1 nil #'w/run-heartrate-timer)))
+(add-hook 'w/gizmo-update-hook #'w/heartrate-update)
(provide 'wasp-heartrate)
;;; wasp-heartrate.el ends here
diff --git a/src/gizmo/wasp-hex.el b/src/gizmo/wasp-hex.el
index 1417f0c9..e483982b 100644
--- a/src/gizmo/wasp-hex.el
+++ b/src/gizmo/wasp-hex.el
@@ -30,6 +30,8 @@
("ESUNA" . decurse)
("DECIMAL" . decimal)
("DROPBEAR" . upsidedown)
+ ("SOULBURN" . silence)
+ ("SPELLNAME" . spellname)
))
(defconst w/hex-users (ht-create 'equal))
@@ -56,7 +58,7 @@
(ht-set! w/hex-users key nil))
(otherwise
(if-let* ((defender (--find (eq 'counterspell (w/hex-type it)) cur)))
- (w/write-chat-event (format "%s counterspelled %s's hex on %s!" (w/hex-caster defender) (w/hex-caster hex) user))
+ (w/chat-write-event (format "%s counterspelled %s's hex on %s!" (w/hex-caster defender) (w/hex-caster hex) user))
(ht-set! w/hex-users key (cons hex cur))))))))
(defun w/hex-clear (user)
@@ -231,6 +233,9 @@
(w/chat-message-text msg)
(ttf/flip (w/chat-message-text msg)))
(w/hex-transform-helper msg (cdr hexes) k))
+ (spellname
+ (setf (w/chat-message-text msg) (w/pick-random (-map #'car w/hex-types)))
+ (w/hex-transform-helper msg (cdr hexes) k))
(t (w/hex-transform-helper msg (cdr hexes) k))))
(t (funcall k msg))))
(defun w/hex-transform (user msg)
@@ -239,7 +244,7 @@
msg (w/hex-get user)
(lambda (msg)
(when msg
- (w/write-chat-message msg)))))
+ (w/chat-write-message msg)))))
(defun w/hex-tick (user)
"Decrement timers for all of USER's hexes."
diff --git a/src/gizmo/wasp-irish.el b/src/gizmo/wasp-irish.el
index 5cbf0b47..aa96963e 100644
--- a/src/gizmo/wasp-irish.el
+++ b/src/gizmo/wasp-irish.el
@@ -358,7 +358,7 @@ Pass the path to the downloaded image to K."
:command `("convert" ,p "-scale" "100x140!" ,p)
:sentinel
(lambda (_ _)
- (w/write-chat-event "Uploading image to poster!")
+ (w/chat-write-event "Uploading image to poster!")
(make-process
:name "*wasp-irish-dough*"
:buffer nil
diff --git a/src/gizmo/wasp-prod.el b/src/gizmo/wasp-prod.el
index 4ba6dd17..dbfe19c6 100644
--- a/src/gizmo/wasp-prod.el
+++ b/src/gizmo/wasp-prod.el
@@ -68,7 +68,7 @@
(unless (string-empty-p text-colored-bible)
(when (s-contains? "hexadiCoding" trimmed)
(soundboard//play-clip "developers.ogg"))
- (w/write-chat-message
+ (w/chat-write-message
(w/make-chat-message
:user name
:text (w/twitch-add-7tv-emotes text-colored-bible)
diff --git a/src/gizmo/wasp-tcg.el b/src/gizmo/wasp-tcg.el
new file mode 100644
index 00000000..b989eb31
--- /dev/null
+++ b/src/gizmo/wasp-tcg.el
@@ -0,0 +1,115 @@
+;;; wasp-tcg --- trading card game -*- lexical-binding: t; -*-
+;;; Commentary:
+;;; Code:
+
+(require 'cl-lib)
+(require 'ht)
+(require 'f)
+
+(require 'wasp-twitch)
+(require 'wasp-user)
+
+(defconst w/tcg-bases
+ (-map #'f-base
+ (f-entries "/home/llll/src/newton/crates/renderer/src/assets/textures/tcg/bases")))
+
+(defvar w/tcg-request-sequence 0)
+(defvar w/tcg-request-handlers (ht-create))
+
+(cl-defstruct (w/tcg-card (:constructor w/make-tcg-card))
+ name
+ type
+ depicted-subject
+ element
+ color
+ faction
+ equity
+ boost-level
+ rarity
+ rarity-level
+ body-text
+ base-image-name
+ flags ;; comma-separated strings: inverse, etc.
+ )
+
+(defun w/tcg-determine-rarity ()
+ "Return a rarity level."
+ (let ((ret 0))
+ (while (= (random 2) 0)
+ (cl-incf ret))
+ ret))
+
+(defun w/tcg-render-rarity (r)
+ "Convert rarity R to a string."
+ (cond
+ ((= 0 r) "C")
+ ((= 1 r) "R")
+ (t (s-concat (s-repeat (- r 1) "S") "R"))))
+
+(defun w/tcg-pick-flags (u)
+ "Return flags for the user U."
+ (ignore u)
+ (-concat
+ (when (= (random 20) 0) (list "inverse"))))
+
+(defun w/tcg-random-user-card (k)
+ "Generate a random `w/tcg-card' and pass it to K."
+ (let* ( (users (-map #'car w/twitch-chat-history))
+ (name (w/pick-random users))
+ (ud (w/user-cache-get name))
+ (element (alist-get :element ud))
+ (colornm (or (cadr (alist-get element w/user-elements nil nil #'s-equals?)) "grey"))
+ (color (w/color-value-to-html-code (color-values colornm)))
+ (faction (format "%s" (or (alist-get :faction ud) 'none)))
+ (equity (format "%s" (or (alist-get :equity ud) 0)))
+ (boost-level (format "%s" (or (alist-get :boost ud) "ABSTAINER")))
+ (rarity-level (w/tcg-determine-rarity))
+ (rarity (w/tcg-render-rarity rarity-level)))
+ (funcall k
+ (w/make-tcg-card
+ :name name
+ :type "user"
+ :depicted-subject name
+ :element (or element "neutral")
+ :color color
+ :faction faction
+ :equity equity
+ :boost-level boost-level
+ :rarity rarity
+ :rarity-level (format "%s" rarity-level)
+ :body-text ""
+ :base-image-name (w/pick-random w/tcg-bases)
+ :flags (s-join "," (w/tcg-pick-flags ud))))
+ nil))
+
+(defun w/tcg-encode-card (c)
+ "Encode C to a string."
+ (s-join "\t"
+ (list
+ (w/. name c)
+ (w/. type c)
+ (w/. depicted-subject c)
+ (w/. element c)
+ (w/. color c)
+ (w/. faction c)
+ (w/. equity c)
+ (w/. boost-level c)
+ (w/. rarity c)
+ (w/. rarity-level c)
+ (w/. body-text c)
+ (w/. base-image-name c)
+ (w/. flags c))))
+
+(defun w/tcg-generate-card (c k)
+ "Generate the card C.
+Pass the resulting PNG to K."
+ (let* ( (seq (cl-incf w/tcg-request-sequence))
+ (msg (format "%s\t%s" seq (w/tcg-encode-card c))))
+ (ht-set w/tcg-request-handlers seq
+ (lambda (resp)
+ (ht-remove w/tcg-request-handlers seq)
+ (funcall k resp)))
+ (w/binary-pub "overlay tcg generate" msg)))
+
+(provide 'wasp-tcg)
+;;; wasp-tcg.el ends here
diff --git a/src/gizmo/wasp-wikipedia.el b/src/gizmo/wasp-wikipedia.el
index 74a6adf0..8f9f1580 100644
--- a/src/gizmo/wasp-wikipedia.el
+++ b/src/gizmo/wasp-wikipedia.el
@@ -40,7 +40,7 @@ Pass the resulting article summary to K."
(dom (with-temp-buffer (insert ext) (libxml-parse-html-region (point-min) (point-max))))
)
(funcall k (s-trim (dom-texts dom)))
- (w/write-chat-event (format "Could not find Wikipedia page: %s" pagename))))))
+ (w/chat-write-event (format "Could not find Wikipedia page: %s" pagename))))))
nil))
(defcustom w/wiki-buffer "*wasp-wiki*"