diff options
Diffstat (limited to 'src/gizmo')
| -rw-r--r-- | src/gizmo/wasp-alert-message.el | 17 | ||||
| -rw-r--r-- | src/gizmo/wasp-animism.el | 2 | ||||
| -rw-r--r-- | src/gizmo/wasp-bannerads.el | 22 | ||||
| -rw-r--r-- | src/gizmo/wasp-biblicality.el | 2 | ||||
| -rw-r--r-- | src/gizmo/wasp-bless.el | 4 | ||||
| -rw-r--r-- | src/gizmo/wasp-chatsummary.el | 18 | ||||
| -rw-r--r-- | src/gizmo/wasp-cyclone.el | 89 | ||||
| -rw-r--r-- | src/gizmo/wasp-fakechat.el | 17 | ||||
| -rw-r--r-- | src/gizmo/wasp-friend-journalism.el | 4 | ||||
| -rw-r--r-- | src/gizmo/wasp-friend-music.el | 2 | ||||
| -rw-r--r-- | src/gizmo/wasp-friend.el | 11 | ||||
| -rw-r--r-- | src/gizmo/wasp-gdq.el | 2 | ||||
| -rw-r--r-- | src/gizmo/wasp-heartrate.el | 39 | ||||
| -rw-r--r-- | src/gizmo/wasp-hex.el | 9 | ||||
| -rw-r--r-- | src/gizmo/wasp-irish.el | 2 | ||||
| -rw-r--r-- | src/gizmo/wasp-prod.el | 2 | ||||
| -rw-r--r-- | src/gizmo/wasp-tcg.el | 115 | ||||
| -rw-r--r-- | src/gizmo/wasp-wikipedia.el | 2 |
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*" |
