Skip to content

Commit 166cae8

Browse files
samharadNARKOZ
authored andcommitted
Clojure implementation (NARKOZ#174)
* clojure implementation * gf --> boss * newlines
1 parent 64f2d1b commit 166cae8

File tree

4 files changed

+163
-0
lines changed

4 files changed

+163
-0
lines changed

clojure/coffee.clj

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
(ns hacker-scripts.coffee
2+
(:require [environ.core :refer [env]])
3+
(:import
4+
(java.net Socket)
5+
(java.io BufferedReader PrintWriter InputStreamReader)))
6+
7+
(def my-username "my-username")
8+
(def my-password "my-password")
9+
10+
(def coffee-machine-ip "10.10.42.42")
11+
(def password-prompt "Password: ")
12+
(def connection-port 23)
13+
14+
(def sec-delay-before-brew 17)
15+
(def sec-delay-before-pour 24)
16+
17+
(defn logged-in? [] (= (:USER env) my-username))
18+
19+
(defn auth [in-stream out-stream]
20+
(if (= (.readLine in-stream) password-prompt)
21+
(.println out-stream my-password)
22+
(throw (RuntimeException.
23+
"Failed to authenticate with coffee machine"))))
24+
25+
(defn command-brew-pour [out-stream]
26+
(do
27+
(Thread/sleep (* 1000 sec-delay-before-brew))
28+
(.println out-stream "sys brew")
29+
(Thread/sleep (* 1000 sec-delay-before-pour))
30+
(.println out-stream "sys pour")))
31+
32+
(defn coffee []
33+
(if (logged-in?)
34+
(with-open [socket (Socket. coffee-machine-ip connection-port)
35+
out-stream (PrintWriter. (.getOutputStream socket) true)
36+
in-stream (BufferedReader. (InputStreamReader. (.getInputStream socket)))]
37+
(do
38+
(auth in-stream out-stream)
39+
(command-brew-pour out-stream)))))

clojure/hangover.clj

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
(ns hacker-scripts.hangover
2+
(:import
3+
(com.twilio Twilio)
4+
(com.twilio.rest.api.v2010.account Message)
5+
(com.twilio.type PhoneNumber)))
6+
7+
(def acc-sid "my twilio account SID")
8+
(def acc-tkn "my twilio secret token")
9+
10+
(def my-num (PhoneNumber. "+10001112222"))
11+
(def boss-num (PhoneNumber. "+19998887777"))
12+
13+
(def reasons ["Receiving delivery"
14+
"Waiting for repairman"
15+
"Nasty cold"])
16+
17+
(defn twilio-init []
18+
(Twilio/init acc-sid acc-tkn))
19+
20+
(defn send-sms [to-num from-num message]
21+
(.. Message (creator to-num from-num message) create))
22+
23+
(def send-sms-boss (partial send-sms boss-num my-num))
24+
25+
(defn hangover []
26+
(twilio-init)
27+
(let [message (rand-nth reasons)]
28+
(send-sms-boss message)))

clojure/kumar.clj

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
(ns hacker-scripts.kumar
2+
(:import
3+
(java.util Properties)
4+
(javax.mail Session Authenticator PasswordAuthentication Message$RecipientType Transport Folder Flags Flags$Flag)
5+
(javax.mail.internet MimeMessage InternetAddress)
6+
(javax.mail.search FlagTerm FromTerm AndTerm OrTerm SubjectTerm BodyTerm SearchTerm)))
7+
8+
(def host "smtp.gmail.com")
9+
(def my-email "[email protected]")
10+
(def my-password "my-gmail-password")
11+
(def kumar-email "[email protected]")
12+
13+
(def seen-flag (Flags. (Flags$Flag/SEEN)))
14+
15+
(def unread-term (FlagTerm. seen-flag false))
16+
17+
(defn get-session []
18+
(let [authenticator (proxy [Authenticator] []
19+
(getPasswordAuthentication []
20+
(PasswordAuthentication. my-email my-password)))
21+
props (Properties.)]
22+
(.put props "mail.smtp.host" "smtp.gmail.com")
23+
(.put props "mail.smtp.port" "587")
24+
(.put props "mail.smtp.auth" "true")
25+
(.put props "mail.smtp.starttls.enable" "true")
26+
(.. Session (getInstance props authenticator))))
27+
28+
(defn get-inbox [session]
29+
(let [store (.getStore session "imaps")
30+
inbox (do
31+
(.connect store host my-email my-password)
32+
(.getFolder store "inbox"))]
33+
(.open inbox Folder/READ_WRITE)
34+
inbox))
35+
36+
(defn get-no-worries-message [session]
37+
(let [message (MimeMessage. session)]
38+
(.setFrom message (InternetAddress. my-email))
39+
(.addRecipient message Message$RecipientType/TO (InternetAddress. kumar-email))
40+
(.setSubject message "Database fixes")
41+
(.setText message "No worries mate, be careful next time")
42+
message))
43+
44+
(defn search-term [pattern]
45+
(OrTerm. (into-array SearchTerm [(SubjectTerm. pattern) (BodyTerm. pattern)])))
46+
47+
(defn any-of-search-term [& patterns]
48+
(OrTerm. (into-array (map search-term patterns))))
49+
50+
(defn from-term [addr]
51+
(FromTerm. (InternetAddress. addr)))
52+
53+
(defn get-unread-sos-from-kumar [inbox]
54+
(let [flag (AndTerm. (into-array SearchTerm [unread-term
55+
(from-term kumar-email)
56+
(any-of-search-term "help" "sorry" "trouble")]))]
57+
(.search inbox flag)))
58+
59+
(defn mark-as-read [inbox messages]
60+
(.setFlags inbox messages seen-flag true))
61+
62+
(defn kumar-asshole []
63+
(let [session (get-session)
64+
inbox (get-inbox session)
65+
unread-sos-from-kumar (get-unread-sos-from-kumar inbox)]
66+
(when (seq unread-sos-from-kumar)
67+
(mark-as-read inbox unread-sos-from-kumar)
68+
(Transport/send (get-no-worries-message session)))))

clojure/smack.clj

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
(ns hacker-scripts.smack
2+
(:import
3+
(com.twilio Twilio)
4+
(com.twilio.rest.api.v2010.account Message)
5+
(com.twilio.type PhoneNumber)))
6+
7+
(def acc-sid "my twilio account SID")
8+
(def acc-tkn "my twilio secret token")
9+
10+
(def my-num (PhoneNumber. "+10001112222"))
11+
(def her-num (PhoneNumber. "+19998887777"))
12+
13+
(def reasons ["Working hard"
14+
"Gotta ship this feature"
15+
"Someone fucked the system again"])
16+
17+
(defn twilio-init []
18+
(Twilio/init acc-sid acc-tkn))
19+
20+
(defn send-sms [to-num from-num message]
21+
(.. Message (creator to-num from-num message) create))
22+
23+
(def send-sms-girlfriend (partial send-sms her-num my-num))
24+
25+
(defn smack []
26+
(twilio-init)
27+
(let [message (rand-nth reasons)]
28+
(send-sms-girlfriend message)))

0 commit comments

Comments
 (0)