mirror of
https://github.com/narkoz/hacker-scripts
synced 2025-08-23 10:57:13 +00:00
Clojure implementation (#174)
* clojure implementation * gf --> boss * newlines
This commit is contained in:
parent
64f2d1b7dc
commit
166cae8079
39
clojure/coffee.clj
Normal file
39
clojure/coffee.clj
Normal file
@ -0,0 +1,39 @@
|
||||
(ns hacker-scripts.coffee
|
||||
(:require [environ.core :refer [env]])
|
||||
(:import
|
||||
(java.net Socket)
|
||||
(java.io BufferedReader PrintWriter InputStreamReader)))
|
||||
|
||||
(def my-username "my-username")
|
||||
(def my-password "my-password")
|
||||
|
||||
(def coffee-machine-ip "10.10.42.42")
|
||||
(def password-prompt "Password: ")
|
||||
(def connection-port 23)
|
||||
|
||||
(def sec-delay-before-brew 17)
|
||||
(def sec-delay-before-pour 24)
|
||||
|
||||
(defn logged-in? [] (= (:USER env) my-username))
|
||||
|
||||
(defn auth [in-stream out-stream]
|
||||
(if (= (.readLine in-stream) password-prompt)
|
||||
(.println out-stream my-password)
|
||||
(throw (RuntimeException.
|
||||
"Failed to authenticate with coffee machine"))))
|
||||
|
||||
(defn command-brew-pour [out-stream]
|
||||
(do
|
||||
(Thread/sleep (* 1000 sec-delay-before-brew))
|
||||
(.println out-stream "sys brew")
|
||||
(Thread/sleep (* 1000 sec-delay-before-pour))
|
||||
(.println out-stream "sys pour")))
|
||||
|
||||
(defn coffee []
|
||||
(if (logged-in?)
|
||||
(with-open [socket (Socket. coffee-machine-ip connection-port)
|
||||
out-stream (PrintWriter. (.getOutputStream socket) true)
|
||||
in-stream (BufferedReader. (InputStreamReader. (.getInputStream socket)))]
|
||||
(do
|
||||
(auth in-stream out-stream)
|
||||
(command-brew-pour out-stream)))))
|
28
clojure/hangover.clj
Normal file
28
clojure/hangover.clj
Normal file
@ -0,0 +1,28 @@
|
||||
(ns hacker-scripts.hangover
|
||||
(:import
|
||||
(com.twilio Twilio)
|
||||
(com.twilio.rest.api.v2010.account Message)
|
||||
(com.twilio.type PhoneNumber)))
|
||||
|
||||
(def acc-sid "my twilio account SID")
|
||||
(def acc-tkn "my twilio secret token")
|
||||
|
||||
(def my-num (PhoneNumber. "+10001112222"))
|
||||
(def boss-num (PhoneNumber. "+19998887777"))
|
||||
|
||||
(def reasons ["Receiving delivery"
|
||||
"Waiting for repairman"
|
||||
"Nasty cold"])
|
||||
|
||||
(defn twilio-init []
|
||||
(Twilio/init acc-sid acc-tkn))
|
||||
|
||||
(defn send-sms [to-num from-num message]
|
||||
(.. Message (creator to-num from-num message) create))
|
||||
|
||||
(def send-sms-boss (partial send-sms boss-num my-num))
|
||||
|
||||
(defn hangover []
|
||||
(twilio-init)
|
||||
(let [message (rand-nth reasons)]
|
||||
(send-sms-boss message)))
|
68
clojure/kumar.clj
Normal file
68
clojure/kumar.clj
Normal file
@ -0,0 +1,68 @@
|
||||
(ns hacker-scripts.kumar
|
||||
(:import
|
||||
(java.util Properties)
|
||||
(javax.mail Session Authenticator PasswordAuthentication Message$RecipientType Transport Folder Flags Flags$Flag)
|
||||
(javax.mail.internet MimeMessage InternetAddress)
|
||||
(javax.mail.search FlagTerm FromTerm AndTerm OrTerm SubjectTerm BodyTerm SearchTerm)))
|
||||
|
||||
(def host "smtp.gmail.com")
|
||||
(def my-email "my-email@gmail.com")
|
||||
(def my-password "my-gmail-password")
|
||||
(def kumar-email "kumar@gmail.com")
|
||||
|
||||
(def seen-flag (Flags. (Flags$Flag/SEEN)))
|
||||
|
||||
(def unread-term (FlagTerm. seen-flag false))
|
||||
|
||||
(defn get-session []
|
||||
(let [authenticator (proxy [Authenticator] []
|
||||
(getPasswordAuthentication []
|
||||
(PasswordAuthentication. my-email my-password)))
|
||||
props (Properties.)]
|
||||
(.put props "mail.smtp.host" "smtp.gmail.com")
|
||||
(.put props "mail.smtp.port" "587")
|
||||
(.put props "mail.smtp.auth" "true")
|
||||
(.put props "mail.smtp.starttls.enable" "true")
|
||||
(.. Session (getInstance props authenticator))))
|
||||
|
||||
(defn get-inbox [session]
|
||||
(let [store (.getStore session "imaps")
|
||||
inbox (do
|
||||
(.connect store host my-email my-password)
|
||||
(.getFolder store "inbox"))]
|
||||
(.open inbox Folder/READ_WRITE)
|
||||
inbox))
|
||||
|
||||
(defn get-no-worries-message [session]
|
||||
(let [message (MimeMessage. session)]
|
||||
(.setFrom message (InternetAddress. my-email))
|
||||
(.addRecipient message Message$RecipientType/TO (InternetAddress. kumar-email))
|
||||
(.setSubject message "Database fixes")
|
||||
(.setText message "No worries mate, be careful next time")
|
||||
message))
|
||||
|
||||
(defn search-term [pattern]
|
||||
(OrTerm. (into-array SearchTerm [(SubjectTerm. pattern) (BodyTerm. pattern)])))
|
||||
|
||||
(defn any-of-search-term [& patterns]
|
||||
(OrTerm. (into-array (map search-term patterns))))
|
||||
|
||||
(defn from-term [addr]
|
||||
(FromTerm. (InternetAddress. addr)))
|
||||
|
||||
(defn get-unread-sos-from-kumar [inbox]
|
||||
(let [flag (AndTerm. (into-array SearchTerm [unread-term
|
||||
(from-term kumar-email)
|
||||
(any-of-search-term "help" "sorry" "trouble")]))]
|
||||
(.search inbox flag)))
|
||||
|
||||
(defn mark-as-read [inbox messages]
|
||||
(.setFlags inbox messages seen-flag true))
|
||||
|
||||
(defn kumar-asshole []
|
||||
(let [session (get-session)
|
||||
inbox (get-inbox session)
|
||||
unread-sos-from-kumar (get-unread-sos-from-kumar inbox)]
|
||||
(when (seq unread-sos-from-kumar)
|
||||
(mark-as-read inbox unread-sos-from-kumar)
|
||||
(Transport/send (get-no-worries-message session)))))
|
28
clojure/smack.clj
Normal file
28
clojure/smack.clj
Normal file
@ -0,0 +1,28 @@
|
||||
(ns hacker-scripts.smack
|
||||
(:import
|
||||
(com.twilio Twilio)
|
||||
(com.twilio.rest.api.v2010.account Message)
|
||||
(com.twilio.type PhoneNumber)))
|
||||
|
||||
(def acc-sid "my twilio account SID")
|
||||
(def acc-tkn "my twilio secret token")
|
||||
|
||||
(def my-num (PhoneNumber. "+10001112222"))
|
||||
(def her-num (PhoneNumber. "+19998887777"))
|
||||
|
||||
(def reasons ["Working hard"
|
||||
"Gotta ship this feature"
|
||||
"Someone fucked the system again"])
|
||||
|
||||
(defn twilio-init []
|
||||
(Twilio/init acc-sid acc-tkn))
|
||||
|
||||
(defn send-sms [to-num from-num message]
|
||||
(.. Message (creator to-num from-num message) create))
|
||||
|
||||
(def send-sms-girlfriend (partial send-sms her-num my-num))
|
||||
|
||||
(defn smack []
|
||||
(twilio-init)
|
||||
(let [message (rand-nth reasons)]
|
||||
(send-sms-girlfriend message)))
|
Loading…
x
Reference in New Issue
Block a user