diff options
Diffstat (limited to 'src/admin.clj')
| -rw-r--r-- | src/admin.clj | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/src/admin.clj b/src/admin.clj index a7eced1..a3fc076 100644 --- a/src/admin.clj +++ b/src/admin.clj @@ -3,6 +3,7 @@ (:require [clojure.contrib.str-utils2 :as s]) (:use compojure email + scheduled-agent utils)) ;; Debug Page @@ -46,6 +47,24 @@ ;; Muting +(def *mute-refresh-period-sec* 60) + +(def fetch-mutes-query " +SELECT *, set_on + duration AS expiry +FROM mutes +WHERE (set_on + duration) < now() +AND NOT is_canceled +") + +(defn update-mutes [] + (let [res (do-select [fetch-mutes-query])] + (zipmap (map :user_id res) res))) + +(def *active-mutes* + (scheduled-agent (no-args-adaptor update-mutes) + *mute-refresh-period-sec* + nil)) + (defn mute-status [session] (if-vip (println session))) @@ -59,11 +78,16 @@ (defn mute! [session params] (if-vip - (let [nick (params :user) - user_id (:user_id (fetch-nick nick)) - interval (parse-pos-interval (params :time) (params :unit)) + (let [nick (params :nick) + user-id (:user_id (fetch-nick nick)) + duration (parse-pos-interval (params :time) (s/butlast (params :unit) 1)) reason (params :reason) - admin-user-id (session :user_id)] - (cond (not user_id) [400 "INVALID_NICK"] - (not interval) [400 "INVALID_INTERVAL"] - :else (do "OK"))))) + admin-id (session :user_id)] + (cond (not user-id) [400 "INVALID_NICK"] + (not duration) [400 "INVALID_DURATION"] + ;; TODO: Ugly interval hack, w/ no escaping. Totally unsafe. + :else (let [q (format "INSERT INTO mutes (user_id, admin_id, duration, reason) + VALUES (%s, %s, '%s', '%s')" + user-id admin-id duration reason)] + (and (do-cmds q) "OK")))))) + |
