Bladeren bron

Merge branch 'aoc-start' of termina1/chatikbot into master

Innocenty Enikeev 5 jaren geleden
bovenliggende
commit
93059abb7e
1 gewijzigde bestanden met toevoegingen van 12 en 2 verwijderingen
  1. 12 2
      plugins/aoc.lisp

+ 12 - 2
plugins/aoc.lisp

@@ -5,6 +5,7 @@
 
 (defparameter +api-uri+ "https://adventofcode.com/2020/leaderboard/private/view/24158.json")
 (defparameter +leader-board-link+ "https://adventofcode.com/2020/leaderboard/private/view/24158")
+(defparameter +advent-time+ (encode-universal-time 0 0 8 25 12 2020 3))
 
 (defmethod poller-request ((module (eql :aoc)) method &rest params)
   (declare (ignorable params))
@@ -24,11 +25,20 @@
 (defun leaderboard ()
   (poller-call :aoc ""))
 
+(defun get-advent-days-active ()
+  (max 0 (min 25 (- 25 (ceiling (/ (- +advent-time+ (get-universal-time)) 86400))))))
+
+(defun format-stars(completions)
+  (format nil "~{~a~^ ~}" (loop for daynum from 1 to (get-advent-days-active)
+                            collect (cond ((= 1 (length (agets completions (write-to-string daynum)))) "☆")
+                                      ((= 2 (length (agets completions (write-to-string daynum)))) "★")
+                                      (:otherwise "•")))))
+
 (defun format-leaderboard (json)
   (let ((sorted (sort (loop for (uid . member) in (agets json "members")
-                         collect (list (agets member "name") (agets member "local_score")))
+                         collect (list (agets member "name") (agets member "local_score") (format-stars (agets member "completion_day_level"))))
                       #'> :key #'second)))
-    (format nil "🏆***Chad AoC Leaderboard***🏆~%~a~%~%~{~a. ~a: ~a~^~%~}" +leader-board-link+
+    (format nil "🏆***Chad AoC Leaderboard***🏆~%~a~%~%~{~a. ~a: ~a ~% ~a~^~%~}" +leader-board-link+
             (apply 'append (mapcar #'cons (alexandria:iota (length sorted) :start 1) sorted)))))
 
 (defun handle-leaderboard ()