Skip to content

Commit 11a67df

Browse files
committed
Add Python 3 implementation
1 parent 8260c7d commit 11a67df

File tree

6 files changed

+223
-0
lines changed

6 files changed

+223
-0
lines changed

python3/fucking_coffee.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
import datetime
5+
import telnetlib
6+
import time
7+
8+
from hackerutils import sh
9+
10+
COFFEE_MACHINE_ADDR = '10.10.42.42'
11+
COFFEE_MACHINE_PASS = '1234'
12+
COFFEE_MACHINE_PROM = 'Password: '
13+
14+
15+
def main():
16+
# Skip on weekends.
17+
if datetime.date.today().weekday() in (0, 6,):
18+
return
19+
20+
# Exit early if no sessions with my_username are found.
21+
if not any(s.startswith(b'my_username ') for s in sh('who').split(b'\n')):
22+
return
23+
24+
time.sleep(17)
25+
26+
conn = telnetlib.Telnet(host=COFFEE_MACHINE_ADDR)
27+
conn.open()
28+
conn.expect([COFFEE_MACHINE_PROM])
29+
conn.write(COFFEE_MACHINE_PASS)
30+
31+
conn.write('sys brew')
32+
time.sleep(64)
33+
34+
conn.write('sys pour')
35+
conn.close()
36+
37+
38+
if __name__ == '__main__':
39+
main()

python3/hackerutils.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
import pathlib
5+
import subprocess
6+
7+
from dotenv import Dotenv
8+
9+
10+
def get_dotenv(filename='.env'):
11+
return Dotenv(str(pathlib.Path(__file__).parent / filename))
12+
13+
14+
def sh(*args):
15+
proc = subprocess.Popen(args, stdout=subprocess.PIPE)
16+
stdout, _ = proc.communicate()
17+
return stdout
18+
19+
20+
def get_log_path(name):
21+
path = pathlib.Path(__file__).parent / 'logs' / name
22+
path.parent.mkdir(parents=True, exist_ok=True)
23+
return path

python3/hangover.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
import datetime
5+
import random
6+
7+
from twilio import TwilioRestException
8+
from twilio.rest import TwilioRestClient
9+
10+
from hackerutils import get_dotenv, get_log_path, sh
11+
12+
dotenv = get_dotenv()
13+
14+
TWILIO_ACCOUNT_SID = dotenv['TWILIO_ACCOUNT_SID']
15+
TWILIO_AUTH_TOKEN = dotenv['TWILIO_AUTH_TOKEN']
16+
17+
LOG_FILE_PATH = get_log_path('hangover.txt')
18+
19+
20+
def main():
21+
# Skip on weekends.
22+
if datetime.date.today().weekday() in (0, 6,):
23+
return
24+
25+
# Exit early if any session with my_username is found.
26+
if any(s.startswith(b'my_username ') for s in sh('who').split(b'\n')):
27+
return
28+
29+
client = TwilioRestClient(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
30+
31+
# Phone numbers.
32+
my_number = '+xxx'
33+
number_of_boss = '+xxx'
34+
35+
excuses = [
36+
'Locked out',
37+
'Pipes broke',
38+
'Food poisoning',
39+
'Not feeling well',
40+
]
41+
42+
try:
43+
# Send a text message.
44+
client.messages.create(
45+
to=number_of_boss,
46+
from_=my_number,
47+
body='Gonna work from home. ' + random.choice(excuses),
48+
)
49+
except TwilioRestException as e:
50+
# Log errors.
51+
with LOG_FILE_PATH.open('a') as f:
52+
f.write('Failed to send SMS: {}'.format(e))
53+
raise
54+
55+
56+
if __name__ == '__main__':
57+
main()

python3/kumar_asshole.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
import re
5+
6+
import gmail
7+
import yagmail
8+
9+
from hackerutils import get_dotenv
10+
11+
dotenv = get_dotenv()
12+
13+
GMAIL_USERNAME = dotenv['GMAIL_USERNAME']
14+
GMAIL_PASSWORD = dotenv['GMAIL_PASSWORD']
15+
16+
KUMAR_EMAIL = '[email protected]'
17+
KEYWORDS_REGEX = re.compile(r'sorry|help|wrong', re.IGNORECASE)
18+
19+
REPLY_BODY = "No problem. I've fixed it. \n\n Please be careful next time."
20+
21+
22+
yagmail.register(GMAIL_USERNAME, GMAIL_PASSWORD)
23+
24+
25+
def send_reply(subject):
26+
yag = yagmail.SMTP(GMAIL_USERNAME)
27+
yag.send(
28+
to=KUMAR_EMAIL,
29+
subject='RE: {}'.format(subject),
30+
contents=REPLY_BODY,
31+
)
32+
33+
34+
def main():
35+
g = gmail.login(GMAIL_USERNAME, GMAIL_PASSWORD)
36+
for mail in g.inbox().mail(unread=True, sender=KUMAR_EMAIL, prefetch=True):
37+
if KEYWORDS_REGEX.search(mail.body):
38+
# Restore DB and send a reply.
39+
mail.add_label('Database fixes')
40+
send_reply(mail.subject)
41+
42+
43+
if __name__ == '__main__':
44+
main()

python3/requirements.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
dotenv
2+
twilio
3+
yagmail
4+
git+https://github.com/charlierguo/gmail

python3/smack_my_bitch_up.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/usr/bin/env python3
2+
# -*- coding: utf-8 -*-
3+
4+
import datetime
5+
import random
6+
7+
from twilio import TwilioRestException
8+
from twilio.rest import TwilioRestClient
9+
10+
from hackerutils import get_dotenv, get_log_path, sh
11+
12+
dotenv = get_dotenv()
13+
14+
TWILIO_ACCOUNT_SID = dotenv['TWILIO_ACCOUNT_SID']
15+
TWILIO_AUTH_TOKEN = dotenv['TWILIO_AUTH_TOKEN']
16+
17+
LOG_FILE_PATH = get_log_path('smack_my_bitch_up.txt')
18+
19+
20+
def main():
21+
# Skip on weekends.
22+
if datetime.date.today().weekday() in (0, 6,):
23+
return
24+
25+
# Exit early if no sessions with my_username are found.
26+
if not any(s.startswith(b'my_username ') for s in sh('who').split(b'\n')):
27+
return
28+
29+
client = TwilioRestClient(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
30+
31+
# Phone numbers.
32+
my_number = '+xxx'
33+
her_number = '+xxx'
34+
35+
reasons = [
36+
'Working hard',
37+
'Gotta ship this feature',
38+
'Someone fucked the system again',
39+
]
40+
41+
try:
42+
# Send a text message.
43+
client.messages.create(
44+
to=her_number,
45+
from_=my_number,
46+
body='Late at work. ' + random.choice(reasons),
47+
)
48+
except TwilioRestException as e:
49+
# Log errors.
50+
with LOG_FILE_PATH.open('a') as f:
51+
f.write('Failed to send SMS: {}'.format(e))
52+
raise
53+
54+
55+
if __name__ == '__main__':
56+
main()

0 commit comments

Comments
 (0)