Skip to content

Instantly share code, notes, and snippets.

@funrep
Created October 6, 2013 12:49
Show Gist options
  • Save funrep/6853705 to your computer and use it in GitHub Desktop.
Save funrep/6853705 to your computer and use it in GitHub Desktop.
(ns tob.core
(:import (java.net Socket)
(java.io PrintWriter InputStreamReader BufferedReader)))
(def codetalk {:name "irc.codetalk.io" :port 6667})
(def user {:name "tob" :nick "tob"})
(declare conn-handler)
(defn connect [server]
(let [socket (Socket. (:name server) (:port server))
in (BufferedReader. (InputStreamReader. (.getInputStream socket)))
out (PrintWriter. (.getOutputStream socket))
conn (ref {:in in :out out})]
(doto (Thread. #(conn-handler conn)) (.start))
conn))
(defn write [conn msg]
(doto (:out @conn)
(.println (str msg "\r"))
(.flush)))
(defn conn-handler [conn]
(while (nil? (:exit @conn))
(let [msg (.readLine (:in @conn))]
(println msg)
(cond
(re-find #"^ERROR :Closing Link:" msg)
(dosync (alter conn merge {:exit true}))
(re-find #"^PING" msg)
(write conn (str "PONG " (re-find #":.*" msg)))))))
(defn login [conn user]
(write conn (str "NICK " (:nick user)))
(write conn (str "USER " (:nick user) " 0 * :" (:name user))))
(def irc (connect codetalk))
(defn -main [& args]
(do
(login irc user)
(write irc "JOIN #lobby")
(write irc "PRIVMSG #lobby : hai! im a lisp irc bot")
(write irc "QUIT")))
@funrep
Copy link
Author

funrep commented Oct 6, 2013

$ lein repl
REPL started; server listening on localhost port 1161
:irc.codetalk.io NOTICE AUTH :* Looking up your hostname...
:irc.codetalk.io NOTICE AUTH :
* Couldn't resolve your hostname; using your IP address instead
tob.core=> ERROR :Closing Link: [88.129.144.132](Ping timeout: 37 seconds)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment