(in-package #:irc-logger)
(defvar *daemon-monitor-process* nil "Process of background monitor.")
-(defparameter *timeout* 60)
+(defparameter *timeout* 120)
(defclass log-channel ()
((name :initarg :name :reader c-name
:documentation "Nickname's nickserver password.")
(server :initarg :server :reader server
:documentation "Connected IRC server.")
+ (port :initarg :port :reader port
+ :documentation "Connected IRC server's port.")
(channel-names :initarg :channel-names :accessor channel-names
:documentation "List of channel names.")
(realname :initarg :realname :reader l-realname
"Returns T if output is setup for a single channel directory structure."
(and (pathnamep user-output) (null (pathname-name user-output))))
-(defun do-connect-and-join (nick server username realname logging-stream channels)
- (let ((conn (connect :nickname nick :server server
+(defun do-connect-and-join (nick server port username realname logging-stream channels)
+ (unless port (setq port 6667))
+ (let ((conn (connect :nickname nick :server server :port port
:username username :realname realname
:logging-stream logging-stream)))
(mapc #'(lambda (channel) (join conn channel)) channels)
(add-hook conn 'irc::irc-rpl_topicwhotime-message 'rpl_topicwhotime-hook)
conn))
-(defmethod cl-irc::irc-message-event :around ((msg cl-irc::irc-message))
- (let ((result (call-next-method msg)))
+(defmethod cl-irc::irc-message-event :around (connection (msg cl-irc::irc-message))
+ (let ((result (call-next-method connection msg)))
(typecase msg
((or irc::irc-privmsg-message irc::ctcp-action-message irc::irc-nick-message
irc::irc-part-message irc::irc-quit-message irc::irc-join-message
)
(t
(add-log-entry
- (get-unknown-log-stream (find-logger-with-connection (connection msg)))
+ (get-unknown-log-stream (find-logger-with-connection connection))
"~A"
(raw-message-string msg))))
result))
-(defun create-logger (nick server &key channels output password
+(defun create-logger (nick server &key (port 6667) channels output password
realname username async
private-log unknown-log
(logging-stream t) (formats '(:text)))
(setq formats (list formats)))
(if (stringp output)
(setq output (parse-namestring output)))
- (let* ((conn (do-connect-and-join nick server username realname logging-stream channels))
+ (let* ((conn (do-connect-and-join nick server port username realname logging-stream channels))
(logger (make-instance
'logger
:connection conn
:nick nick
:password password
:server server
+ :port port
:channels (make-channels channels formats output)
:channel-names channels
:username username
(delete nick *loggers* :test #'string-equal :key #'l-nickname))
t))))
-(defun add-logger (nick server &key channels output (password "")
+(defun add-logger (nick server &key (port 6667) channels output (password "")
realname username private-log unknown-log
(logging-stream t) (async t)
(formats '(:sexp)))
(add-private-log-entry nil "Calling create-logger [add-logger].~%")
(let ((logger
(do ((new-logger
- (#-sbcl mp:with-timeout #-sbcl (*timeout* nil)
- #+sbcl sb-ext:with-timeout #+sbcl *timeout*
- (create-logger nick server :channels channels :output output
+ (#+allegro mp:with-timeout #+allegro (*timeout* nil)
+ #+sbcl sb-ext:with-timeout #+sbcl *timeout*
+ #+lispworks progn
+ (create-logger nick server :port port :channels channels :output output
:logging-stream logging-stream :password password
:realname realname :username username
:private-log private-log
:unknown-log unknown-log
:formats formats
:async async))
- (#-sbcl mp:with-timeout #-sbcl (*timeout* nil)
- #+sbcl sb-ext:with-timeout #+sbcl *timeout*
- (create-logger nick server :channels channels :output output
+ (#+allegro mp:with-timeout #+allegro (*timeout* nil)
+ #+sbcl sb-ext:with-timeout #+sbcl *timeout*
+ #+lispworks progn
+ (create-logger nick server :port port :channels channels :output output
:logging-stream logging-stream :password password
:realname realname :username username
:private-log private-log
:unknown-log unknown-log
:formats formats
:async async))))
+
(new-logger
(progn
(add-private-log-entry nil "Acquired new logger ~A." new-logger)
(daemon-sleep 1))))
-(let (*recon-nick* *recon-server* *recon-username* *recon-realname*
+(let (*recon-nick* *recon-server* *recon-port* *recon-username* *recon-realname*
*recon-user-output* *recon-private-log* *recon-unknown-log*
*recon-formats* *recon-async* *recon-logging-stream* *recon-channel-names*)
- (declare (special *recon-nick* *recon-server* *recon-username* *recon-realname*
+ (declare (special *recon-nick* *recon-server* *recon-port* *recon-username* *recon-realname*
*recon-formats* *recon-password* *recon-async*
*recon-user-output* *recon-private-log* *recon-unknown-log*
*recon-logging-stream* *recon-channel-names*))
(ignore-errors (quit-with-timeout (connection logger) "Client terminated by server"))
(setf *recon-nick* (l-nickname logger)
*recon-server* (server logger)
+ *recon-port* (port logger)
*recon-username* (l-username logger)
*recon-realname* (l-realname logger)
*recon-password* (password logger)
(setq new-logger
(ignore-errors
(add-logger *recon-nick* *recon-server*
+ :port *recon-port*
:channels *recon-channel-names*
:output *recon-user-output*
:password *recon-password*