add irc connection check
This commit is contained in:
parent
1f49e46901
commit
1925e81cc9
54
irc-bot.rkt
Normal file
54
irc-bot.rkt
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
#lang racket/base
|
||||||
|
(require irc racket/async-channel)
|
||||||
|
(provide pasterack-irc-connect irc-paste)
|
||||||
|
|
||||||
|
;; pasterack irc bot
|
||||||
|
|
||||||
|
(define MIRROR? #f)
|
||||||
|
|
||||||
|
(define FREENODE "chat.freenode.net")
|
||||||
|
(define PORT 6667)
|
||||||
|
(define NAME (if MIRROR? "pasteracktest" "pasterack"))
|
||||||
|
|
||||||
|
|
||||||
|
(define irc-channels (if MIRROR? '("#racktest") '("#racket")))
|
||||||
|
|
||||||
|
(define current-irc-connection #f)
|
||||||
|
(define current-irc-listener (thread void))
|
||||||
|
(define current-irc-monitor (thread void))
|
||||||
|
|
||||||
|
|
||||||
|
(define (irc-connect/internal)
|
||||||
|
(define-values (irc-connection ready)
|
||||||
|
(irc-connect FREENODE PORT NAME NAME NAME #:return-eof #t))
|
||||||
|
(define achan (irc-connection-incoming irc-connection))
|
||||||
|
(set! current-irc-connection irc-connection)
|
||||||
|
(set! current-irc-listener
|
||||||
|
(thread
|
||||||
|
(lambda ()
|
||||||
|
(let loop ()
|
||||||
|
(unless (eof-object? (async-channel-get achan))
|
||||||
|
(loop))))))
|
||||||
|
ready)
|
||||||
|
|
||||||
|
;; creates an irc monitor thread
|
||||||
|
(define (pasterack-irc-connect)
|
||||||
|
(set! current-irc-monitor
|
||||||
|
(thread
|
||||||
|
(lambda ()
|
||||||
|
(let loop ()
|
||||||
|
(when (thread-dead? current-irc-listener)
|
||||||
|
(sync (irc-connect/internal))
|
||||||
|
(join-channels))
|
||||||
|
(sleep 60)
|
||||||
|
(loop)))))
|
||||||
|
(printf "conn: ~a\n" current-irc-connection))
|
||||||
|
|
||||||
|
(define (join-channels)
|
||||||
|
(printf "join: ~a\n" current-irc-connection)
|
||||||
|
(for ([c irc-channels]) (irc-join-channel current-irc-connection c)))
|
||||||
|
|
||||||
|
(define (irc-paste msg)
|
||||||
|
(printf "paste: ~a\n" current-irc-connection)
|
||||||
|
(for ([c irc-channels]) (irc-send-message current-irc-connection c msg)))
|
||||||
|
|
|
@ -6,11 +6,7 @@
|
||||||
(require racket/system racket/runtime-path)
|
(require racket/system racket/runtime-path)
|
||||||
(require redis data/ring-buffer)
|
(require redis data/ring-buffer)
|
||||||
(require "pasterack-utils.rkt" "pasterack-parsing-utils.rkt"
|
(require "pasterack-utils.rkt" "pasterack-parsing-utils.rkt"
|
||||||
"pasterack-test-cases.rkt")
|
"pasterack-test-cases.rkt" "irc-bot.rkt")
|
||||||
|
|
||||||
;; irc bot
|
|
||||||
(require irc)
|
|
||||||
(require racket/async-channel)
|
|
||||||
|
|
||||||
(provide/contract (start (request? . -> . response?)))
|
(provide/contract (start (request? . -> . response?)))
|
||||||
|
|
||||||
|
@ -43,14 +39,7 @@
|
||||||
(define log-file (build-path here-dir "pasterack.log"))
|
(define log-file (build-path here-dir "pasterack.log"))
|
||||||
(define log-port (open-output-file log-file #:mode 'text #:exists 'append))
|
(define log-port (open-output-file log-file #:mode 'text #:exists 'append))
|
||||||
|
|
||||||
;irc bot
|
(pasterack-irc-connect)
|
||||||
(define-values (irc-connection ready)
|
|
||||||
; (irc-connect "chat.freenode.net" 6667 "pasterackm" "pasterackm" "pasterack.org mirror"))
|
|
||||||
(irc-connect "chat.freenode.net" 6667 "pasterack" "pasterack" "pasterack.org"))
|
|
||||||
(sync ready)
|
|
||||||
;(define irc-channels '("#racktest"))
|
|
||||||
(define irc-channels '("#racket"))
|
|
||||||
(for ([chan irc-channels]) (irc-join-channel irc-connection chan))
|
|
||||||
|
|
||||||
(define sample-pastes
|
(define sample-pastes
|
||||||
'("8953" ; Sierpinski
|
'("8953" ; Sierpinski
|
||||||
|
@ -489,11 +478,9 @@
|
||||||
'views 0))
|
'views 0))
|
||||||
(when (exists-binding? 'irc bs)
|
(when (exists-binding? 'irc bs)
|
||||||
(define nick (extract-binding/single 'nick bs))
|
(define nick (extract-binding/single 'nick bs))
|
||||||
(for ([c irc-channels])
|
(irc-paste (++ (if (string=? "" nick) "" (++ nick " pasted: "))
|
||||||
(irc-send-message irc-connection c
|
|
||||||
(++ (if (string=? "" nick) "" (++ nick " pasted: "))
|
|
||||||
(if (string=? "" paste-name) "" (++ paste-name ", "))
|
(if (string=? "" paste-name) "" (++ paste-name ", "))
|
||||||
paste-url))))
|
paste-url)))
|
||||||
(fprintf log-port "~a\t~a\t~a\t~a\n"
|
(fprintf log-port "~a\t~a\t~a\t~a\n"
|
||||||
tm-str paste-num paste-name (request-client-ip request))
|
tm-str paste-num paste-name (request-client-ip request))
|
||||||
(response/xexpr
|
(response/xexpr
|
||||||
|
|
Loading…
Reference in New Issue
Block a user