(sigil irc)
(sigil irc) - IRC protocol library for the Sigil ecosystem
sigil-irc is the canonical IRC protocol library. It serves both client and server flows for IRCv3, covering the modern Tier 1 ratified caps and the Tier 2 mobile-critical drafts (chathistory, read-marker, MONITOR, SCRAM-SHA-256).
Modules
The library is decomposed into protocol-only modules that the consumer assembles into a server, client, or bot:
(sigil irc message) line parsing + IRCv3 message tags (sigil irc tags) typed accessors for common tags (sigil irc identity) nick@server-domain qualified identity (sigil irc numerics) numeric reply constants (sigil irc capability) cap descriptors + Tier 1+2 names (sigil irc cap-negotiation) CAP state machines (both sides) (sigil irc sasl) SASL state machines (PLAIN/EXTERNAL/SCRAM) (sigil irc batch) BATCH command + tag helpers (sigil irc chathistory) CHATHISTORY query parser/serializer (sigil irc read-marker) draft/read-marker MARKREAD helpers (sigil irc monitor) MONITOR command helpers (sigil irc connection) high-level client convenience API
Quick Start (client)
(import (sigil irc))
(define conn (make-irc-connection
server: "irc.libera.chat"
port: 6697
nick: "mybot"
tls: #t))
(irc-on conn 'PRIVMSG
(lambda (msg)
(display (irc-message-nick msg))
(display ": ")
(display (irc-message-text msg))
(newline)))
(irc-connect conn)
(irc-join conn "#mychannel")
(irc-run conn)Server protocol (consumer drives I/O)
(import (sigil irc message)
(sigil irc cap-negotiation)
(sigil irc capability)
(sigil irc sasl)
(sigil irc numerics))
(define cap-state
(make-cap-server-state
server-name: "enclave.example"
supported: (list (make-cap CAP-SASL value: "PLAIN,EXTERNAL")
(make-cap CAP-MESSAGE-TAGS)
(make-cap CAP-SERVER-TIME))))
;; In your per-connection fiber, on each incoming line:
(let* ((msg (parse-irc-message line))
(replies (cap-server-advance cap-state msg client-nick: nick)))
(for-each (lambda (r) (write-line conn r)) replies))Exports
irc-messagevariable(No description)
irc-message?variable(No description)
irc-message-rawvariable(No description)
irc-message-tagsvariable(No description)
irc-message-prefixvariable(No description)
irc-message-nickvariable(No description)
irc-message-uservariable(No description)
irc-message-hostvariable(No description)
irc-message-commandvariable(No description)
irc-message-paramsvariable(No description)
irc-message-trailingvariable(No description)
irc-message-targetvariable(No description)
irc-message-textvariable(No description)
irc-message-tagvariable(No description)
irc-message-has-tag?variable(No description)
parse-irc-messagevariable(No description)
parse-irc-tagsvariable(No description)
irc-tag-escapevariable(No description)
irc-tag-unescapevariable(No description)
irc-tags->stringvariable(No description)
make-irc-commandvariable(No description)
make-irc-command/tagsvariable(No description)
irc-command->stringvariable(No description)
TAG-TIMEvariable(No description)
TAG-MSGIDvariable(No description)
TAG-ACCOUNTvariable(No description)
TAG-BATCHvariable(No description)
TAG-LABELvariable(No description)
TAG-REPLYvariable(No description)
TAG-TYPINGvariable(No description)
msg-timevariable(No description)
msg-msgidvariable(No description)
msg-accountvariable(No description)
msg-batchvariable(No description)
msg-labelvariable(No description)
msg-replyvariable(No description)
msg-typingvariable(No description)
with-timevariable(No description)
with-msgidvariable(No description)
with-accountvariable(No description)
with-batchvariable(No description)
with-labelvariable(No description)
irc-identityvariable(No description)
irc-identity?variable(No description)
make-irc-identityvariable(No description)
irc-identity-nickvariable(No description)
irc-identity-servervariable(No description)
irc-identity->canonicalvariable(No description)
irc-identity->displayvariable(No description)
irc-identity=?variable(No description)
parse-irc-identityvariable(No description)
irc-identity-from-prefixvariable(No description)
irc-display-strip-servervariable(No description)
irc-numeric-namevariable(No description)
irc-numeric->symbolvariable(No description)
RPL-WELCOMEvariable(No description)
RPL-YOURHOSTvariable(No description)
RPL-CREATEDvariable(No description)
RPL-MYINFOvariable(No description)
RPL-ISUPPORTvariable(No description)
RPL-LUSERCLIENTvariable(No description)
RPL-LUSEROPvariable(No description)
RPL-LUSERUNKNOWNvariable(No description)
RPL-LUSERCHANNELSvariable(No description)
RPL-LUSERMEvariable(No description)
RPL-AWAYvariable(No description)
RPL-WHOISUSERvariable(No description)
RPL-WHOISSERVERvariable(No description)
RPL-WHOISIDLEvariable(No description)
RPL-ENDOFWHOvariable(No description)
RPL-ENDOFWHOISvariable(No description)
RPL-WHOISCHANNELSvariable(No description)
RPL-WHOISACCOUNTvariable(No description)
RPL-LISTvariable(No description)
RPL-LISTENDvariable(No description)
RPL-CHANNELMODEISvariable(No description)
RPL-NOTOPICvariable(No description)
RPL-TOPICvariable(No description)
RPL-TOPICWHOTIMEvariable(No description)
RPL-WHOREPLYvariable(No description)
RPL-NAMREPLYvariable(No description)
RPL-ENDOFNAMESvariable(No description)
RPL-MOTDSTARTvariable(No description)
RPL-MOTDvariable(No description)
RPL-ENDOFMOTDvariable(No description)
ERR-NOSUCHNICKvariable(No description)
ERR-NOSUCHSERVERvariable(No description)
ERR-NOSUCHCHANNELvariable(No description)
ERR-CANNOTSENDTOCHANvariable(No description)
ERR-UNKNOWNCOMMANDvariable(No description)
ERR-NOMOTDvariable(No description)
ERR-NONICKNAMEGIVENvariable(No description)
ERR-ERRONEUSNICKNAMEvariable(No description)
ERR-NICKNAMEINUSEvariable(No description)
ERR-NICKCOLLISIONvariable(No description)
ERR-NOTREGISTEREDvariable(No description)
ERR-NEEDMOREPARAMSvariable(No description)
ERR-ALREADYREGISTEREDvariable(No description)
ERR-PASSWDMISMATCHvariable(No description)
ERR-CHANOPRIVSNEEDEDvariable(No description)
ERR-INVITEONLYCHANvariable(No description)
ERR-BANNEDFROMCHANvariable(No description)
ERR-BADCHANNELKEYvariable(No description)
RPL-LOGGEDINvariable(No description)
RPL-LOGGEDOUTvariable(No description)
ERR-NICKLOCKEDvariable(No description)
RPL-SASLSUCCESSvariable(No description)
ERR-SASLFAILvariable(No description)
ERR-SASLTOOLONGvariable(No description)
ERR-SASLABORTEDvariable(No description)
ERR-SASLALREADYvariable(No description)
RPL-SASLMECHSvariable(No description)
RPL-MONONLINEvariable(No description)
RPL-MONOFFLINEvariable(No description)
RPL-MONLISTvariable(No description)
RPL-ENDOFMONLISTvariable(No description)
ERR-MONLISTFULLvariable(No description)
CMD-FAILvariable(No description)
CMD-WARNvariable(No description)
CMD-NOTEvariable(No description)
capvariable(No description)
cap?variable(No description)
make-capvariable(No description)
cap-namevariable(No description)
cap-valuevariable(No description)
cap->stringvariable(No description)
string->capvariable(No description)
parse-cap-listvariable(No description)
CAP-SASLvariable(No description)
CAP-MESSAGE-TAGSvariable(No description)
CAP-SERVER-TIMEvariable(No description)
CAP-ACCOUNT-TAGvariable(No description)
CAP-ACCOUNT-NOTIFYvariable(No description)
CAP-EXTENDED-JOINvariable(No description)
CAP-USERHOST-IN-NAMESvariable(No description)
CAP-MULTI-PREFIXvariable(No description)
CAP-AWAY-NOTIFYvariable(No description)
CAP-CHGHOSTvariable(No description)
CAP-INVITE-NOTIFYvariable(No description)
CAP-SETNAMEvariable(No description)
CAP-BATCHvariable(No description)
CAP-LABELED-RESPONSEvariable(No description)
CAP-ECHO-MESSAGEvariable(No description)
CAP-CAP-NOTIFYvariable(No description)
CAP-CHATHISTORYvariable(No description)
CAP-READ-MARKERvariable(No description)
CAP-MONITORvariable(No description)
tier-1-capsvariable(No description)
tier-2-capsvariable(No description)
standard-capsvariable(No description)
cap-client-statevariable(No description)
cap-client-state?variable(No description)
make-cap-client-statevariable(No description)
cap-client-state-phasevariable(No description)
cap-client-state-server-capsvariable(No description)
cap-client-state-requestedvariable(No description)
cap-client-state-ackedvariable(No description)
cap-client-state-nakkedvariable(No description)
cap-client-state-done?variable(No description)
cap-client-startvariable(No description)
cap-client-advancevariable(No description)
cap-server-statevariable(No description)
cap-server-state?variable(No description)
make-cap-server-statevariable(No description)
cap-server-state-phasevariable(No description)
cap-server-state-supportedvariable(No description)
cap-server-state-enabledvariable(No description)
cap-server-state-cap-302variable(No description)
cap-server-state-done?variable(No description)
cap-server-advancevariable(No description)
SASL-PLAINvariable(No description)
SASL-EXTERNALvariable(No description)
SASL-SCRAM-SHA-256variable(No description)
encode-authenticate-payloadvariable(No description)
decode-authenticate-chunksvariable(No description)
plain-payloadvariable(No description)
parse-plain-payloadvariable(No description)
sasl-client-statevariable(No description)
sasl-client-state?variable(No description)
make-sasl-client-statevariable(No description)
sasl-client-state-mechanismvariable(No description)
sasl-client-state-phasevariable(No description)
set-sasl-client-state-phase!variable(No description)
sasl-client-state-resultvariable(No description)
set-sasl-client-state-result!variable(No description)
sasl-client-state-authcidvariable(No description)
sasl-client-state-passwordvariable(No description)
sasl-client-startvariable(No description)
sasl-client-advancevariable(No description)
sasl-server-statevariable(No description)
sasl-server-state?variable(No description)
make-sasl-server-statevariable(No description)
sasl-server-state-mechanismvariable(No description)
set-sasl-server-state-mechanism!variable(No description)
sasl-server-state-phasevariable(No description)
set-sasl-server-state-phase!variable(No description)
sasl-server-state-resultvariable(No description)
set-sasl-server-state-result!variable(No description)
sasl-server-state-authcidvariable(No description)
set-sasl-server-state-authcid!variable(No description)
sasl-server-advancevariable(No description)
scram-client-drivervariable(No description)
scram-server-drivervariable(No description)
make-scram-client-statevariable(No description)
make-scram-server-statevariable(No description)
scram-credentialsvariable(No description)
scram-credentials-salt-b64variable(No description)
scram-credentials-iterationsvariable(No description)
scram-credentials-stored-keyvariable(No description)
scram-credentials-server-keyvariable(No description)
derive-scram-credentialsvariable(No description)
batch-start-linevariable(No description)
batch-end-linevariable(No description)
make-batch-reftagvariable(No description)
batch-contextvariable(No description)
batch-context?variable(No description)
make-batch-contextvariable(No description)
batch-context-open-tagsvariable(No description)
batch-context-typesvariable(No description)
batch-context-open?variable(No description)
batch-open!variable(No description)
batch-close!variable(No description)
batch-tag-ofvariable(No description)
batch-type-ofvariable(No description)
CHATHISTORY-BATCH-TYPEvariable(No description)
CHATHISTORY-BEFOREvariable(No description)
CHATHISTORY-AFTERvariable(No description)
CHATHISTORY-LATESTvariable(No description)
CHATHISTORY-AROUNDvariable(No description)
CHATHISTORY-BETWEENvariable(No description)
CHATHISTORY-TARGETSvariable(No description)
CHATHISTORY-FAIL-INVALID-PARAMSvariable(No description)
CHATHISTORY-FAIL-INVALID-TARGETvariable(No description)
CHATHISTORY-FAIL-MESSAGE-ERRORvariable(No description)
(No description)
chathistory-selectorvariable(No description)
chathistory-selector?variable(No description)
make-chathistory-selectorvariable(No description)
chathistory-selector-kindvariable(No description)
chathistory-selector-valuevariable(No description)
parse-chathistory-selectorvariable(No description)
chathistory-selector->stringvariable(No description)
chathistory-queryvariable(No description)
chathistory-query?variable(No description)
chathistory-query-subcommandvariable(No description)
chathistory-query-targetvariable(No description)
chathistory-query-selector1variable(No description)
chathistory-query-selector2variable(No description)
chathistory-query-limitvariable(No description)
parse-chathistory-linevariable(No description)
chathistory-linevariable(No description)
READ-MARKER-CAPvariable(No description)
read-markervariable(No description)
read-marker?variable(No description)
make-read-markervariable(No description)
read-marker-targetvariable(No description)
read-marker-timestampvariable(No description)
parse-markread-linevariable(No description)
markread-query-linevariable(No description)
markread-set-linevariable(No description)
MONITOR-ADDvariable(No description)
MONITOR-REMOVEvariable(No description)
MONITOR-CLEARvariable(No description)
MONITOR-LISTvariable(No description)
MONITOR-STATUSvariable(No description)
monitor-commandvariable(No description)
monitor-command?variable(No description)
monitor-command-subcommandvariable(No description)
monitor-command-targetsvariable(No description)
parse-monitor-linevariable(No description)
monitor-linevariable(No description)
monitor-online-linevariable(No description)
monitor-offline-linevariable(No description)
monitor-list-linevariable(No description)
monitor-end-of-list-linevariable(No description)
monitor-list-full-linevariable(No description)
irc-connectionvariable(No description)
make-irc-connectionvariable(No description)
irc-connection?variable(No description)
irc-connection-servervariable(No description)
irc-connection-portvariable(No description)
irc-connection-nickvariable(No description)
irc-connection-uservariable(No description)
irc-connection-realnamevariable(No description)
irc-connection-tls?variable(No description)
irc-connection-statevariable(No description)
irc-connection-socketvariable(No description)
irc-connection-current-nickvariable(No description)
irc-connectvariable(No description)
irc-disconnectvariable(No description)
irc-connected?variable(No description)
irc-on-messagevariable(No description)
irc-onvariable(No description)
irc-send-rawvariable(No description)
irc-process-inputvariable(No description)
irc-privmsgvariable(No description)
irc-noticevariable(No description)
irc-joinvariable(No description)
irc-partvariable(No description)
irc-quitvariable(No description)
irc-nickvariable(No description)
irc-modevariable(No description)
irc-nickserv-identifyvariable(No description)
irc-runvariable(No description)
irc-tickvariable(No description)