                     (if (not (or (= achieve-diff 0)
                                  (= achieve-diff 0x200)
                                  (= achieve-diff 0x400)))
-                      (parse-bitfield achievements achieve-diff)))
+                      (format "%s %s after %s turns."
+                              (:player data)
+                              (first (parse-bitfield achievements achieve-diff))
+                              (:turns data))))
 
     (str "unhandled line: " data)))
 
-(defn handle-livelog-line [irc line]
-  (let [data (parse-line line)]
+(defn region-from-fn [fn]
+  (if (.endsWith fn "-us")
+    "us"
+    "eu"))
+
+(defn handle-livelog-line [irc file line]
+  (let [data (assoc (parse-line line) :region (region-from-fn file))]
     (if (not (is-scum (:player data)))
       (let [out (make-livelog-out data)]
         (if out

                 (loop [line (read-line-ra ra)]
                   (if line
                     (do 
                       ((:callback file) (:irc @watcher) line)
                       (var-set files (assoc (var-get files)
                                        fn
                                        (assoc (get (var-get files) fn) :length (.getFilePointer ra))))

  (let [bitfield (if (integer? bitfield)
                   bitfield
                   (bitfield-to-int bitfield))]
    (filter string?
            (map (fn [idx]
                   (if (bit-test bitfield idx)
                     (nth values idx)
                     nil))
                 (range (count values))))))

(defn make-livelog-out [data]
  (condp #(contains? %2 %1) data
