From 5db1d491cecd9b610e9693d10b5015822429d261 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Mon, 13 Oct 2025 02:43:23 +0300 Subject: Added a SWANK server --- README.md | 6 ++++++ config.default.lisp | 3 ++- src/config.lisp | 5 +++-- src/main.lisp | 21 ++++++++++++++++++++- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 76b3e5e..2420d5d 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,12 @@ A shitty small telegram bot written in common lisp. +When running in a debuggy environment, consider +``` common-lisp +(setf ukkoclot::*in-prod* nil) +(log:config :debug) +``` + # Licensing European Union Public Licence, version 1.2. diff --git a/config.default.lisp b/config.default.lisp index 39b80c8..ac519ae 100644 --- a/config.default.lisp +++ b/config.default.lisp @@ -3,4 +3,5 @@ :bot-token "123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi" :db-path "./data.db" :dev-group -1001234567890 - :owner 12345678) + :owner 12345678 + :swank-port 4006) diff --git a/src/config.lisp b/src/config.lisp index 17c5c73..1bac762 100644 --- a/src/config.lisp +++ b/src/config.lisp @@ -5,7 +5,7 @@ (:export :config-load :config-merge :config-p - :config-bot-name :config-bot-token :config-db-path :config-dev-group :config-owner)) + :config-bot-name :config-bot-token :config-db-path :config-dev-group :config-owner :config-swank-port)) (in-package :ukkoclot/config) (defmacro defconfig (&rest slots-and-types) @@ -18,7 +18,8 @@ :bot-token string :db-path string :dev-group integer - :owner integer) + :owner integer + :swank-port (integer 1 65536)) (defun config-load (filename) (apply #'make-config (with-open-file (f filename) (read f)))) diff --git a/src/main.lisp b/src/main.lisp index 862526b..a113ab0 100644 --- a/src/main.lisp +++ b/src/main.lisp @@ -5,6 +5,7 @@ (:use :c2cl :ukkoclot/bot :ukkoclot/config :ukkoclot/inline-bots :ukkoclot/tg) (:import-from :anaphora :acond :awhen :it) (:import-from :log) + (:import-from :swank) (:import-from :ukkoclot/bot :make-bot :bot-power-on :fixup-value) (:import-from :ukkoclot/db :with-db) (:import-from :ukkoclot/strings :escape-xml :is-tg-whitespace-str :starts-with :starts-with-ignore-case) @@ -21,16 +22,34 @@ (error (err) (report-error bot ,evt err))) (progn ,@body))) +(defun start-swank (port) + (log:info "Starting a SWANK server on port ~A..." port) + (swank:create-server :port port :dont-close t) + (log:info "SWANK started. You can connect to it by forwarding ports via SSH: `ssh -L~A:127.0.0.1:~A username@server.com'" port port) + (log:info "And then afterwards M-x slime-connect giving localhost and ~A" port)) + +(defun stop-swank (port) + (log:info "Stopping the SWANK server on port ~A..." port) + (swank:stop-server port) + (log:info "Done")) + (defun main () (unwind-protect (let ((config (config-load #P"config.default.lisp"))) (config-merge config #P"config.lisp") (log:info "Starting up ~A" (config-bot-name config)) + (main-with-config config)) + (log:info "Quitting!"))) + +(defun main-with-config (config) + (unwind-protect + (progn + (start-swank (config-swank-port config)) (with-db (db (config-db-path config)) (let ((bot (make-bot config db))) ;; TODO: Catch fatal errors & report them (wrapped-main bot config)))) - (log:info "We're done!"))) + (stop-swank (config-swank-port config)))) (defun wrapped-main (bot config) (when *in-prod* -- cgit v1.2.3