Guest User

Untitled

a guest
Feb 6th, 2014
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. (ns ircbot-clj.core
  2. (:import (java.net Socket)
  3. (java.io PrintWriter InputStreamReader BufferedReader))
  4. (:gen-class))
  5.  
  6. (defstruct server-struct :name :port)
  7. (defstruct nick-struct :name :nick)
  8. (declare conn-handler)
  9.  
  10. (defn connect [server]
  11. (println (:name server) (:port server))
  12. (let [sock (Socket. (:name server) (:port server))
  13. in (BufferedReader. (InputStreamReader. (.getInputStream sock)))
  14. out (PrintWriter. (.getOutputStream sock))
  15. conn (ref {:in in :out out})]
  16. (doto (Thread. #(conn-handler conn)) (.start))
  17. conn))
  18.  
  19. (defn writer [conn msg]
  20. (doto (:out @conn)
  21. (.println (str msg "\r"))
  22. (.flush)))
  23.  
  24. (defn conn-handler [conn]
  25. (while (nil? (:exit @conn))
  26. (let [msg (.readLine (:in @conn))]
  27. (println msg)
  28. (cond
  29. (let [[_ from priv chan cmd] (re-find #":(.*)!~.* (PRIVMSG) (.*) :(.*)" msg)]
  30. (if (not (nil? cmd))
  31. (def parsed_cmd {:from from :cmd cmd :chan chan}))
  32. parsed_cmd)
  33. (if (= (:cmd parsed_cmd) "!oi")
  34. (writer conn (str "PRIVMSG " (:chan parsed_cmd) " :foda-se" :chan )))
  35. )
  36. (cond
  37. (re-find #"^ERROR :Closing Link:" msg)
  38. (dosync (alter conn merge {:exit true}))
  39. (re-find #"^PING" msg)
  40. (writer conn (str "PONG " (re-find #":.*" msg))))
  41. )
  42. )
  43. )
  44.  
  45. (defn login [conn nick]
  46. (writer conn (str "NICK " (:name nick)))
  47. (writer conn (str "USER " (:nick nick) " 0 * : " (:name nick)))
  48. )
  49.  
  50. (defn -main [& args]
  51. (def nick (struct nick-struct "bot4fun" "bot4fun"))
  52. (def server (struct server-struct (.get args 0) (read-string (.get args 1))))
  53. (def irc (connect server))
  54. (login irc nick)
  55. (writer irc "JOIN #07")
  56. ;(writer irc "QUIT")
  57. )
Advertisement
Add Comment
Please, Sign In to add comment