trilemabot [i]: introduction and self-voicing patch proposal

June 5, 2018 by Lucian Mogosanu

First, the rationale and scope definition. In an ideal, purely platonic world, trilemabot represents a perfect cut of the points in the #trilema bot spec that are common to all #trilema bots, past, present and future. In practice, basing his or her bot upon the Republican ircbot standard, an operator could be served by some or all of the following pieces of scaffolding: self-voicing, a means to implement prefixed commands, querying deedbot to get WoT ratings or perform automated payments, and others -- the list, I suspect, is far from exhaustive. This is where trilemabot should prove itself useful.

Following discussions in the forum, this post presents a first patch proposal for trilemabot, that adds self-voicing on top of ircbot. Please note that this proposal is at the moment merely a draft: the final patch will be posted here after review by the Lordship, and as a regrind on top of ircbot1.

Now, without further ado, the README:

`trilemabot` extends `ircbot` with #trilema-specific functionality. See the
following for more details:


Currently the following functionalities are implemented:

  * self-voicing with deedbot, using a list of pre-provided OTPs


  * Install and load cl-irc and its dependencies

  * Install ircbot

  * Use V to press `trilemabot`

mkdir -p ~/src/trilemabot
cd ~/src/trilemabot

mkdir .wot
cd .wot && wget && cd .. init press trilemabot-voicer trilemabot-voicer.vpatch

  * Load `trilemabot` via Quicklisp or directly using ASDF:

(dolist (path '("/path/to/ircbot/" "~/src/trilemabot/trilemabot-voicer/"))
  (pushnew path asdf:*central-registry* :test #'string=))
(asdf:load-system :trilemabot)

And last but not least, USAGE:

(asdf:load-system :trilemabot)
(defvar *bot*)
(setq *bot*
       "" 6667 "nick" "password" '("#trilema")))

;; connect in separate thread, returning thread
(ircbot:ircbot-connect-thread *bot*)

;;;; 1. Self-voicing

;; ask for n !!up OTPs from deedbot
(loop for i from 1 to n do
  (trlb:trilemabot-send-up *bot*)
  (sleep 0.5))

;; get messages received from deedbot
(trlb:trilemabot-inbox *bot*)

;; add decrypted !!up OTPs
(trlb:trilemabot-add-voice-otps *bot*
 "decrypted-otp-1" "decrypted-otp2" ... "decrypted-otpn")

;; get the list of !!up OTPs
(trlb:trilemabot-voice-otp-stash *bot*)

;; save !!up OTPs to disk
(trlb:trilemabot-save-voice-otp-stash *bot* "voice-otps.sexp")

;; self-voice
(trlb:trilemabot-voice *bot*)

;; if `voice-otp-stash' is not empty, the bot will automatically
;; self-voice on reconnect
(ircbot:ircbot-reconnect *bot*)

  1. At the time of writing this is not possible because ircbot and trilemabot are separate modules, and they absolutely require a manifest as the binder that puts them in the same V tree. 

Filed under: computing, lisp.
RSS 2.0 feed. Comment. Send trackback.

3 Responses to “trilemabot [i]: introduction and self-voicing patch proposal”

  1. [...] up on the previous part of this series, the patch below teaches trilemabot to respond to prefixed commands, as per the [...]

  2. [...] post is a regrind proposal for Trinque's botworks patchset, including ircbot, logbot and trilemabot, as a result of multiple discussion threads in the forum of the Most Serene [...]

  3. [...] self-voicing and command [...]

Leave a Reply