added !tz
parent
090a11042e
commit
41eb8315f1
|
@ -11,6 +11,7 @@
|
||||||
(rnrs exceptions))
|
(rnrs exceptions))
|
||||||
|
|
||||||
(define +channels+ '("#tildetown" "#bots"))
|
(define +channels+ '("#tildetown" "#bots"))
|
||||||
|
;; (define +channels+ '("#bots"))
|
||||||
|
|
||||||
(define (scdr lst)
|
(define (scdr lst)
|
||||||
"Safe CDR. Returns CDR of lst, if it is a list. Returns lst otherwise."
|
"Safe CDR. Returns CDR of lst, if it is a list. Returns lst otherwise."
|
||||||
|
@ -58,6 +59,14 @@
|
||||||
port)))
|
port)))
|
||||||
sock))
|
sock))
|
||||||
|
|
||||||
|
(define (get-username str)
|
||||||
|
(define (get-username-list lst)
|
||||||
|
(cond ((null? lst) '())
|
||||||
|
((eq? (car lst) #\!) '())
|
||||||
|
(else (cons (car lst)
|
||||||
|
(get-username-list (cdr lst))))))
|
||||||
|
(list->string (cdr (get-username-list (string->list str)))))
|
||||||
|
|
||||||
(define (pong stream)
|
(define (pong stream)
|
||||||
(format stream "PONG :anna\r\n"))
|
(format stream "PONG :anna\r\n"))
|
||||||
|
|
||||||
|
@ -103,6 +112,16 @@
|
||||||
((eq? language 'cl) (find-cl-documentation search))
|
((eq? language 'cl) (find-cl-documentation search))
|
||||||
(else "Unrecognized language! Supported languages are: cl")))
|
(else "Unrecognized language! Supported languages are: cl")))
|
||||||
|
|
||||||
|
(define (read-file f)
|
||||||
|
(call-with-input-file f get-string-all))
|
||||||
|
|
||||||
|
(define (timezone user)
|
||||||
|
(let ((path (string-append "/home/" user "/.tz")))
|
||||||
|
(if (access? path R_OK)
|
||||||
|
(read-file path)
|
||||||
|
(string-append user
|
||||||
|
" has not set their timezone. Use `echo '<timezone here>' > ~/.tz' to add your timezone."))))
|
||||||
|
|
||||||
(define (slice start end lst)
|
(define (slice start end lst)
|
||||||
"Return the list between index start and end (start inclusive, end not inclusive)."
|
"Return the list between index start and end (start inclusive, end not inclusive)."
|
||||||
(cond
|
(cond
|
||||||
|
@ -154,7 +173,7 @@
|
||||||
(pong stream))
|
(pong stream))
|
||||||
((or (equal? ":!rollcall" (slist-ref data 3))
|
((or (equal? ":!rollcall" (slist-ref data 3))
|
||||||
(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, !tz <optionally user>, and !eval <s-expr>."))
|
||||||
((equal? ":!eval" (slist-ref data 3))
|
((equal? ":!eval" (slist-ref data 3))
|
||||||
(let ((expr (string-concatenate (intersperse " " (cdr (member ":!eval" filtered-data))))))
|
(let ((expr (string-concatenate (intersperse " " (cdr (member ":!eval" filtered-data))))))
|
||||||
(send-message stream chn (evaluate expr))))
|
(send-message stream chn (evaluate expr))))
|
||||||
|
@ -162,6 +181,10 @@
|
||||||
(let ((lang (slist-ref data 4))
|
(let ((lang (slist-ref data 4))
|
||||||
(search (escape-string (string-concatenate (intersperse " " (cddr (member ":!doc" filtered-data)))))))
|
(search (escape-string (string-concatenate (intersperse " " (cddr (member ":!doc" filtered-data)))))))
|
||||||
(send-message stream chn (find-documentation (string->symbol lang) search))))
|
(send-message stream chn (find-documentation (string->symbol lang) search))))
|
||||||
|
((equal? ":!tz" (slist-ref data 3))
|
||||||
|
(send-message stream chn (if (= 4 (length data))
|
||||||
|
(timezone (get-username (car data)))
|
||||||
|
(timezone (slist-ref data 4)))))
|
||||||
((and (= 7 (length data))
|
((and (= 7 (length data))
|
||||||
(equal? (list-tail data 4) '("ACTION" "shoots" "anna")))
|
(equal? (list-tail data 4) '("ACTION" "shoots" "anna")))
|
||||||
(send-action stream chn "dies")
|
(send-action stream chn "dies")
|
||||||
|
|
Loading…
Reference in New Issue