|
@@ -5,6 +5,7 @@
|
|
|
|
|
|
|
|
(defparameter +api-uri+ "https://adventofcode.com/2020/leaderboard/private/view/24158.json")
|
|
(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 +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)
|
|
(defmethod poller-request ((module (eql :aoc)) method &rest params)
|
|
|
(declare (ignorable params))
|
|
(declare (ignorable params))
|
|
@@ -24,11 +25,20 @@
|
|
|
(defun leaderboard ()
|
|
(defun leaderboard ()
|
|
|
(poller-call :aoc ""))
|
|
(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)
|
|
(defun format-leaderboard (json)
|
|
|
(let ((sorted (sort (loop for (uid . member) in (agets json "members")
|
|
(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)))
|
|
#'> :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)))))
|
|
(apply 'append (mapcar #'cons (alexandria:iota (length sorted) :start 1) sorted)))))
|
|
|
|
|
|
|
|
(defun handle-leaderboard ()
|
|
(defun handle-leaderboard ()
|