|
|
@@ -7,6 +7,8 @@
|
|
|
(asdf:find-system '#:chatikbot)))))
|
|
|
(load file))
|
|
|
|
|
|
+;; Init database
|
|
|
+(db-init)
|
|
|
|
|
|
(defvar *telegram-last-update* nil "Telegram last update_id")
|
|
|
(defvar *admins* nil "Admins chat-ids")
|
|
|
@@ -173,29 +175,25 @@
|
|
|
(telegram-send-message chat-id "Ошибочка вышла"))))
|
|
|
|
|
|
;; Finance
|
|
|
-(defvar *per-minute-rates* (make-circular (make-list 1440))
|
|
|
- "Circular list for 24h per minute rates")
|
|
|
-
|
|
|
(defun process-rates ()
|
|
|
(handler-case
|
|
|
- (progn
|
|
|
- (push-circular (cons (local-time:timestamp-to-unix (local-time:now))
|
|
|
- (list* (cons "Brent"
|
|
|
- (get-brent))
|
|
|
- (get-rates)))
|
|
|
- *per-minute-rates*)
|
|
|
- (save-settings))
|
|
|
+ (let ((ts (local-time:timestamp-to-unix (local-time:now)))
|
|
|
+ (rates (get-rates))
|
|
|
+ (brent (get-brent)))
|
|
|
+ (db-add-finance ts
|
|
|
+ (aget "USD/RUB" rates)
|
|
|
+ (aget "EUR/RUB" rates)
|
|
|
+ (aget "GBP/RUB" rates)
|
|
|
+ brent))
|
|
|
(error (e) (log:error e))))
|
|
|
|
|
|
(defun handle-cmd-rates (chat-id message-id args)
|
|
|
(log:info "handle-cmd-rates" chat-id message-id args)
|
|
|
- (let ((rates (rest (peek-circular *per-minute-rates*))))
|
|
|
+ (multiple-value-bind (ts usd eur gbp brent) (db-get-last-finance)
|
|
|
(telegram-send-message chat-id
|
|
|
- (format nil "Зеленый ~A, гейро ~A, британец ~A, чёрная ~A"
|
|
|
- (aget "USD/RUB" rates)
|
|
|
- (aget "EUR/RUB" rates)
|
|
|
- (aget "GBP/RUB" rates)
|
|
|
- (aget "Brent" rates)))))
|
|
|
+ (format nil "Зеленый ~,2F, гейро ~,2F, британец ~,2F, чёрная ~,2F @ ~A"
|
|
|
+ usd eur gbp brent
|
|
|
+ (format-ts (local-time:unix-to-timestamp ts))))))
|
|
|
|
|
|
(defun handle-cmd-charts (chat-id message-id args)
|
|
|
(log:info "handle-cmd-charts" chat-id message-id args)
|
|
|
@@ -205,18 +203,18 @@
|
|
|
(eur (or (null args) (find "eur" args :test #'equal)))
|
|
|
(gbp (or (null args) (find "gbp" args :test #'equal)))
|
|
|
(brent (or (null args) (find "brent" args :test #'equal)))
|
|
|
- (rates (rest (peek-circular *per-minute-rates*))))
|
|
|
+ (rates (multiple-value-list (db-get-last-finance))))
|
|
|
(if (or usd eur gbp brent)
|
|
|
- (telegram-send-photo chat-id
|
|
|
- (make-chart *per-minute-rates*
|
|
|
- :usd usd :eur eur
|
|
|
- :gbp gbp :brent brent)
|
|
|
- :caption (format nil "Зеленый ~A, гейро ~A, британец ~A, чёрная ~A"
|
|
|
- (aget "USD/RUB" rates)
|
|
|
- (aget "EUR/RUB" rates)
|
|
|
- (aget "GBP/RUB" rates)
|
|
|
- (aget "Brent" rates)))
|
|
|
- (telegram-send-message chat-id "Хуй тебе")))
|
|
|
+ (let ((data (db-get-series
|
|
|
+ (local-time:timestamp- (local-time:now) 1 :day)
|
|
|
+ usd eur gbp brent)))
|
|
|
+ (telegram-send-photo chat-id
|
|
|
+ (make-chart data :usd usd :eur eur :gbp gbp :brent brent)
|
|
|
+ :caption
|
|
|
+ (format nil "Зеленый ~,2F, гейро ~,2F, британец ~,2F, чёрная ~,2F @ ~A"
|
|
|
+ (elt rates 1) (elt rates 2) (elt rates 3) (elt rates 4)
|
|
|
+ (format-ts (local-time:unix-to-timestamp (elt rates 0))))))
|
|
|
+ (telegram-send-message chat-id "Хуй тебе")))
|
|
|
(error (e)
|
|
|
(log:error e)
|
|
|
(telegram-send-message chat-id "Хуйня какая-то"))))
|