+(: nick-hist-most-by (-> Nick-Hist Url (-> Hist Nonnegative-Integer) (Option String)))
+(define (nick-hist-most-by url->nick->hist url by)
+ (match (hash-ref url->nick->hist url #f)
+ [#f #f]
+ [nick->hist
+ (match (sort (hash->list nick->hist)
+ (λ (a b) (> (by (cdr a))
+ (by (cdr b)))))
+ ['() #f]
+ [(cons (cons nick _) _) nick])]))
+
+(: nick-hist-latest (-> Nick-Hist Url (Option String)))
+(define (nick-hist-latest nick-hist url)
+ (nick-hist-most-by nick-hist url Hist-last))
+
+(: nick-hist-common (-> Nick-Hist Url (Option String)))
+(define (nick-hist-common nick-hist url)
+ (nick-hist-most-by nick-hist url Hist-freq))
+
+(module+ test
+ (let* ([url-str "http://foo"]
+ [url (string->url url-str)]
+ [nick1 "a"]
+ [nick2 "b"]
+ [nick3 "c"]
+ [ts-str-1 "2021-11-29T23:29:08-0500"]
+ [ts-str-2 "2021-11-29T23:30:00-0500"]
+ [ts-1 (rfc3339->epoch ts-str-1)]
+ [ts-2 (rfc3339->epoch ts-str-2)]
+ [msgs
+ (map (match-lambda
+ [(cons ts-str nick)
+ (str->msg (str->peer "test http://test")
+ (string-append ts-str " Hi @<" nick " " url-str ">"))])
+ (list (cons ts-str-2 nick1)
+ (cons ts-str-1 nick2)
+ (cons ts-str-1 nick2)
+ (cons ts-str-1 nick3)
+ (cons ts-str-1 nick3)
+ (cons ts-str-1 nick3)))]
+ [hist
+ (msgs->nick-hist msgs)])
+ (check-equal? (hash-ref (hash-ref hist url) nick1) (Hist 1 ts-2))
+ (check-equal? (hash-ref (hash-ref hist url) nick2) (Hist 2 ts-1))
+ (check-equal? (hash-ref (hash-ref hist url) nick3) (Hist 3 ts-1))
+ (check-equal? (nick-hist-common hist url) nick3)
+ (check-equal? (nick-hist-latest hist url) nick1)))
+