(format stream "~S~%"
(string-right-trim '(#\return) (raw-message-string msg)))))
+(defconstant +posix-epoch+
+ (encode-universal-time 0 0 0 1 1 1970 0))
+
+(defun posix-time-to-utime (time)
+ (+ time +posix-epoch+))
+
(defun last-sexp-field (type msg)
(cond
((null msg)
nil)
((eq type :kick)
(trailing-argument msg))
+ ((eq type :rpl_topicwhotime)
+ (when (stringp (car (last (arguments msg))))
+ (let ((secs (parse-integer (car (last (arguments msg))) :junk-allowed t)))
+ (when secs
+ (posix-time-to-utime secs)))))
((need-user-address? type)
(user-address msg))))
(defmethod %output-event ((format (eql :sexp)) stream utime type channel source text
msg unichannel)
- (let ((*print-circle* nil)
- (*print-pretty* nil))
+ (with-standard-io-syntax
(if unichannel
(format stream "(~S ~S ~S ~S ~S)~%" utime type source text (last-sexp-field type msg))
- (format stream "(~S ~S ~S ~S ~S ~S)~%" utime type source channel text
- (last-sexp-field type msg)))))
+ (format stream "(~S ~S ~S ~S ~S ~S)~%" utime type source channel text
+ (last-sexp-field type msg)))))
(defmethod %output-event ((format (eql :text)) stream utime type channel
source text msg unichannel)
(output-event-for-a-stream msg type channel text logger i))))))))
(defun get-private-log-stream (logger)
- (or (private-log-stream logger) *standard-output*))
+ (if (and logger (private-log-stream logger))
+ (private-log-stream logger)
+ *standard-output*))
(defun get-unknown-log-stream (logger)
- (or (unknown-log-stream logger) *standard-output*))
+ (if (and logger (unknown-log-stream logger))
+ (unknown-log-stream logger)
+ *standard-output*))
(defun privmsg-hook (msg)
(let ((logger (find-logger-with-connection (connection msg)))
(output-event msg :rpl_topic (format nil "~{~A~^ ~}" (arguments msg))
(trailing-argument msg)))
+(defun rpl_topicwhotime-hook (msg)
+ (output-event msg :rpl_topicwhotime
+ (second (arguments msg))
+ (third (arguments msg))))
+
+
(defun invite-hook (msg)
(let ((logger (find-logger-with-connection (connection msg))))
(format
(add-hook conn 'irc::irc-rpl_topic-message 'rpl_topic-hook)
(add-hook conn 'irc::irc-rpl_namreply-message 'rpl_namreply-hook)
(add-hook conn 'irc::irc-rpl_endofnames-message 'rpl_endofnames-hook)
+ (add-hook conn 'irc::irc-rpl_topicwhotime-message 'rpl_topicwhotime-hook)
conn))
(defmethod cl-irc::irc-message-event :around ((msg cl-irc::irc-message))
irc::irc-pong-message irc::irc-kill-message irc::irc-invite-message
irc::irc-rpl_killdone-message irc::irc-rpl_closing-message
irc::irc-rpl_topic-message irc::irc-rpl_namreply-message
- irc::irc-rpl_endofnames-message)
+ irc::irc-rpl_endofnames-message irc::irc-rpl_topicwhotime-message
+ irc::irc-rpl_motd-message irc::irc-rpl_motdstart-message
+ irc::irc-rpl_endofmotd-message)
;; nothing to do
)
(t
(defun add-logger (nick server &key channels output (password "")
realname username private-log unknown-log
(logging-stream t) (async t)
- (formats '(:text)))
+ (formats '(:sexp)))
(when (find-logger-with-nick nick)
(format
(get-private-log-stream (find-logger-with-nick nick))