You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
938 B
39 lines
938 B
#lang racket
|
|
(require "database.rkt")
|
|
(require "config.rkt")
|
|
;; Command Parsing
|
|
|
|
(define (string-head str)
|
|
(substring str 0 1))
|
|
|
|
(define (string-tail str)
|
|
(substring str 1 (string-length str)))
|
|
|
|
(define (cmd? cmdchar cmd)
|
|
(string=? cmdchar (string-head cmd)))
|
|
|
|
(define split-whitespace
|
|
((curry regexp-split) #rx" "))
|
|
|
|
(define (cmdparse command-char)
|
|
(compose
|
|
(lambda (command)
|
|
(match (cmd? command-char (car command))
|
|
[#f 'nil]
|
|
[#t (list (string-tail (car command))
|
|
(cdr command))]))
|
|
split-whitespace))
|
|
|
|
(define parse-exclamation
|
|
(cmdparse "!"))
|
|
|
|
(define parse-at
|
|
(cmdparse "@"))
|
|
|
|
;; Command Dispatcher
|
|
(define (dispatch nick command)
|
|
(match (parse-exclamation command)
|
|
[(list-rest "set" args) (submit-question (caar args) (string-join (cdar args) " "))]
|
|
[(list-rest "alias" args) (make-alias (cadar args) (caar args))]
|
|
[(list-rest name _) (get-question name)]))
|
|
|
|
|