Advertisement
Guest User

Untitled

a guest
Dec 6th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 1.14 KB | None | 0 0
  1. #lang s-exp "lang/irc.rkt"
  2. (require racket/match
  3.          racket/string)
  4.  
  5. (define msg-log
  6.   (make-hash))
  7.  
  8. (define (add-to-log key msg)
  9.   (hash-update! msg-log
  10.                 key
  11.                 (λ (v) (cons msg v))
  12.                 '()))
  13.  
  14. (define (get-log key)
  15.   (hash-ref msg-log key '()))
  16.  
  17. (define (echo con src dst msg)
  18.   (define key
  19.     (list con dst))
  20.  
  21.   (match (regexp-match #px"^s/((?:[^/]|\\\\.)*)/((?:[^/]|\\\\.)*)/(.*)$" msg)
  22.     [(list _ pat rep ext)
  23.      (define matching
  24.        (for/or ([x (in-list (get-log key))]
  25.                 #:when (regexp-match? pat x))
  26.          x))
  27.  
  28.      (define replace
  29.        (if (string-contains? ext "g")
  30.           regexp-replace*
  31.           regexp-replace))
  32.  
  33.      (when matching
  34.        (let ([replaced (replace pat matching rep)])
  35.          (add-to-log key replaced)
  36.          (irc-send-message! con dst replaced)))]
  37.  
  38.     [_ (add-to-log key msg)]))
  39.  
  40. ===================
  41. #:nick iised
  42. #:user iised
  43. #:real "iitalics's bot"
  44. #:description "sed-style replacement bot, e.g. s/<regexp>/<replacement>/"
  45. #:channels ([("irc.freenode.net" 6667) "#ccisneu_bots" "#ccisneu"])
  46. #:hooks (echo)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement