|
@@ -3,15 +3,16 @@
|
|
|
(:use :cl :chatikbot.common))
|
|
(:use :cl :chatikbot.common))
|
|
|
(in-package :chatikbot.plugins.aoc)
|
|
(in-package :chatikbot.plugins.aoc)
|
|
|
|
|
|
|
|
-(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))
|
|
|
|
|
|
|
+(defvar *year* 2021)
|
|
|
|
|
+(defvar *api-uri* (format nil "https://adventofcode.com/~A/leaderboard/private/view/24158.json" *year*))
|
|
|
|
|
+(defvar *leader-board-link* (format nil "https://adventofcode.com/~A/leaderboard/private/view/24158" *year*))
|
|
|
|
|
+(defvar *advent-time* (encode-universal-time 0 0 8 25 12 *year* -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))
|
|
|
(let ((cookie (format nil "session=~a" *poller-token*)))
|
|
(let ((cookie (format nil "session=~a" *poller-token*)))
|
|
|
(handler-case
|
|
(handler-case
|
|
|
- (agets (json-request +api-uri+ :headers `((:cookie . ,cookie))))
|
|
|
|
|
|
|
+ (agets (json-request *api-uri* :headers `((:cookie . ,cookie))))
|
|
|
(dex:http-request-failed (e) e))))
|
|
(dex:http-request-failed (e) e))))
|
|
|
|
|
|
|
|
(defmethod poller-validate ((module (eql :aoc)) response)
|
|
(defmethod poller-validate ((module (eql :aoc)) response)
|
|
@@ -30,7 +31,7 @@
|
|
|
collect (list (parse-integer uid) (agets member "name") (parse-integer num) (length completion)))))
|
|
collect (list (parse-integer uid) (agets member "name") (parse-integer num) (length completion)))))
|
|
|
|
|
|
|
|
(defun get-advent-days-active ()
|
|
(defun get-advent-days-active ()
|
|
|
- (max 0 (min 25 (- 25 (ceiling (/ (- +advent-time+ (get-universal-time)) 86400))))))
|
|
|
|
|
|
|
+ (max 0 (min 25 (- 25 (ceiling (/ (- *advent-time* (get-universal-time)) 86400))))))
|
|
|
|
|
|
|
|
(defun format-stars(completions)
|
|
(defun format-stars(completions)
|
|
|
(format nil "~{~a~}" (loop for daynum from 1 to (get-advent-days-active)
|
|
(format nil "~{~a~}" (loop for daynum from 1 to (get-advent-days-active)
|
|
@@ -43,7 +44,7 @@
|
|
|
(agets member "local_score")
|
|
(agets member "local_score")
|
|
|
(format-stars (agets member "completion_day_level"))))
|
|
(format-stars (agets member "completion_day_level"))))
|
|
|
#'> :key #'second)))
|
|
#'> :key #'second)))
|
|
|
- (format nil "🏆***Chad AoC Leaderboard***🏆~%~a~%~%~{~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 ()
|
|
@@ -55,7 +56,7 @@
|
|
|
:parse-mode "markdown"))
|
|
:parse-mode "markdown"))
|
|
|
|
|
|
|
|
(defun format-completion-state-change (diff)
|
|
(defun format-completion-state-change (diff)
|
|
|
- (format nil "Обновился лидерборд 🏆***AoC*** 🏆~%~a~%~{~a!~^~%~}" +leader-board-link+ (loop for (uid name daynum completed) in diff
|
|
|
|
|
|
|
+ (format nil "Обновился лидерборд 🏆***AoC*** 🏆~%~a~%~{~a!~^~%~}" *leader-board-link* (loop for (uid name daynum completed) in diff
|
|
|
collect (format nil "***~a*** ебнул ~a задачку ~a дня" name completed daynum))))
|
|
collect (format nil "***~a*** ебнул ~a задачку ~a дня" name completed daynum))))
|
|
|
|
|
|
|
|
(defcron process-aoc (:minute '(member 0 15 30 45))
|
|
(defcron process-aoc (:minute '(member 0 15 30 45))
|