add text filtering and remove newlines from input (thanks natalia\!)

master
opfez 2021-04-09 14:04:19 +00:00
parent 775eb31bc0
commit 34b6b3eee4
1 changed files with 12 additions and 2 deletions

View File

@ -76,10 +76,19 @@
(define (send-action stream chn action) (define (send-action stream chn action)
(format stream "PRIVMSG ~a :\x01ACTION ~a\x01\r\n" chn action)) (format stream "PRIVMSG ~a :\x01ACTION ~a\x01\r\n" chn action))
(define (input-filter str)
(define (remove-newline lst)
(cond
((or (null? lst)
(null? (cdr lst))) lst)
((eq? (car lst) #\\) (remove-newline (cddr lst)))
(else (cons (car lst) (remove-newline (cdr lst))))))
(list->string (remove-newline (string->list str))))
(define (evaluate str) (define (evaluate str)
(guard (ex (guard (ex
(else (begin (display "error encountered!\n") (else (begin (display "error encountered!\n")
'error))) 'error))) ;; << this gets printed in chat
(eval-in-sandbox (read (open-input-string str))))) (eval-in-sandbox (read (open-input-string str)))))
(define (main-loop stream) (define (main-loop stream)
@ -95,7 +104,8 @@
(equal? ":!anna" (slist-ref data 3))) (equal? ":!anna" (slist-ref data 3)))
(send-message stream chn "Hello! I respond to !rollcall, !anna, and !eval <s-expr>.")) (send-message stream chn "Hello! I respond to !rollcall, !anna, and !eval <s-expr>."))
((equal? ":!eval" (slist-ref data 3)) ((equal? ":!eval" (slist-ref data 3))
(let* ((expr (string-concatenate (intersperse " " (cdr (member ":!eval" data)))))) (let* ((filtered-data (map input-filter data))
(expr (string-concatenate (intersperse " " (cdr (member ":!eval" filtered-data))))))
(send-message stream chn (evaluate expr)))) (send-message stream chn (evaluate expr))))
((and (= 7 (length data)) ((and (= 7 (length data))
(equal? (list-tail data 4) '("ACTION" "shoots" "anna"))) (equal? (list-tail data 4) '("ACTION" "shoots" "anna")))